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 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
779 function EditorFormExists(): boolean;
780 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\96¼
\91O
\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
781 procedure AllEditroFormNameTextClearClear();
782 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
783 procedure AllEditroFormMailTextClearClear();
784 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
785 procedure SelectListItem(List: TList);
787 procedure SaveTabURLs;
788 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
789 procedure LoadTabURLs;
790 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
791 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
793 procedure ModifySelectList;
795 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
797 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
799 procedure SetSelectRoundName(Sender: TObject);
801 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
803 function WebBrowserClick(Sender: TObject): WordBool;
804 //!
\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é
805 procedure SetSelectComboBox();
808 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
811 TFavoriteMenuItem = class(TMenuItem)
815 property Data: Pointer read FData write FData;
818 TBBSMenuItem = class(TMenuItem)
822 property Data: Pointer read FData write FData;
825 TLinkToolButton = class(TToolButton)
829 property Data: Pointer read FData write FData;
838 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
839 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
840 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
841 FavoriteArrange, AddressHistory, Preview, Gesture,
842 About, Option, Round, Splash, Sort, ListSelect, Imm,
843 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
844 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
845 InputAssistDataModule;
848 BLANK_HTML: string = 'about:blank';
849 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
851 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
852 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
853 HTML_FILE_NAME = 'temp_preview.html';
854 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
855 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
856 //
\83\81\83b
\83Z
\81[
\83WID
857 USER_TREECLICK = WM_USER + 2000;
858 USER_RESIZED = WM_USER + 2001;
859 USER_MINIMIZED = WM_USER + 2002;
860 USER_SETLINKBAR = WM_USER + 2003;
861 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
864 procedure TGikoForm.CreateParams(var Params: TCreateParams);
867 if FormStyle in [fsNormal, fsStayOnTop] then begin
868 if BorderStyle in [bsSingle, bsSizeable] then begin
869 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
870 Params.WndParent := 0;
875 procedure TGikoForm.FormCreate(Sender: TObject);
877 TVS_NOTOOLTIPS = $0080;
883 wp: TWindowPlacement;
887 Writeln('============================================================');
888 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
890 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
891 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¢');
892 Writeln('============================================================');
895 Sort.SetSortDate(Now());
897 FTreeType := gttNone;
898 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
900 Application.HookMainWindow(Hook);
901 FIsIgnoreResize := rtResizing;
902 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
903 //(
\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¢)
904 //
\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
905 GetGroupIndex(GikoDM.GikoFormActionList);
906 FSearchDialog := nil;
907 CreateBrowsers(BROWSER_COUNT);
909 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
912 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
913 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
915 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
916 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
918 EnabledCloseButton := True;
920 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
921 ListView.ViewStyle := GikoSys.Setting.ListStyle;
923 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
925 AnimePanel.Left := 0;
927 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
929 //
\83L
\83\83\83r
\83l
\83b
\83g
930 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
932 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
933 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
934 GikoDM.MsgBarVisibleActionExecute(nil);
935 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
937 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
938 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
939 GikoDM.StatusBarVisibleActionExecute(nil);
941 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
942 TreeView.Items.BeginUpdate;
943 FavoriteTreeView.Items.BeginUpdate;
944 ListView.Items.BeginUpdate;
946 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
947 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
948 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
949 TreeView.Color := GikoSys.Setting.CabinetBackColor;
950 FavoriteTreeView.Font.Assign(TreeView.Font);
951 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
953 ListView.Font.Name := GikoSys.Setting.ListFontName;
954 ListView.Font.Size := GikoSys.Setting.ListFontSize;
955 ListView.Font.Color := GikoSys.Setting.ListFontColor;
956 ListView.Font.Style := [];
957 if GikoSys.Setting.ListFontBold then
958 ListView.Font.Style := [fsbold];
959 if GikoSys.Setting.ListFontItalic then
960 ListView.Font.Style := ListView.Font.Style + [fsitalic];
962 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
963 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
964 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
965 FOddColor := GikoSys.Setting.OddColor;
968 TreeView.Items.EndUpdate;
969 FavoriteTreeView.Items.EndUpdate;
970 ListView.Items.EndUpdate;
972 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
973 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
975 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
976 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
978 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
979 FResRangeMenuSelect := GikoSys.ResRange;
980 case GikoSys.ResRange of
983 GikoDM.AllResAction.Execute;
987 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
988 GikoDM.SelectResAction.Checked := True;
991 case FResRangeMenuSelect of
992 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
993 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
994 100: GikoDM.OnlyAHundredResAction.Checked := True;
998 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
999 case GikoSys.Setting.ThreadRange of
1002 GikoDM.AllItemAction.Checked := True;
1007 GikoDM.LogItemAction.Checked := True;
1012 GikoDM.NewItemAction.Checked := True;
1017 GikoDM.LiveItemAction.Checked := True;
1018 ViewType := gvtLive;
1022 GikoDM.ArchiveItemAction.Checked := True;
1023 ViewType := gvtArch;
1028 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1029 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1030 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1031 BrowserTab.Font.Style := [];
1032 if GikoSys.Setting.BrowserTabFontBold then
1033 BrowserTab.Font.Style := [fsBold];
1034 if GikoSys.Setting.BrowserTabFontItalic then
1035 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1036 BrowserTab.DoubleBuffered := True;
1037 FDragWFirst := false;
1038 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1040 //
\83u
\83\89\83E
\83U
\83^
\83u
1041 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1043 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1044 GikoDM.BrowserTabTopAction.Checked := True;
1046 GikoDM.BrowserTabBottomAction.Checked := True;
1049 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1050 GikoDM.BrowserTabTabStyleAction.Checked := True;
1051 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1052 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1054 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1057 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1058 ProgressBar.Parent := StatusBar;
1059 ProgressBar.Top := 2;
1060 ProgressBar.Left := 0;
1061 ProgressBar.Width := StatusBar.Panels[0].Width;
1062 ProgressBar.Height := StatusBar.Height - 2;
1063 ProgressBar.Position := 0;
1065 //
\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Æ)
1066 InitializeBoardPlugIns;
1068 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1069 GikoSys.ListBoardFile;
1070 //
\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É
1072 //
\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è
1073 if (SplashWindow <> nil) then begin
1074 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1078 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1079 for i := Length(BBSs) - 1 downto 0 do begin
1080 if not BBSs[i].IsBoardFileRead then
1081 GikoSys.ReadBoardFile(BBSs[i]);
1083 if SplashWindow <> nil then begin
1084 SplashWindow.ProgressBar.StepBy(20);
1085 SplashWindow.Update;
1089 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1090 RoundList := TRoundList.Create;
1091 RoundList.LoadRoundBoardFile;
1092 RoundList.LoadRoundThreadFile;
1094 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1095 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1096 Style := Style or TVS_NOTOOLTIPS;
1097 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1099 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1100 TreeView.Align := alClient;
1101 FavoriteTreeView.Align := alClient;
1102 FavoriteTreeView.Visible := False;
1104 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1107 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1108 wp.length := sizeof(wp);
1109 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1110 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1111 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1112 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1113 wp.showCmd := SW_HIDE;
1114 SetWindowPlacement(Handle, @wp);
1117 if GikoSys.Setting.WindowMax then
1118 WindowState := wsMaximized;
1120 //
\83M
\83R
\83A
\83j
\83\81
1122 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1123 if FileExists(FileName) then
1124 Animate.FileName := FileName;
1132 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1133 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1134 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1137 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1138 FHistoryList := TList.Create;
1140 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1143 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1144 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1145 FavoriteDM.ReadFavorite;
1147 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1148 GikoDM.ArrangeAction.Execute;
1150 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1151 case GikoSys.Setting.ListWidthState of
1153 ViewPanel.Width := 1;
1154 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1155 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1158 ViewPanel.Width := GikoSys.Setting.ListWidth;
1159 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1160 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1163 ViewPanel.Width := GikoSys.Setting.ListWidth;
1164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1169 case GikoSys.Setting.ListHeightState of
1171 ViewPanel.Height := 1;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1176 ViewPanel.Height := GikoSys.Setting.ListHeight;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1181 ViewPanel.Height := GikoSys.Setting.ListHeight;
1182 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1183 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1188 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1189 CreateControlThread();
1191 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1192 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1194 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1197 BrowserBoardNameLabel.Caption := '';
1198 BrowserNameLabel.Caption := '';
1201 FTabHintIndex := -1;
1203 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1204 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1205 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1207 MakeDefaultINIFile();
1208 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1209 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1210 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1211 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1214 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1215 SetSelectComboBox();
1217 //
\83A
\83h
\83\8c\83X
\83o
\81[
1218 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1220 //
\83\8a\83\93\83N
\83o
\81[
1222 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1224 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1225 if not FileExists(GikoSys.GetBoardFileName) then begin
1226 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
1227 + '
\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
1228 + '
\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';
1229 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1230 GikoDM.NewBoardAction.Execute;
1233 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1234 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1236 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1237 // FLastRoundTime := 0;
1240 FHint := TResPopup.Create(Self);
1242 ListView.OnData := TListViewUtils.ListViewData;
1244 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1245 CabinetVisible( False );
1246 if GikoSys.Setting.CabinetVisible then begin
1247 i := CabinetSelectPopupMenu.Items.Count - 1;
1248 if GikoSys.Setting.CabinetIndex = i - 1 then
1249 GikoDM.CabinetHistoryAction.Execute
1250 else if GikoSys.Setting.CabinetIndex = i then
1251 GikoDM.CabinetFavoriteAction.Execute
1253 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1254 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1255 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1256 FIsIgnoreResize := rtResizing;
1257 GikoDM.CabinetBBSAction.Execute;
1260 ShowBBSTreeOld( BBSs[ 0 ] );
1261 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1264 //
\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
1265 for i := 1 to ParamCount do begin
1266 MoveToURL(ParamStr(i));
1269 GikoDM.RepaintStatusBar;
1270 StatusBarResize(Sender);
1272 dummy1.Caption := ItemReservPMenu.Caption;
1273 dummy1.Hint := ItemReservPMenu.Hint;
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1280 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1291 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1292 GikoSys.SetGikoMessage;
1294 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1300 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1301 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1302 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1304 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1308 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1309 procedure TGikoForm.SaveCoolBarSettings;
1312 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1314 SaveMainCoolBarSettings;
1315 SaveBoardCoolBarSettings;
1316 SaveBrowserCoolBarSettings;
1319 procedure TGikoForm.SaveMainCoolBarSettings;
1324 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1325 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1326 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1327 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1328 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1329 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1332 procedure TGikoForm.SaveBoardCoolBarSettings;
1337 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1338 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1339 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1340 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1341 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1342 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1345 procedure TGikoForm.SaveBrowserCoolBarSettings;
1350 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1351 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1352 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1353 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1354 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1355 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1358 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1359 procedure TGikoForm.LoadCoolBarSettings;
1365 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1366 MainCoolBar.Bands.BeginUpdate;
1368 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1369 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1370 CoolSet := GikoSys.Setting.MainCoolSet[i];
1371 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1372 FIsIgnoreResize := rtNone;
1373 SaveCoolBarSettings;
1376 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1377 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1378 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1381 MainCoolBar.Bands.EndUpdate;
1384 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1385 ListCoolBar.Bands.BeginUpdate;
1387 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1388 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1389 CoolSet := GikoSys.Setting.ListCoolSet[i];
1390 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1391 FIsIgnoreResize := rtNone;
1392 SaveCoolBarSettings;
1395 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1396 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1397 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1400 ListCoolBar.Bands.EndUpdate;
1403 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1404 BrowserCoolBar.Bands.BeginUpdate;
1406 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1407 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1408 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1409 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1410 FIsIgnoreResize := rtNone;
1411 SaveCoolBarSettings;
1414 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1415 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1416 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1419 BrowserCoolBar.Bands.EndUpdate;
1424 procedure TGikoForm.FormShow(Sender: TObject);
1426 if FStartUp then begin
1427 ShowWindow(Application.Handle, SW_HIDE);
1429 //FormCreate
\82Å
\82â
\82é
\82Æ
\89Â
\8e\8b\90Ý
\92è
\82ª
\94½
\89f
\82³
\82ê
\82È
\82¢
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82ÅFormShow
\82Å
\82â
\82é
\82±
\82Æ
\82É
\82µ
\82½
1430 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1431 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1432 GikoDM.StdToolBarVisibleActionExecute( nil );
1433 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1434 GikoDM.AddressBarVisibleActionExecute( nil );
1435 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1436 GikoDM.LinkBarVisibleActionExecute( nil );
1437 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1438 GikoDM.ListToolBarVisibleActionExecute( nil );
1439 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1440 GikoDM.ListNameBarVisibleActionExecute( nil );
1441 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1442 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1443 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1444 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1446 // CoolBar
\95\9c\8c³
1447 LoadCoolBarSettings;
1449 //
\8fd
\97v
\81@
\82±
\82ê
\82ª
\82È
\82¢
\82Æ
\83c
\81[
\83\8b\83{
\83^
\83\93\82Ì
\8dX
\90V
\82ª
\82¨
\82©
\82µ
\82
\82È
\82é
1450 // ResetBandInfo( ListCoolBar, ListToolBar );
1451 FIsIgnoreResize := rtNone;
1453 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1454 if GikoSys.Setting.TabAutoLoadSave then begin
1455 GikoDM.TabAutoLoadAction.Execute;
1458 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1459 SetGroupIndex(GikoDM.GikoFormActionList);
1465 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1467 // if GikoForm.WindowState <> wsMinimized then
1468 // SaveCoolBarSettings;
1470 if ( GikoSys.Setting.ShowDialogForEnd ) and
1471 (MessageDlg('
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1476 if GikoSys.Setting.TabAutoLoadSave then begin
1477 GikoDM.TabAutoSaveAction.Execute;
1480 if (SearchDialog <> nil) then begin
1481 if (SearchDialog.Visible) then begin
1484 SearchDialog.Release;
1487 SearchDialog := nil;
1490 { //2ch
\8c¾
\8cȩ̂²ÙFree
1491 if GikoSys.Setting.Gengo <> nil then begin
1492 GikoSys.Setting.Gengo.Free;
1495 Application.UnhookMainWindow(Hook);
1496 Application.Terminate;
1499 procedure TGikoForm.FormDestroy(Sender: TObject);
1502 // CoolSet: TCoolSet;
1503 wp : TWindowPlacement;
1506 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1508 MouseGesture.UnHook;
1512 ActiveListColumnSave;
1516 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1517 wp.length := sizeof(wp);
1518 GetWindowPlacement(Handle, @wp);
1519 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1520 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1521 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1522 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1523 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1525 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1526 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1527 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1528 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1529 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1530 if GikoDM.ArrangeAction.Checked then
1531 GikoSys.Setting.ListOrientation := gloVertical
1533 GikoSys.Setting.ListOrientation := gloHorizontal;
1534 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1539 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1540 if not GikoSys.Setting.ResRangeHold then
1541 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1544 if WindowState <> wsNormal then
1545 WindowState := wsNormal;
1546 SaveCoolBarSettings;
1548 GikoSys.Setting.WriteWindowSettingFile;
1549 GikoSys.Setting.WriteNameMailSettingFile;
1552 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
1553 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1555 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
1557 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1559 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1560 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1562 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1564 //FavoriteDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
1565 FavoriteDM.WriteFavorite;
1569 LockWindowUpdate(Self.Handle);
1571 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1572 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1573 GikoSys.Setting.ShowDialogForAllTabClose := false;
1574 GikoDM.AllTabCloseAction.Execute;
1575 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1579 for i := FBrowsers.Count - 1 downto 0 do begin
1580 TWebBrowser(FBrowsers[i]).Free;
1583 FBrowsers.Capacity := 0;
1588 if BrowserNullTab <> nil then begin
1589 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1590 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1592 BrowserNullTab.Free;
1598 TreeView.Items.BeginUpdate;
1599 TreeView.Items.GetFirstNode.Free;
1600 TreeView.Items.Clear;
1601 TreeView.Items.EndUpdate;
1605 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1607 //AddressHistoryDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
\81B
1608 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1612 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1626 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1628 RoundList.SaveRoundFile;
1642 FControlThread.Terminate;
1643 FControlThread.WaitFor;
1647 FControlThread.Free;
1650 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1651 // TBoard, TThreadItem
\82Ì
\83f
\83X
\83g
\83\89\83N
\83^
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94j
\8aü
\82ð
\93`
\82¦
\82é
\82Ì
\82Å
1652 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1653 for i := Length(BoardGroups) - 1 downto 0 do begin
1654 //BoardGroups[i].Clear;
1655 BoardGroups[i].Free;
1659 for i := Length( BBSs ) - 1 downto 0 do begin
1660 if BBSs[ i ] <> nil then
1668 if FEvent <> nil then
1672 if FHint <> nil then begin
1673 FHint.ReleaseHandle;
1678 if TPreviewBrowser <> nil then begin
1679 FPreviewBrowser.Free;
1680 FPreviewBrowser := nil;
1684 LockWindowUpdate(0);
1687 //
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
1688 procedure TGikoForm.SetBBSMenu;
1691 item : TBBSMenuItem;
1694 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1695 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1697 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1698 CabinetSelectPopupMenu.Items[ i ].Free;
1699 CabinetMenu.Items[ i ].Free;
1700 BBSSelectPopupMenu.Items[ i ].Free;
1706 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1707 for i := Length( BBSs ) - 1 downto 0 do begin
1709 item := TBBSMenuItem.Create( PopupMenu );
1710 item.Caption := BBSs[ i ].Title;
1711 item.Data := BBSs[ i ];
1712 item.OnClick := BBSMenuItemOnClick;
1713 CabinetSelectPopupMenu.Items.Insert( 0, item );
1714 item := TBBSMenuItem.Create( PopupMenu );
1715 item.Caption := BBSs[ i ].Title;
1716 item.Data := BBSs[ i ];
1717 item.OnClick := BBSMenuItemOnClick;
1718 CabinetMenu.Insert( 0, item );
1719 item := TBBSMenuItem.Create( PopupMenu );
1720 item.Caption := BBSs[ i ].Title;
1721 item.Data := BBSs[ i ];
1722 item.OnClick := BBSMenuItemOnClick;
1723 BBSSelectPopupMenu.Items.Insert( 0, Item );
1730 procedure TGikoForm.ReloadBBS;
1735 LockWindowUpdate(Self.Handle);
1737 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1738 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1739 GikoSys.Setting.ShowDialogForAllTabClose := false;
1740 GikoDM.AllTabCloseAction.Execute;
1741 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1742 SetContent(BrowserNullTab);
1743 //TreeView
\83N
\83\8a\83A
\81iBBS2ch.Free
\82Ì
\8cã
\82É
\83N
\83\8a\83A
\82·
\82é
\82ÆXP
\83X
\83^
\83C
\83\8b\8e\9e\82É
\83G
\83\89\81[
\8fo
\82é
\81j
1744 TreeView.Items.Clear;
1746 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1748 RoundList.SaveRoundFile;
1751 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1757 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1764 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1766 FavoriteDM.WriteFavorite;
1771 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1772 for i := Length(BoardGroups) - 1 downto 0 do begin
1774 BoardGroups[i].Free;
1780 for i := Length( BBSs ) - 1 downto 0 do begin
1781 if BBSs[ i ] <> nil then
1790 FTreeType := gttNone;
1792 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1794 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1795 InitializeBoardPlugIns;
1797 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1799 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1800 for i := Length(BBSs) - 1 downto 0 do begin
1801 if not BBSs[i].IsBoardFileRead then
1802 GikoSys.ReadBoardFile(BBSs[i]);
1805 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1808 ShowBBSTree( BBSs[ 0 ] );
1810 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1813 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1814 FavoriteDM.ReadFavorite;
1818 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1819 RoundList.LoadRoundBoardFile;
1820 RoundList.LoadRoundThreadFile;
1822 LockWindowUpdate(0);
1824 GikoDM.TabsOpenAction.Execute;
1828 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1829 (IE 7
\82ª about:..
\82ð
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©
\81A
\83M
\83R
\83i
\83r
\82ª
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©)
1830 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1832 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1840 threadItem : TThreadItem;
1842 Protocol, Host, Path, Document, Port, Bookmark: string;
1847 ActiveFileName: string;
1853 //
\83M
\83R
\83i
\83r
\82Í
\83\8c\83X
\83A
\83\93\83J
\81[
\82ª about:blank..
\82Å
\8en
\82Ü
\82é
\82±
\82Æ
\82ð
\8aú
\91Ò
\82µ
\82Ä
\82¢
\82é
\82ª
1854 // IE 7
\82Å
\82Í about:blank..
\82Å
\82Í
\82È
\82 about:..
\82É
\82È
\82é
\82Ì
\82Å
\81A
\92u
\8a·
\82·
\82é(
\93\8a\82°
\82â
\82è)
1855 if Pos('about:..', Text) = 1 then
1856 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1859 if not( TObject(Sender) is TWebBrowser )then
1863 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1864 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1865 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1872 if PreviewTimer.Enabled then
1873 PreviewTimer.Enabled := False;
1874 Application.CancelHint;
1876 if GetActiveContent <> nil then
1877 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1879 ActiveFileName := '';
1881 FActiveContent := nil;
1885 StatusBar.Panels[1].Text := Text2;
1887 if FHint <> nil then begin
1888 FHint.ReleaseHandle;
1891 if FPreviewBrowser <> nil then
1892 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1894 if not GikoSys.Setting.UnActivePopup then
1895 if not GikoForm.Active then
1898 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1899 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1902 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1903 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1904 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1905 if FPreviewBrowser = nil then begin
1906 FPreviewBrowser := TPreviewBrowser.Create(Self);
1907 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1908 TOleControl(FPreviewBrowser).Parent := nil;
1910 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1911 FPreviewURL := Text2;
1912 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1913 PreviewTimer.Enabled := True;
1914 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1915 if Pos('mailto:', Text2) = 1 then begin
1916 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1917 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1919 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1920 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1921 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1922 if (Assigned(e)) then begin
1923 tmp2 := ZenToHan(e.Get_outerText);
1924 if (GikoSys.IsNumeric(tmp2)) then begin
1925 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1926 wkIntSt := StrToInt64(tmp2);
1927 wkIntTo := StrToInt64(tmp2);
1928 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1929 FHint.PopupType := gptThread;
1930 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1932 FHint.PopupType := gptRaw;
1937 threadItem := GetActiveContent;
1938 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1939 PathRec := Gikosys.Parse2chURL2(URL);
1940 if (PathRec.FNoParam) then begin
1944 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1946 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1948 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1950 URL := GikoSys.GetBrowsableThreadURL( URL );
1951 wkIntSt := PathRec.FSt;
1952 wkIntTo := PathRec.FTo;
1954 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1957 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1959 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1961 end else if wkIntSt > wkIntTo then begin
1966 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1971 threadItem := BBSsFindThreadFromURL( URL );
1973 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1974 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1975 if board <> nil then begin
1976 if not board.IsThreadDatRead then
1977 GikoSys.ReadSubjectFile( board );
1978 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1982 if threadItem <> nil then begin
1983 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1984 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1985 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1989 FHint.PopupType := gptThread;
1990 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1995 if FHint.PopupType = gptRaw then begin
1996 if FHint.Caption <> '' then
1999 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2005 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2009 FEnabledCloseButton := Enabled;
2010 SysMenu := GetSystemMenu(Handle, False);
2012 if Enabled then begin
2013 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2015 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2018 DrawMenuBar(Handle);
2021 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2022 var AllowChange: Boolean);
2024 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2025 // if FTreeType = gtt2ch then
2026 // FSortIndex := -1;
2029 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2030 Shift: TShiftState);
2034 if GetActiveList is TBoard then begin
2036 VK_BACK:; // UpFolderButtonClick(Sender);
2037 VK_SPACE: ListDoubleClick(Shift);
2038 VK_RETURN: ListClick;
2041 if ListView.Selected <> nil then begin
2042 pos.X := ListView.Column[ 0 ].Width;
2043 pos.Y := ListView.Selected.Top;
2045 pos.X := ListView.Left;
2046 pos.Y := ListView.Top;
2048 Windows.ClientToScreen( ListView.Handle, pos );
2049 ListPopupMenu.Popup( pos.X, pos.Y );
2052 end else begin // TBBS, TCategory
2054 VK_BACK:; // UpFolderButtonClick(Sender);
2055 VK_SPACE: ListClick;
2056 VK_RETURN: ListDoubleClick(Shift);
2059 if ListView.Selected <> nil then begin
2060 pos.X := ListView.Column[ 0 ].Width;
2061 pos.Y := ListView.Selected.Top;
2063 pos.X := ListView.Left;
2064 pos.Y := ListView.Top;
2066 Windows.ClientToScreen( ListView.Handle, pos );
2067 ListPopupMenu.Popup( pos.X, pos.Y );
2073 function TGikoForm.GetHttpState: Boolean;
2075 Result := FHttpState;
2078 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2079 Column: TListColumn);
2083 vSortIndex : Integer;
2084 vSortOrder : Boolean;
2086 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2087 if TObject( FActiveList ) is TBBS then begin
2088 orderList := GikoSys.Setting.BBSColumnOrder;
2089 vSortIndex := GikoSys.Setting.BBSSortIndex;
2090 vSortOrder := GikoSys.Setting.BBSSortOrder;
2091 end else if TObject( FActiveList ) is TCategory then begin
2092 orderList := GikoSys.Setting.CategoryColumnOrder;
2093 vSortIndex := GikoSys.Setting.CategorySortIndex;
2094 vSortOrder := GikoSys.Setting.CategorySortOrder;
2095 end else if TObject( FActiveList ) is TBoard then begin
2096 orderList := GikoSys.Setting.BoardColumnOrder;
2097 vSortIndex := GikoSys.Setting.BoardSortIndex;
2098 vSortOrder := GikoSys.Setting.BoardSortOrder;
2102 id := Integer( orderList[ idx ] );
2105 if vSortIndex = id then
2106 vSortOrder := not vSortOrder
2108 vSortOrder := id = 0;
2111 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2114 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2115 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2119 DefaultDraw := True;
2121 DefaultDraw := False;
2122 if (cdsSelected in State) or (cdsHot in State) then begin
2123 Sender.Canvas.Brush.Color := clHighlight;
2124 Sender.Canvas.Font.Color := clHighlightText;
2126 Sender.Canvas.Brush.Color := clBtnFace;
2127 Sender.Canvas.Font.Color := clBtnText;
2129 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2130 Sender.Canvas.FillRect(ARect);
2131 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2134 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2139 Nodes := TreeView.Items;
2141 for i := 0 to Nodes.Count - 1 do begin
2142 if Nodes.Item[i].Data = Data then begin
2143 Result := Nodes.Item[i];
2150 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2151 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2152 Headers: OleVariant; var Cancel: WordBool);
2157 kMenuName: string = 'menu:';
2160 if Pos(kMenuName, URL) <> 0 then begin
2161 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2163 if not GikoSys.IsNumeric(sNo) then Exit;
2167 KokoPopupMenu.Tag := StrToInt(sNo);
2168 KokoPopupMenu.Popup(p.x, p.y);
2169 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2170 Cancel := not GikoSys.Setting.OpenMailer;
2175 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2176 const ARect: TRect; var DefaultDraw: Boolean);
2180 IsBoardNode: Boolean;
2186 Category: TCategory;
2190 DefaultDraw := True;
2192 if FTreeType = gttHistory then Exit;
2194 TreeView.Canvas.Font.Color := clBlue;
2195 IsBoardNode := False;
2196 for i := 0 to TreeView.Items.Count - 1 do begin
2198 if not TreeView.Items[i].IsVisible then
2201 if TObject(TreeView.Items[i].Data) is TCategory then begin
2202 if TreeView.Items[i].Expanded then
2205 IsBoardNode := False;
2206 Category := TCategory(TreeView.Items[i].Data);
2207 for j := 0 to Category.Count - 1 do begin
2208 Board := Category.Items[j];
2209 if Board <> nil then begin
2210 if Board.UnRead > 0 then begin
2218 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2219 IsBoardNode := True;
2220 Board := TBoard(TreeView.Items[i].Data);
2222 Cnt := Board.UnRead;
2228 Bitmap := TBitmap.Create;
2230 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2231 Bitmap.Canvas.Font.Style := [fsBold];
2232 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2237 NodeRect := TreeView.Items[i].DisplayRect(True);
2240 CntText := '(' + IntToStr(Cnt) + ')'
2241 else if Cnt = 1 then
2245 TextWidth := TreeView.Canvas.TextWidth(CntText);
2247 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2249 NodeRect.Left + NodeWidth + TextWidth + 8,
2251 DrawText(TreeView.Canvas.Handle,
2255 DT_SINGLELINE or DT_VCENTER);
2257 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2260 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2261 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2264 Category: TCategory;
2267 DefaultDraw := True;
2269 if FTreeType = gttHistory then Exit;
2271 TreeView.Canvas.Font.Style := [];
2272 if Node <> nil then begin
2273 if TObject(Node.Data) is TCategory then begin
2274 Category := TCategory(Node.Data);
2275 for i := 0 to Category.Count - 1 do begin
2276 Board := Category.Items[i];
2277 if Board <> nil then begin
2278 if Board.UnRead > 0 then begin
2279 TreeView.Canvas.Font.Style := [fsBold];
2284 end else if TObject(Node.Data) is TBoard then begin
2285 Board := TBoard(Node.Data);
2286 if Board.UnRead > 0 then
2287 TreeView.Canvas.Font.Style := [fsBold];
2292 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2294 TreeView.Invalidate;
2296 if TObject(Node.Data) is TBBS then begin
2297 TBBS(Node.Data).NodeExpand := True;
2298 end else if TObject(Node.Data) is TCategory then begin
2299 TCategory(Node.Data).NodeExpand := True;
2300 end else if TObject(Node.Data) is TBoard then begin
2301 TBoard(Node.Data).NodeExpand := True;
2305 procedure TGikoForm.ListViewAllSelect;
2310 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2312 AddMessageList(Msg, nil, Icon);
2314 // *************************************************************************
2315 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82½
\82Æ
\82«
\82É
\94
\90¶
\82·
\82é
\83C
\83x
\83\93\83g
2316 // *************************************************************************
2317 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2321 boardPlugIn : TBoardPlugIn;
2326 if Item.DownType = gdtBoard then
2327 ATitle := Item.Board.Title
2329 ATitle := Item.ThreadItem.Title;
2331 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2333 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2335 if Item.DownType = gdtBoard then begin
2338 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2339 if GetActiveList = Item.Board then begin
2341 //
\8e©
\93®
\83\
\81[
\83g
\82Ì
\8fê
\8d\87\94Â
\88ê
\97\97\82Ì
\83\
\81[
\83g
\8f\87\82ð
\83N
\83\8a\83A
\82·
\82é
2342 if (GikoSys.Setting.AutoSortThreadList) then begin
2343 GikoSys.Setting.BoardSortIndex := 0;
2344 GikoSys.Setting.BoardSortOrder := True;
2346 Sort.SetSortDate(Now());
2347 SetActiveList(Item.Board);
2349 Item.Board.Modified := True;
2350 Item.Board.IsThreadDatRead := True;
2353 end else if Item.DownType = gdtThread then begin
2356 Item.ThreadItem.NewArrival := True;
2357 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2358 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2359 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2360 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2361 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2362 Item.ThreadItem.Title := Res.FTitle;
2363 ATitle := Item.ThreadItem.Title;
2364 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2365 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2366 ATitle := Res.FTitle;
2368 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2369 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2370 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2374 if GikoSys.Setting.BrowserTabVisible then begin
2375 if GetActiveContent = Item.ThreadItem then
2376 InsertBrowserTab(Item.ThreadItem)
2377 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2378 InsertBrowserTab(Item.ThreadItem, True)
2380 InsertBrowserTab(Item.ThreadItem, False);
2383 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2384 InsertBrowserTab(Item.ThreadItem);
2387 Application.ProcessMessages;
2389 if Item.State = gdsComplete then begin
2391 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2395 PlaySound('NewDiff');
2396 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2401 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2402 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2403 Item.ThreadItem.Round := False;
2404 //Item.ThreadItem.RoundName := '';
2405 AddMessageList('
\81\9a1000
\94
\8c¾
\82ð
\92´
\82¦
\82½
\82Ì
\82Å
\8f\84\89ñ
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82µ
\82½ - [' + Item.ThreadItem.Title + ']', nil, gmiOK);
2408 //ListView
\82Å
\82±
\82Ì
\83X
\83\8c\82ª
\8aÜ
\82Ü
\82ê
\82é
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\8dX
\90V
\8f\88\97\9d
2409 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2410 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2411 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2412 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2413 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2414 case GikoForm.ViewType of
2415 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2416 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2417 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2418 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2419 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2420 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2423 RefreshListView(Item.ThreadItem);
2426 end else if Item.State = gdsNotModify then begin
2428 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2429 //SetContent(Item.ThreadItem);
2430 InsertBrowserTab(Item.ThreadItem);
2432 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2433 PlaySound('NoChange');
2434 Screen.Cursor := crDefault;
2435 end else if Item.State = gdsAbort then begin
2437 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2438 end else if Item.State = gdsError then begin
2443 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2444 // if Item.ResponseCode = 302 then
2445 // AddMessageList('
\94Â
\82ª
\88Ú
\93]
\82µ
\82½
\82©
\82à
\82µ
\82ê
\82È
\82¢
\82Ì
\82Å
\94Â
\8dX
\90V
\82ð
\8ds
\82Á
\82Ä
\82
\82¾
\82³
\82¢
\81B', nil, gmiNG);
2451 if FWorkCount < 0 then FWorkCount := 0;
2452 if FWorkCount = 0 then begin
2454 Animate.Active := False;
2456 Screen.Cursor := crDefault;
2463 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2465 // SetProgressValue(Number, 0, AWorkCountMax);
2466 // ProgressBar.Visible := True;
2467 ProgressBar.Position := 0;
2468 ProgressBar.Max := AWorkCountMax;
2469 FDownloadTitle := AWorkTitle;
2470 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2471 FDownloadMax := AWorkCountMax;
2474 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2476 ProgressBar.Position := 0;
2477 if FDownloadMax <> 0 then
2478 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2481 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2483 ProgressBar.Position := AWorkCount;
2484 // SetProgressValue(Number, AWorkCount);
2485 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2488 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2490 ListItem: TListItem;
2492 MessageListView.Items.BeginUpdate;
2494 ListItem := MessageListView.Items.Add;
2495 ListItem.Caption := ACaption;
2496 ListItem.Data := AObject;
2497 ListItem.MakeVisible(False);
2499 gmiOK: ListItem.ImageIndex := 0;
2500 gmiSAD: ListItem.ImageIndex := 1;
2501 gmiNG: ListItem.ImageIndex := 2;
2502 gmiWhat: ListItem.ImageIndex := 3;
2505 MessageListView.Items.EndUpdate;
2510 function TGikoForm.InsertBrowserTab(
2511 ThreadItem : TThreadItem;
2512 ActiveTab : Boolean = True
2515 i, j, idx : Integer;
2516 favItem : TFavoriteThreadItem;
2517 newBrowser : TBrowserRecord;
2521 if Threaditem = nil then Exit;
2523 if ThreadItem.IsLogFile then begin
2524 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\91S
\82Ä
\8aJ
\82
\82Æ
\82©
\82â
\82é
\82Æ
\81A
\8d¡
\8aJ
\82¢
\82Ä
\82é
\83X
\83\8c\82Ìbrowser
\82ð
\95t
\82¯
\91Ö
\82¦
\82é
\8b°
\82ê
\82ª
\82 \82é
2525 //
\8fí
\82É
\82S
\94Ô
\96Ú
\82ÉActive
\82Ì
\83u
\83\89\83E
\83U
\82ª
\97\88\82È
\82¢
\82æ
\82¤
\82É
\88Ú
\93®
\82³
\82¹
\82é
2526 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2527 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2528 j := FBrowsers.IndexOf(FActiveContent.Browser);
2529 if j = BROWSER_COUNT - 1 then
2530 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2532 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2533 if not AddHistory( favItem ) then
2536 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2537 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2538 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2539 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2540 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2541 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2542 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2543 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2547 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2548 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2549 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2551 if ActiveTab then begin
2552 BrowserTab.TabIndex := i;
2553 BrowserTab.OnChange(nil);
2560 idx := BrowserTab.TabIndex;
2561 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2562 newBrowser := TBrowserRecord.Create;
2563 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2564 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2565 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2569 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2570 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2571 //newBrowser.Browser.Navigate(BLANK_HTML);
2572 newBrowser.thread := ThreadItem;
2573 newBrowser.Repaint := true;
2574 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2576 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2577 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2578 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2582 if ActiveTab then begin
2583 BrowserTab.TabIndex := 0;
2587 newBrowser := TBrowserRecord.Create;
2588 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2589 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2590 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2594 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2595 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2596 //newBrowser.Browser.Navigate(BLANK_HTML);
2597 newBrowser.thread := ThreadItem;
2598 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2599 newBrowser.Repaint := true;
2601 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2602 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2603 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2607 if ActiveTab then begin
2608 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2609 BrowserTab.TabIndex := 0
2611 BrowserTab.TabIndex := i;
2614 Result := newBrowser;
2615 if(ActiveTab) or (idx = -1) then begin
2616 BrowserTab.OnChange(nil);
2619 if BrowserNullTab = nil then begin
2620 BrowserNullTab := TBrowserRecord.Create;
2621 BrowserNullTab.Browser := Browser;
2623 // if BrowserNullTab.thread <> ThreadItem then begin
2624 // BrowserNullTab.Movement := '';
2626 BrowserNullTab.thread := ThreadItem;
2627 Result := BrowserNullTab;
2628 BrowserTab.TabIndex := -1;
2629 SetContent(BrowserNullTab);
2632 if GikoSys.Setting.URLDisplay then
2633 AddressComboBox.Text := ThreadItem.URL;
2637 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2646 ThreadItem: TThreadItem;
2647 Thread: TBrowserRecord;
2648 ThreadTitle, ThreadPTitle: string;
2649 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2652 idx := BrowserTab.TabIndex;
2653 if (FActiveContent <> nil) and
2654 (FActiveContent.Thread <> Thread.Thread) and
2655 (FActiveContent.Browser <> nil) and
2656 (Assigned(FActiveContent.Browser.Document)) then begin
2659 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2662 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2667 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2668 Thread.Browser.Navigate(BLANK_HTML);
2669 BrowserBoardNameLabel.Caption := '';
2670 ItemBoardImage.Picture := nil;
2671 BrowserNameLabel.Caption := '';
2672 ItemImage.Picture := nil;
2673 BrowserNullTab.Thread := nil;
2674 //TOleControl(BrowserNullTab.Browser).Visible := true;
2675 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2676 FActiveContent := nil;
2678 end else if Thread.Browser = nil then begin
2679 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2680 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2681 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2682 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2683 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2687 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2688 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2691 ThreadTitle := Thread.Thread.Title;
2692 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2693 //ThreadScrollTop := Thread.Thread.ScrollTop;
2694 ThreadIsLog := Thread.Thread.IsLogFile;
2695 ThreadItem := Thread.Thread;
2696 ThreadNewArraical := Thread.Thread.NewArrival;
2697 //ThreadUnRead := Thread.Thread.UnRead;
2698 BBSID := ThreadItem.ParentBoard.BBSID;
2699 FileName := ThreadItem.FileName;
2701 if GetCapture = ListView.Handle then
2704 Screen.Cursor := crHourGlass;
2708 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2709 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2710 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2712 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2713 if (not Assigned(Thread.Browser.Document)) then begin
2714 Thread.Browser.Navigate('about:blank');
2716 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2717 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2718 Application.ProcessMessages;
2719 if idx <> BrowserTab.TabIndex then begin
2724 if (Thread <> nil) and (ThreadItem <>nil) then begin
2725 BrowserBoardNameLabel.Caption := ThreadPTitle;
2726 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2727 BrowserNameLabel.Caption := ThreadTitle;
2728 ItemImage.Picture := nil;
2730 if ThreadNewArraical then
2731 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2733 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2735 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2737 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2738 BrowserNameLabel.Left := ItemImage.Left + 20;
2741 //ActiveContent
\81@
\82Ì
\8dX
\90V
2742 FActiveContent := Thread;
2744 if not ThreadIsLog then begin
2745 Self.Caption := GikoDataModule.CAPTION_NAME ;
2746 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2747 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2749 Thread.Browser.BringToFront;
2750 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2751 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2753 doc.charset := 'Shift_JIS';
2760 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2761 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2762 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2763 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2764 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2765 //Thread.Repaint
\82Í
\81A
\83X
\83L
\83\93\93\99\82Ì
\90Ý
\92è
\82ð
\95Ï
\8dX
\82µ
\82½
\82Æ
\82«
\81AThread
\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82½
\82Æ
\82«
2766 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2767 if Thread.Repaint then begin
2768 Thread.Repaint := false;
2770 Thread.Browser.OnStatusTextChange := nil;
2771 LockWindowUpdate(Thread.Browser.ParentWindow);
2772 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2773 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2774 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2778 RefreshListView(ThreadItem);
2780 Screen.Cursor := crDefault;
2784 function TGikoForm.GetActiveContent: TThreadItem;
2787 if FActiveContent <> nil then
2788 Result := FActiveContent.Thread
2797 procedure TGikoForm.SetActiveList(Obj: TObject);
2801 // if FActiveList <> Obj then begin
2804 if ListView.Selected <> nil then
2805 idx := ListView.Selected.Index
2811 ListView.Items.Count := 0;
2812 ListView.Items.Clear;
2813 ListView.Selected := nil;
2814 // ListView.Columns.Clear;
2815 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2816 and (FActiveContent.Thread.IsLogFile) then begin
2818 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2820 on E: Exception do begin
2821 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2822 //
\8dí
\8f\9c\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82Å
\82±
\82±
\82Ä
\8f\88\97\9d\82·
\82é
2823 ReleaseBrowser(FActiveContent);
2824 FActiveContent.Thread := nil;
2825 Self.Caption := GikoDataModule.CAPTION_NAME;
2829 Self.Caption := GikoDataModule.CAPTION_NAME;
2830 //Application.Title := CAPTION_NAME;
2832 // ActiveListColumnSave;
2834 Screen.Cursor := crHourGlass;
2836 if Obj is TBBS then begin
2837 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2838 end else if Obj is TCategory then begin
2839 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2840 end else if Obj is TBoard then begin
2841 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2844 Screen.Cursor := crDefault;
2847 if idx >= 0 then begin
2848 if idx >= ListView.Items.Count then
2849 idx := ListView.Items.Count - 1;
2850 ListView.ItemIndex := idx;
2851 ListView.ItemFocused := ListView.Items.Item[ idx ];
2857 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2858 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2859 function TGikoForm.GetActiveList: TObject;
2861 Result := FActiveList;
2864 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2866 SetListViewType(AViewType, '', False);
2869 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2874 for i := Length( BBSs ) - 1 downto 0 do begin
2875 BBSs[i].SelectText := SelectText;
2876 BBSs[i].KubetsuChk := KubetsuChk;
2878 ViewType := AViewType;
2879 if ActiveList is TBoard then begin
2880 Board := TBoard(ActiveList);
2882 //gvtAll: ListView.Items.Count := Board.Count;
2883 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2884 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2885 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2886 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2887 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2891 SetActiveList(Board);
2895 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2896 const ARect: TRect; var DefaultDraw: Boolean);
2902 if ListView.Items.Count = 0 then begin
2903 DefaultDraw := true;
2904 ListView.Canvas.Brush.Color := ListView.Color;
2905 ListView.Canvas.FillRect(ARect);
2909 ListView.Canvas.Font.Color := clWindowText;
2910 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2913 ListView.Canvas.Font.Color := clBlue;
2914 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83\8d\83O
\97L
\82è
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2917 ListView.Canvas.Font.Color := clGreen;
2918 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2921 ListView.Canvas.Font.Color := clFuchsia;
2922 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82ÍDAT
\97\8e\82¿
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2925 ListView.Canvas.Font.Color := clMaroon;
2926 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2929 ListView.Canvas.Font.Color := clNavy;
2930 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83^
\83C
\83g
\83\8b\82ª
\81u%s
\81v
\82ð
\8aÜ
\82Þ
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2931 if GetActiveList is TBoard then
2932 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2940 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2941 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2942 ListView.Canvas.TextOut(p.X, p.Y, s);
2944 DefaultDraw := True;
2948 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2950 Item: TDownloadItem;
2952 if not Board.IsThreadDatRead then
2953 GikoSys.ReadSubjectFile(Board);
2954 Item := TDownloadItem.Create;
2956 Item.Board := Board;
2957 Item.DownType := gdtBoard;
2958 Item.ForceDownload := ForceDownload;
2959 FControlThread.AddItem(Item);
2960 if FWorkCount = 0 then begin
2962 Animate.Active := True;
2965 Screen.Cursor := crAppStart;
2973 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2975 Item: TDownloadItem;
2977 Item := TDownloadItem.Create;
2979 Item.ThreadItem := ThreadItem;
2980 Item.DownType := gdtThread;
2981 Item.ForceDownload := ForceDownload;
2982 FControlThread.AddItem(Item);
2983 if FWorkCount = 0 then begin
2985 Animate.Active := True;
2988 Screen.Cursor := crAppStart;
2996 procedure TGikoForm.PlaySound(SoundEventName: string);
3000 if not GikoSys.Setting.Mute then begin
3001 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3002 if FileExists(FileName) then begin
3003 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3004 sndPlaySound(nil, SND_SYNC);
3005 Application.ProcessMessages;
3007 sndPlaySound(PChar(FileName), SND_ASYNC);
3013 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3016 Item: TFavoriteThreadItem;
3020 // if (GetActiveContent = ThreadItem) and
3021 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3023 // if GetActiveContent = ThreadItem then
3027 if FTreeType = gttHistory then
3028 TreeView.Selected := nil;
3030 for i := 0 to FHistoryList.Count - 1 do begin
3031 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3032 Item := TFavoriteThreadItem(FHistoryList[i]);
3033 if Item.URL = favItem.URL then begin
3034 // SetContent(ThreadItem);
3035 FHistoryList.Move(i, 0);
3036 if FTreeType = gttHistory then
3037 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3038 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3045 if FHistoryList.Count > 0 then
3046 FHistoryList.Insert( 0, favItem )
3048 FHistoryList.Add( favItem );
3049 // SetContent(ThreadItem);
3050 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3051 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3052 i := FHistoryList.Count - 1;
3053 TObject( FHistoryList.Items[ i ] ).Free;
3054 FHistoryList.Delete( i );
3057 if FTreeType = gttHistory then begin
3058 Node := TreeView.Items.Add( nil, favItem.Title );
3059 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3061 if favItem.NewArrival then begin
3062 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3063 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3065 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3066 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3069 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3070 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3071 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3072 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3073 Node.Data := favItem;
3074 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3075 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3076 i := TreeView.Items.Count - 1;
3077 TreeView.Items.Item[ i ].Delete;
3082 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3087 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
3088 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
3089 if (FTreeType = gttHistory) then begin
3090 node := TreeView.Items.GetFirstNode;
3091 while (node <> nil) do begin
3092 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3093 TreeView.Items.Delete(node);
3097 node := node.GetNext;
3101 for i := 0 to FHistoryList.Count - 1 do begin
3102 if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3103 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3104 FHistoryList.Delete(i);
3105 FHistoryList.Capacity := FHistoryList.Count;
3111 procedure TGikoForm.ClearHistory;
3115 //FHistoryList.Clear;
3118 for i := FHistoryList.Count - 1 downto 0 do begin
3119 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3120 TFavoriteThreadItem(FHistoryList[ i ]).Free
3121 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3122 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3124 //FHistoryList.Delete(i);
3130 FHistoryList.Capacity := FHistoryList.Count;
3134 procedure TGikoForm.SaveHistory;
3137 saveList : TstringList;
3140 saveList := TStringList.Create;
3143 FHistoryList.Capacity := FHistoryList.Count;
3144 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3145 saveList.Add('<address>');
3146 bound := FHistoryList.Count - 1;
3147 for i := bound downto 0 do begin
3148 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3150 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3151 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3153 saveList.Add('</address>');
3154 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3161 procedure TGikoForm.LoadHistory;
3165 XMLDoc : IXMLDocument;
3167 HistoryNode : IXMLNode;
3169 favItem : TFavoriteThreadItem;
3178 fileName := GikoSys.GetConfigDir + 'History.xml';
3180 if FileExists( fileName ) then begin
3182 XMLDoc := IXMLDocument.Create;
3183 //XMLDoc := LoadXMLDocument(FileName);
3184 LoadXMLDocument(FileName, XMLDoc);
3186 XMLNode := XMLDoc.DocumentElement;
3188 if XMLNode.NodeName = 'address' then begin
3189 bound := XMLNode.ChildNodes.Count - 1;
3190 for i := 0 to bound do begin
3191 HistoryNode := XMLNode.ChildNodes[i];
3192 if HistoryNode.NodeName = 'history' then begin
3193 //if FReadCount >= sl.Count then begin
3194 s := Trim(HistoryNode.Attributes['url']);
3195 if s <> '' then begin
3196 favItem := TFavoriteThreadItem.Create(
3197 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3198 if not AddHistory( favItem ) then
3212 rt := GetTickCount - st;
3213 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3218 procedure TGikoForm.ShowBBSTreeOld(
3226 FavoriteTreeView.Visible := False;
3227 FavoriteToolBar.Hide;
3228 TreeView.Visible := True;
3230 b := CabinetSelectPopupMenu.Items.Count - 1;
3231 for i := 0 to b do begin
3232 item := CabinetSelectPopupMenu.Items[ i ];
3233 if item is TBBSMenuItem then begin
3234 if TBBSMenuItem( item ).Data = inBBS then begin
3235 item.Checked := True;
3236 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3237 CabinetMenu.Items[ i ].Checked := True;
3238 GikoSys.Setting.CabinetIndex := i;
3242 item.Checked := False;
3243 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3244 CabinetMenu.Items[ i ].Checked := False;
3246 CabinetSelectToolButton.Caption := inBBS.Title;
3248 GikoDM.CabinetHistoryAction.Checked := False;
3249 GikoDM.CabinetFavoriteAction.Checked := False;
3251 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3252 FTreeType := gtt2ch;
3253 HistoryToolBar.Hide;
3254 FActiveBBS := inBBS;
3255 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3256 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3257 //?c???[??g?b?v?????I????
3258 if GetActiveList = nil then
3259 TreeView.Selected := TreeView.Items[0]
3261 for i := 0 to TreeView.Items.Count - 1 do begin
3262 if TreeView.Items[i].Data = GetActiveList then begin
3263 TreeView.Selected := TreeView.Items[i];
3267 TreeView.Selected := TreeView.Items[0]
3275 procedure TGikoForm.ShowBBSTree(
3284 FavoriteTreeView.Visible := False;
3285 FavoriteToolBar.Hide;
3286 TreeView.Visible := True;
3288 b := CabinetSelectPopupMenu.Items.Count - 1;
3289 for i := 0 to b do begin
3290 item := CabinetSelectPopupMenu.Items[ i ];
3291 if item is TBBSMenuItem then begin
3292 if TBBSMenuItem( item ).Data = inBBS then begin
3293 item.Checked := True;
3294 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3295 CabinetMenu.Items[ i ].Checked := True;
3296 GikoSys.Setting.CabinetIndex := i;
3300 item.Checked := False;
3301 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3302 CabinetMenu.Items[ i ].Checked := False;
3304 CabinetSelectToolButton.Caption := inBBS.Title;
3306 GikoDM.CabinetHistoryAction.Checked := False;
3307 GikoDM.CabinetFavoriteAction.Checked := False;
3309 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3310 or (not (CabinetPanel.Visible)) then begin
3311 FTreeType := gtt2ch;
3312 HistoryToolBar.Hide;
3313 FActiveBBS := inBBS;
3314 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3315 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3316 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3317 if GetActiveList = nil then begin
3319 TreeClick( TreeView.Items[0] );
3323 for i := 0 to TreeView.Items.Count - 1 do begin
3324 if TreeView.Items[i].Data = GetActiveList then begin
3325 TreeClick( TreeView.Items[i] );
3329 TreeClick( TreeView.Items[0] );
3337 procedure TGikoForm.ShowHistoryTree;
3342 if CabinetPanel.Visible then begin
3343 if FTreeType = gttHistory then begin
3344 CabinetVisible( False );
3345 GikoDM.CabinetHistoryAction.Checked := False;
3347 GikoDM.CabinetHistoryAction.Checked := True;
3350 CabinetVisible( True );
3351 GikoDM.CabinetHistoryAction.Checked := True;
3354 // BBS...BBS, History, Favorite
3355 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3357 FavoriteTreeView.Visible := False;
3358 TreeView.Visible := True;
3360 GikoDM.CabinetBBSAction.Checked := False;
3361 GikoDM.CabinetFavoriteAction.Checked := False;
3363 if FTreeType <> gttHistory then begin
3364 b := CabinetSelectPopupMenu.Items.Count - 1;
3365 for i := 0 to b do begin
3366 item := CabinetSelectPopupMenu.Items[ i ];
3367 if item is TBBSMenuItem then begin
3368 item.Checked := False;
3369 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3370 CabinetMenu.Items[ i ].Checked := False;
3374 FTreeType := gttHistory;
3375 HistoryToolBar.Show;
3376 FavoriteToolBar.Hide;
3378 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3382 procedure TGikoForm.SetHistoryTreeNode;
3386 Item: TFavoriteThreadItem;
3388 TreeView.Items.BeginUpdate;
3390 TreeView.Items.Clear;
3391 for i := 0 to FHistoryList.Count - 1 do begin
3392 Item := TFavoriteThreadItem(FHistoryList[i]);
3393 Node := TreeView.Items.Add(nil, Item.Title);
3395 if Item.Item.NewArrival then begin
3396 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3397 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3399 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3400 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3403 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3404 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3405 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3406 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3410 TreeView.Items.EndUpdate;
3414 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3416 ChangeEvent: TTVChangedEvent;
3417 ChangingEvent: TTVChangingEvent;
3421 if Item is TCategory then
3422 bbs := TCategory( Item ).ParenTBBS
3423 else if Item is TBoard then
3424 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3428 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3429 if Item <> FActiveList then begin
3431 ChangingEvent := nil;
3433 if not CallEvent then begin
3434 ChangeEvent := TreeView.OnChange;
3435 ChangingEvent := TreeView.OnChanging;
3438 if not CallEvent then begin
3439 TreeView.OnChange := nil;
3440 TreeView.OnChanging := nil;
3442 //Application.ProcessMessages;
3443 for i := 0 to TreeView.Items.Count - 1 do begin
3444 if TreeView.Items[i].Data = Item then begin
3445 TreeView.Items[i].Selected := True;
3447 TreeClick(TreeView.Items[i]);
3451 //Application.ProcessMessages;
3453 if not CallEvent then begin
3454 TreeView.OnChange := ChangeEvent;
3455 TreeView.OnChanging := ChangingEvent;
3460 if Item <> FActiveList then begin
3461 ActiveListColumnSave;
3462 if (Item is TBBS) or (Item is TCategory) then begin
3463 ListView.Columns.Clear;
3464 SetActiveList( Item );
3465 end else if Item is TBoard then begin
3466 if not TBoard( Item ).IsThreadDatRead then begin
3467 Screen.Cursor := crHourGlass;
3469 if not TBoard( Item ).IsThreadDatRead then
3470 GikoSys.ReadSubjectFile(TBoard( Item ));
3472 Screen.Cursor := crDefault;
3475 Sort.SetSortDate(Now());
3476 SetActiveList( Item );
3481 if Item is TBoard then begin // not TCategory
3482 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3483 if GikoSys.Setting.ListWidthState = glsMax then begin
3484 GikoDM.BrowserMinAction.Execute;
3485 if GikoForm.Visible then
3489 if GikoSys.Setting.ListHeightState = glsMax then begin
3490 GikoDM.BrowserMinAction.Execute;
3491 if GikoForm.Visible then
3498 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3499 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3501 listItem : TListItem;
3502 threadItem : TThreadItem;
3509 if not (GetActiveList is TBoard) then Exit;
3510 listItem := ListView.GetItemAt( X, Y );
3511 if listItem = nil then Exit;
3512 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3514 threadItem := TThreadItem(ListItem.Data);
3515 InsertBrowserTab(threadItem, False);
3516 if threadItem.IsLogFile then
3517 ListView.UpdateItems(listItem.Index, listItem.Index);
3521 //
\82±
\82±
\82ÅDblClick
\8fE
\82í
\82È
\82¢
\82Æ
\81AClick
\83C
\83x
\83\93\83g
\82ª
\97D
\90æ
\82µ
\82Ä
\8bN
\82«
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
3522 if (ssDouble in Shift) then
3523 ListDoubleClick(Shift)
3531 Windows.ClientToScreen( ListView.Handle, pos );
3532 ListPopupMenu.Popup( pos.X, pos.Y );
3538 procedure TGikoForm.ListClick;
3540 ListItem: TListItem;
3541 ThreadItem: TThreadItem;
3543 if ListView.SelCount <> 1 then Exit;
3544 ListItem := ListView.Selected;
3545 if ListItem = nil then Exit;
3546 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3548 ThreadItem := TThreadItem(ListItem.Data);
3549 if ThreadItem.IsLogFile then begin
3550 InsertBrowserTab(ThreadItem);
3551 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3553 InsertBrowserTab(ThreadItem);
3556 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3557 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3558 if GikoSys.Setting.ListWidthState = glsMin then begin
3559 GikoDM.BrowserMaxAndFocusAction.Execute;
3562 if GikoSys.Setting.ListHeightState = glsMin then begin
3563 GikoDM.BrowserMaxAndFocusAction.Execute;
3569 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3571 ThreadItem: TThreadItem;
3574 shiftDown := (ssShift in Shift);
3576 if ListView.Selected = nil then Exit;
3578 if TObject(ListView.Selected.Data) is TCategory then begin
3579 SelectTreeNode(ListView.Selected.Data, True);
3580 end else if TObject(ListView.Selected.Data) is TBoard then begin
3581 SelectTreeNode(ListView.Selected.Data, True)
3582 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3583 Application.ProcessMessages;
3584 ThreadItem := TThreadItem(ListView.Selected.Data);
3585 DownloadContent(ThreadItem, shiftDown);
3587 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3588 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3589 if GikoSys.Setting.ListWidthState = glsMin then begin
3590 GikoDM.BrowserMaxAction.Execute;
3591 GikoDM.SetFocusForBrowserAction.Execute;
3594 if GikoSys.Setting.ListHeightState = glsMin then begin
3595 GikoDM.BrowserMaxAction.Execute;
3596 GikoDM.SetFocusForBrowserAction.Execute;
3603 procedure TGikoForm.BrowserMovement(const AName: string);
3605 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3606 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3607 and (FActiveContent <> nil) then begin
3608 FActiveContent.Move(AName);
3612 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3614 if TObject(Node.Data) is TBBS then begin
3615 TBBS(Node.Data).NodeExpand := False;
3616 end else if TObject(Node.Data) is TCategory then begin
3617 TCategory(Node.Data).NodeExpand := False;
3618 end else if TObject(Node.Data) is TBoard then begin
3619 TBoard(Node.Data).NodeExpand := False;
3621 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3622 TreeClick(TreeView.Selected);
3626 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3628 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3630 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3632 TreeSplitter.Visible := isVisible;
3633 CabinetPanel.Visible := isVisible;
3634 GikoDM.CabinetVisibleAction.Checked := isVisible;
3637 procedure TGikoForm.SelectListItem(List: TList);
3639 TmpListItem: TListItem;
3643 TmpListItem := ListView.Selected;
3644 while TmpListItem <> nil do begin
3645 List.Add(TmpListItem.Data);
3646 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3651 procedure TGikoForm.FormResize(Sender: TObject);
3654 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3655 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3657 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3658 if GikoSys.Setting.ListWidthState = glsMin then begin
3659 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3660 ViewPanel.Width := ThreadMainPanel.Width - 80;
3663 if GikoSys.Setting.ListHeightState = glsMin then begin
3664 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3665 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3669 FIsIgnoreResize := rtResizing;
3670 PostMessage( Handle, USER_RESIZED, 0, 0 );
3675 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3679 FTabHintIndex := -1;
3680 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3681 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3682 DeleteTab(i, BrowserTab.TabIndex);
3687 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3691 FTabHintIndex := -1;
3692 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3693 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3694 DeleteTab(i, BrowserTab.TabIndex);
3699 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3705 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3706 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3707 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3710 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3712 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3713 FActiveContent := nil;
3714 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3715 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3717 FBrowsers.Move(j, BROWSER_COUNT - 1);
3719 BrowserTab.Tabs.BeginUpdate;
3721 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3722 if ( BrowserTab.Tabs.Count - 1 = index ) and
3723 ( BrowserTab.TabRect(index).Left
3724 <= BrowserTab.DisplayRect.Left ) then begin
3725 BrowserTab.ScrollTabs(-1);
3727 BrowserTab.Tabs.Delete(index);
3728 if selectIndex > index then begin
3729 BrowserTab.TabIndex := selectIndex - 1;
3731 if BrowserTab.Tabs.Count -1 >= selectIndex then
3732 BrowserTab.TabIndex := selectIndex
3734 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3737 BrowserTab.Tabs.EndUpdate;
3739 if BrowserTab.Tabs.Count = 0 then begin
3740 BrowserNullTab.Thread := nil;
3742 if(BrowserTab.TabIndex <> -1) and
3743 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3744 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3745 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3746 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3748 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3752 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3753 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3754 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3755 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3758 if( FActiveContent = nil) then
3759 BrowserTab.OnChange(nil);
3761 function TGikoForm.Hook(var Message: TMessage): Boolean;
3763 //
\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Ì
3764 //
\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ð
3768 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3770 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3774 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3776 bBoard, bCategory : Boolean;
3778 bBoard := (GetActiveList is TBoard);
3779 bCategory := (GetActiveList is TCategory);
3780 ItemRoundPMenu.Visible := bBoard;
3781 ItemReservPMenu.Visible := bBoard;
3782 LPMSep01.Visible := bBoard;
3783 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3784 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3785 LPMSep02.Visible := bCategory or bBoard;
3786 KidokuPMenu.Visible := bBoard;
3787 MidokuPMenu.Visible := bBoard;
3788 UrlCopyPMenu.Visible := bCategory or bBoard;
3789 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3790 AllSelectPMenu.Visible := bCategory or bBoard;
3791 LPMSep05.Visible := bCategory or bBoard;
3792 DeletePMenu.Visible := bBoard;
3793 LPMSep06.Visible := bCategory or bBoard;
3794 BoardFavoriteAddMenu.Visible := bCategory;
3795 ThreadFavoriteAddMenu.Visible := bBoard;
3797 AddRoundNameMenu(ItemReservPMenu);
3798 AddRoundNameMenu(ListReservPMenu);
3801 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3803 FClickNode := TreeView.Selected;
3804 if FClickNode = nil then begin
3805 TreeSelectThreadPupupMenu.Visible := False;
3806 TreeSelectBoardPupupMenu.Visible := False;
3807 TPMSep01.Visible := False;
3808 TreeSelectURLPupupMenu.Visible := False;
3809 TreeSelectNamePupupMenu.Visible := False;
3810 TreeSelectNameURLPupupMenu.Visible := False;
3811 TreeSelectFavoriteAddPupupMenu.Visible := False;
3812 TreeSelectLogDeleteSeparator.Visible := False;
3813 TreeSelectLogDeletePopupMenu.Visible := False;
3814 end else if TObject(FClickNode.Data) is TBoard then begin
3815 TreeSelectThreadPupupMenu.Visible := False;
3816 TreeSelectBoardPupupMenu.Visible := True;
3817 TPMSep01.Visible := True;
3818 TreeSelectURLPupupMenu.Visible := True;
3819 TreeSelectNamePupupMenu.Visible := True;
3820 TreeSelectNameURLPupupMenu.Visible := True;
3821 TreeSelectFavoriteAddPupupMenu.Visible := True;
3822 TreeSelectLogDeleteSeparator.Visible := False;
3823 TreeSelectLogDeletePopupMenu.Visible := False;
3824 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3825 TreeSelectThreadPupupMenu.Visible := False;
3826 TreeSelectBoardPupupMenu.Visible := True;
3827 TPMSep01.Visible := True;
3828 TreeSelectURLPupupMenu.Visible := True;
3829 TreeSelectNamePupupMenu.Visible := True;
3830 TreeSelectNameURLPupupMenu.Visible := True;
3831 TreeSelectFavoriteAddPupupMenu.Visible := True;
3832 TreeSelectLogDeleteSeparator.Visible := False;
3833 TreeSelectLogDeletePopupMenu.Visible := False;
3834 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3835 TreeSelectThreadPupupMenu.Visible := True;
3836 TreeSelectBoardPupupMenu.Visible := False;
3837 TPMSep01.Visible := True;
3838 TreeSelectURLPupupMenu.Visible := True;
3839 TreeSelectNamePupupMenu.Visible := True;
3840 TreeSelectNameURLPupupMenu.Visible := True;
3841 TreeSelectFavoriteAddPupupMenu.Visible := True;
3842 TreeSelectLogDeleteSeparator.Visible := True;
3843 TreeSelectLogDeletePopupMenu.Visible := True;
3844 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3845 TreeSelectThreadPupupMenu.Visible := True;
3846 TreeSelectBoardPupupMenu.Visible := False;
3847 TPMSep01.Visible := True;
3848 TreeSelectURLPupupMenu.Visible := True;
3849 TreeSelectNamePupupMenu.Visible := True;
3850 TreeSelectNameURLPupupMenu.Visible := True;
3851 TreeSelectFavoriteAddPupupMenu.Visible := True;
3852 TreeSelectLogDeleteSeparator.Visible := True;
3853 TreeSelectLogDeletePopupMenu.Visible := True;
3854 end else if (TObject(FClickNode.Data) is TCategory) then begin
3855 TreeSelectThreadPupupMenu.Visible := False;
3856 TreeSelectBoardPupupMenu.Visible := False;
3857 TPMSep01.Visible := False;
3858 TreeSelectURLPupupMenu.Visible := False;
3859 TreeSelectNamePupupMenu.Visible := True;
3860 TreeSelectNameURLPupupMenu.Visible := False;
3861 TreeSelectFavoriteAddPupupMenu.Visible := False;
3862 TreeSelectLogDeleteSeparator.Visible := False;
3863 TreeSelectLogDeletePopupMenu.Visible := False;
3864 end else if FClickNode.IsFirstNode then begin
3865 TreeSelectThreadPupupMenu.Visible := False;
3866 TreeSelectBoardPupupMenu.Visible := False;
3867 TPMSep01.Visible := False;
3868 TreeSelectURLPupupMenu.Visible := False;
3869 TreeSelectNamePupupMenu.Visible := True;
3870 TreeSelectNameURLPupupMenu.Visible := False;
3871 TreeSelectFavoriteAddPupupMenu.Visible := False;
3872 TreeSelectLogDeleteSeparator.Visible := False;
3873 TreeSelectLogDeletePopupMenu.Visible := False;
3875 TreeSelectThreadPupupMenu.Visible := False;
3876 TreeSelectBoardPupupMenu.Visible := False;
3877 TPMSep01.Visible := False;
3878 TreeSelectURLPupupMenu.Visible := False;
3879 TreeSelectNamePupupMenu.Visible := False;
3880 TreeSelectNameURLPupupMenu.Visible := False;
3881 TreeSelectFavoriteAddPupupMenu.Visible := False;
3882 TreeSelectLogDeleteSeparator.Visible := False;
3883 TreeSelectLogDeletePopupMenu.Visible := False;
3887 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3888 var ppDisp: IDispatch; var Cancel: WordBool);
3897 threadItem: TThreadItem;
3901 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3902 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3903 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3904 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3905 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3906 if GikoSys.Setting.ResAnchorJamp then begin
3907 Text := ZenToHan(Trim(Text));
3909 if(AnsiPos('>>', Text) = 1) then begin
3910 //Text := Copy(Text, 3, Length(Text) - 2);
3913 //Text := Copy(Text, 2, Length(Text) - 1);
3917 if AnsiPos('-', Text) <> 0 then begin
3918 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3919 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3920 wkIntTo := StrToIntDef(Text, 0);
3921 if wkIntTo < wkIntSt then
3924 wkIntSt := StrToIntDef(Text, 0);
3927 if wkIntSt <> 0 then begin
3928 FActiveContent.IDAnchorPopup('');
3929 BrowserMovement(IntToStr(wkIntSt));
3935 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3937 URL := GikoSys.GetHRefText(Html);
3938 URL := GikoSys.HTMLDecode(URL);
3939 if AnsiPos('BE:', URL) = 1 then begin
3940 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3941 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3942 threadItem := FActiveContent.Thread;
3943 if threadItem = nil then Exit;
3944 URL := BE_PHP_URL + BNum + '&u=d'
3945 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3948 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3949 ( AnsiPos('ftp://', URL) = 1) then begin
3950 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3951 if GikoSys.Setting.LinkAddAddressBar then begin
3952 idx := AddressComboBox.Items.IndexOf(URL);
3953 if idx = -1 then begin
3954 AddressComboBox.Items.Insert(0, URL);
3955 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3956 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3958 AddressComboBox.Items.Delete(idx);
3959 AddressComboBox.Items.Insert(0, URL);
3969 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3971 if Mouse.Capture <> 0 then
3973 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3974 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3975 FBrowserSizeWidth := ViewPanel.Width;
3977 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3978 FBrowserSizeHeight := ViewPanel.Height;
3980 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3981 if ViewPanel.Width < 2 then begin
3982 ViewPanel.Width := 1;
3983 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3984 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3985 GikoSys.Setting.ListWidthState := glsMax;
3986 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3987 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3988 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3989 GikoSys.Setting.ListWidthState := glsMin;
3991 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3992 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3993 GikoSys.Setting.ListWidthState := glsNormal;
3996 if ViewPanel.Height < 2 then begin
3997 ViewPanel.Height := 1;
3998 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3999 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4000 GikoSys.Setting.ListHeightState := glsMax;
4001 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4002 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4003 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4004 GikoSys.Setting.ListHeightState := glsMin;
4006 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4007 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4008 GikoSys.Setting.ListHeightState := glsNormal;
4011 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4012 FBrowserSizeHeight := ViewPanel.Height
4013 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4014 FBrowserSizeWidth := ViewPanel.Width;}
4017 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4022 BrowserTab.Tabs.BeginUpdate;
4024 if not BrowserTab.Dragging then begin
4025 FTabHintIndex := -1;
4026 BrowserTab.Hint := '';
4027 idx := BrowserTab.TabIndex;
4028 if idx = -1 then begin
4029 SetContent(BrowserNullTab);
4031 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4032 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4033 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4035 FBrowsers.Move(j ,0);
4037 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4038 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4039 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4040 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4042 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4043 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4044 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4048 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4049 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4050 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4052 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4053 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4054 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4056 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4057 AddressComboBox.Text := GetActiveContent.URL;
4059 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4060 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4063 GikoDM.SetFocusForBrowserAction.Execute;
4067 BrowserTab.Tabs.EndUpdate;
4072 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4073 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4079 if Button = mbMiddle then begin
4080 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4083 p := BrowserTab.ScreenToClient(p);
4084 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4086 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4087 end else if Button = mbLeft then begin
4088 FDragWFirst := true;
4089 FMouseDownPos.X := X;
4090 FMouseDownPos.Y := Y;
4095 procedure TGikoForm.SetBrowserTabState;
4097 CoolBand: TCoolBand;
4099 BrowserBottomPanel.AutoSize := False;
4100 if GikoSys.Setting.BrowserTabVisible then begin
4102 BrowserTab.Tabs.BeginUpdate;
4104 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4105 BrowserTab.Style := tsTabs;
4106 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4107 BrowserTab.TabPosition := tpTop
4109 BrowserTab.TabPosition := tpBottom;
4110 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4111 BrowserTab.TabPosition := tpTop;
4112 BrowserTab.Style := tsButtons;
4114 BrowserTab.TabPosition := tpTop;
4115 BrowserTab.Style := tsFlatButtons
4118 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4119 BrowserTab.Parent := BrowserTabToolBar;
4120 BrowserBottomPanel.Hide;
4121 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4122 if CoolBand <> nil then
4123 CoolBand.Visible := True;
4125 BrowserTab.Parent := BrowserBottomPanel;
4126 BrowserTab.Top := 0;
4127 BrowserTab.Left := 0;
4128 BrowserBottomPanel.Show;
4129 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4130 if CoolBand <> nil then
4131 CoolBand.Visible := False;
4134 BrowserTab.Tabs.EndUpdate;
4138 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4139 if CoolBand <> nil then
4140 CoolBand.Visible := False;
4141 BrowserBottomPanel.Visible := False;
4142 GikoDM.AllTabCloseAction.Execute;
4146 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4147 Y: Integer; State: TDragState; var Accept: Boolean);
4151 idx := BrowserTab.IndexOfTabAt(X, Y);
4152 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4155 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4160 idx := BrowserTab.IndexOfTabAt(X, Y);
4162 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4165 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4166 Shift: TShiftState; X, Y: Integer);
4169 ThreadItem: TThreadItem;
4172 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4174 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4175 if FDragWFirst = false then begin
4176 FDragWFirst := true;
4178 BrowserTab.EndDrag(false);
4179 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4180 FDragWFirst := false;
4183 BrowserTab.EndDrag(false);
4184 FDragWFirst := false;
4187 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4188 Application.CancelHint;
4189 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4190 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4191 BrowserTab.Hint := ThreadItem.Title;
4192 Application.ShowHint := True;
4194 BrowserTab.Hint := '';
4195 Application.ShowHint := True;
4197 FTabHintIndex := TabIdx;
4202 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4203 const pDisp: IDispatch; var URL: OleVariant);
4205 FDispHtmlDocument: DispHTMLDocument;
4206 BrowserRecord :TBrowserRecord;
4209 threadItem : TThreadItem;
4211 if TObject(Sender) is TWebBrowser then begin
4212 BrowserRecord := nil;
4213 if TWebBrowser(Sender) <> Browser then begin
4214 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4215 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4216 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4220 if BrowserRecord <> nil then begin
4221 if BrowserRecord.Event <> nil then
4222 BrowserRecord.Event.Free;
4223 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4224 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4225 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4226 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4229 if GetActiveContent <> nil then begin
4230 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4231 if FEvent <> nil then
4233 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4234 FEvent.OnContextMenu := OnDocumentContextMenu;
4235 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4237 if FEvent <> nil then begin
4245 if (BrowserRecord <> nil) and
4246 Assigned( BrowserRecord.Thread ) then begin
4247 threadItem := BrowserRecord.Thread;
4249 if (threadItem.JumpAddress > 0) then begin
4250 if threadItem.UnRead then begin
4251 threadItem.UnRead := False;
4253 RefreshListView(threadItem);
4255 //
\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®
4256 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4257 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4258 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4259 threadItem.JumpAddress := 0;
4261 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4264 end else if threadItem.UnRead then begin
4265 threadItem.UnRead := False;
4267 BrowserRecord.Move('new');
4268 RefreshListView(threadItem);
4269 end else if threadItem.ScrollTop <> 0 then begin
4271 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4272 doc.Body.ScrollTop := threadItem.ScrollTop;
4275 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4280 LockWindowUpdate(0);
4283 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4285 AddRoundNameMenu(RoundNamePopupMenu.Items);
4288 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4294 Item := TMenuItem.Create(Self);
4295 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4296 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4298 Item := TMenuItem.Create(Self);
4299 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4300 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4302 Item := TMenuItem.Create(Self);
4303 Item.Caption := '-';
4305 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4306 Item := TMenuItem.Create(Self);
4307 Item.Caption := RoundList.RoundNameList[i];
4308 Item.OnClick := SetSelectRoundName;
4313 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4315 threadItem : TThreadItem;
4317 if ParentName <> 'dummy1' then begin
4318 SetSelectItemRound(RoundFlag, RoundName);
4320 threadItem := GetActiveContent;
4321 if threadItem <> nil then begin
4322 threadItem.RoundName := RoundName;
4324 RoundList.RoundNameList.Add(RoundName);
4325 threadItem.Round := RoundFlag;
4330 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4335 List := TList.Create;
4337 SelectListItem(List);
4338 for i := 0 to List.Count - 1 do begin
4339 if TObject(List[i]) is TBoard then begin
4340 TBoard(List[i]).RoundName := RoundName;
4342 RoundList.RoundNameList.Add(RoundName);
4343 TBoard(List[i]).Round := RoundFlag;
4344 end else if TObject(List[i]) is TThreadItem then begin
4345 if TThreadItem(List[i]).IsLogFile then begin
4346 TThreadItem(List[i]).RoundName := RoundName;
4348 RoundList.RoundNameList.Add(RoundName);
4349 TThreadItem(List[i]).Round := RoundFlag;
4358 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4360 MenuItem: TMenuItem;
4362 if Sender is TMenuItem then begin
4363 MenuItem := TMenuItem(Sender);
4364 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4369 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4374 if CoolBar = nil then
4376 for i := 0 to CoolBar.Bands.Count - 1 do begin
4377 if CoolBar.Bands[i].Control = Control then begin
4378 Result := CoolBar.Bands[i];
4384 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4386 if BrowserTab.Parent = BrowserTabToolBar then
4387 BrowserTab.Width := BrowserTabToolBar.Width;
4390 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4395 procedure TGikoForm.SetMenuFont;
4397 // GikoSys.MenuFont(MenuToolBar.Font);
4398 // MenuToolBar.Buttons[0].AutoSize := False;
4399 // MenuToolBar.Buttons[0].AutoSize := True;
4400 // MenuToolBar.Font.Color := clMenuText;
4401 GikoSys.MenuFont(MainCoolBar.Font);
4402 MenuToolBar.Buttons[0].AutoSize := False;
4403 MenuToolBar.Buttons[0].AutoSize := True;
4404 MainCoolBar.AutoSize := False;
4405 MainCoolBar.AutoSize := True;
4407 GikoSys.MenuFont(ListCoolBar.Font);
4408 GikoSys.MenuFont(BrowserCoolBar.Font);
4409 // MenuToolBar.Font.Color := clMenuText;
4412 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4416 if FavoriteDM.Modified then begin
4419 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4420 NewMenu := TMenuItem.Create(MainMenu);
4421 NewMenu.Action := GikoDM.FavoriteAddAction;
4422 FavoriteMenu.Add(NewMenu);
4423 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4424 NewMenu := TMenuItem.Create(FavoriteMenu);
4425 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4426 FavoriteMenu.Add(NewMenu);
4427 //
\83Z
\83p
\83\8c\81[
\83^
4428 FavoriteMenu.InsertNewLineAfter(NewMenu);
4429 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4430 FavoriteDM.Modified := false;
4434 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4437 NewMenu: array of TMenuItem;
4439 SetLength(NewMenu, Node.Count);
4440 Node := Node.getFirstChild;
4442 while ( Node <> nil ) do begin
4443 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4444 NewMenu[i].AutoHotkeys := maAutomatic;
4445 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4446 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4448 if TObject(Node.Data) is TFavoriteFolder then begin
4449 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4450 CreateFavMenu(Node, NewMenu[i]);
4451 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4452 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4453 NewMenu[i].OnClick := FavoriteClick;
4454 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4455 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4456 NewMenu[i].OnClick := FavoriteClick;
4459 Node := Node.getNextSibling;
4461 MenuItem.Add(NewMenu);
4464 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4466 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';
4467 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4469 Dlg : TFavoriteAddDialog;
4475 if Item is TFavoriteBoardItem then
4476 Item := TFavoriteBoardItem( Item ).Item
4477 else if Item is TFavoriteThreadItem then
4478 Item := TFavoriteThreadItem( Item ).Item;
4480 Node := FavoriteTreeView.Items.GetFirstNode;
4481 if Item is TBoard then begin
4482 ItemURL := TBoard( Item ).URL;
4483 while Node <> nil do begin
4485 if TObject( Data ) is TFavoriteBoardItem then begin
4486 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4487 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4492 Node := Node.GetNext;
4494 Dlg := TFavoriteAddDialog.Create(Self);
4496 Dlg.SetBoard( TBoard( Item ) );
4501 end else if Item is TThreadItem then begin
4502 ItemURL := TThreadItem( Item ).URL;
4503 while Node <> nil do begin
4505 if TObject( Data ) is TFavoriteThreadItem then begin
4506 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4507 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4512 Node := Node.GetNext;
4514 Dlg := TFavoriteAddDialog.Create(Self);
4516 Dlg.SetThreadItem( TThreadItem( Item ) );
4526 procedure TGikoForm.FavoriteClick(Sender: TObject);
4528 FavoriteClick( Sender, True );
4531 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4534 ThreadItem: TThreadItem;
4535 FavBoard: TFavoriteBoardItem;
4536 FavThread: TFavoriteThreadItem;
4540 if Sender is TFavoriteMenuItem then
4541 Item := TFavoriteMenuItem(Sender).Data
4542 else if Sender is TLinkToolButton then
4543 Item := TLinkToolButton(Sender).Data
4544 else if Sender is TTreeNode then
4545 Item := TTreeNode( Sender ).Data
4549 if TObject(Item) is TFavoriteBoardItem then begin
4550 FavBoard := TFavoriteBoardItem(Item);
4551 Board := FavBoard.Item;
4552 if Board <> nil then begin
4553 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4554 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4555 SelectTreeNode(Board, True);
4557 end else if TObject(Item) is TFavoriteThreadItem then begin
4558 FavThread := TFavoriteThreadItem(Item);
4559 ThreadItem := FavThread.Item;
4560 if ThreadItem = nil then
4563 InsertBrowserTab(ThreadItem, ActiveTab);
4565 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4566 if GikoSys.Setting.ListWidthState = glsMin then begin
4567 GikoDM.BrowserMaxAndFocusAction.Execute;
4570 if GikoSys.Setting.ListHeightState = glsMin then begin
4571 GikoDM.BrowserMaxAndFocusAction.Execute;
4577 procedure TGikoForm.BBSMenuItemOnClick(
4582 if Sender is TBBSMenuItem then
4583 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4587 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4589 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4592 //!
\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é)
4593 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4595 stRes, edRes : Int64;
4596 browserRec : TBrowserRecord;
4597 threadNumber : String;
4602 Thread.JumpAddress := 0;
4603 //
\83^
\83u
\82ð
\90¶
\90¬
4604 browserRec := InsertBrowserTab(Thread);
4605 if (browserRec <> nil) then begin
4606 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4607 threadNumber := ChangeFileExt(Thread.FileName, '');
4608 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4609 //
\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
4610 if (StrToInt64(threadNumber) = stRes) then begin
4611 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4612 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4616 if ( stRes > 0 ) then begin
4617 Thread.JumpAddress := stRes;
4619 //
\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é
4620 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4621 DownloadContent(Thread);
4622 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4623 browserRec.Move(IntToStr(stRes));
4624 Thread.JumpAddress := 0;
4626 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4627 Thread.ScrollTop := doc.Body.ScrollTop;
4634 procedure TGikoForm.MoveToURL(const inURL: string);
4636 protocol, host, path, document, port, bookmark : string;
4637 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4639 BBSID, BBSKey: string;
4640 {tmpBoard,} Board: TBoard;
4641 ThreadItem: TThreadItem;
4644 tmpThread : TThreadItem;
4645 shiftDown : Boolean;
4649 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4650 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4653 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4654 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4655 if shiftDown then begin
4656 GikoSys.OpenBrowser(inURL, gbtUserApp);
4658 end else if ctrlDown then begin
4659 GikoSys.OpenBrowser(inURL, gbtIE);
4663 //=====
\83v
\83\89\83O
\83C
\83\93
4666 bi := Length(BoardGroups) - 1;
4667 for i := 1 to bi do begin
4668 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4669 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4672 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4673 Board := BBSsFindBoardFromURL( boardURL );
4676 if Board = nil then begin
4678 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4679 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4682 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4683 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4684 ShowBBSTree( BBSs[ 1 ] );
4687 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4688 if not Board.IsThreadDatRead then begin
4689 GikoSys.ReadSubjectFile( Board );
4693 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4694 if ThreadItem = nil then begin
4695 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4696 ThreadItem := tmpThread;
4697 Board.Insert( 0, ThreadItem );
4698 if ActiveList is TBoard then begin
4699 if TBoard(ActiveList) = Board then
4700 ListView.Items.Count := ListView.Items.Count + 1;
4705 OpenThreadItem(ThreadItem, inURL);
4712 Board := BBSsFindBoardFromURL(
4713 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4715 if Board <> nil then begin
4716 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4717 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4718 SelectTreeNode( Board, True );
4726 // 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¢
4730 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4731 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4732 Board := BBSsFindBoardFromURL( boardURL );
4733 if Board = nil then begin
4734 //
\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
4735 GikoSys.OpenBrowser(inURL, gbtUserApp);
4738 //
\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é
4740 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4741 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4742 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4743 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4744 GikoSys.OpenBrowser(inURL, gbtUserApp);
4749 if not Board.IsThreadDatRead then
4750 GikoSys.ReadSubjectFile(Board);
4751 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4752 ThreadItem := Board.FindThreadFromURL( URL );
4753 //
\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)
4754 if ThreadItem = nil then begin
4755 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4758 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4759 if ThreadItem = nil then begin
4760 ThreadItem := TThreadItem.Create( nil, Board, URL );
4761 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4762 Board.Insert(0, ThreadItem);
4763 if ActiveList is TBoard then begin
4764 if TBoard(ActiveList) = Board then
4765 ListView.Items.Count := ListView.Items.Count + 1;
4768 //
\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é
4769 if (not ThreadItem.IsLogFile) then begin
4770 if AnsiPos(Host, Board.URL) = 0 then
4771 ThreadItem.DownloadHost := Host
4773 ThreadItem.DownloadHost := '';
4775 OpenThreadItem(ThreadItem, inURL);
4779 Board := BBSsFindBoardFromURL( inURL );
4780 if Board = nil then begin
4781 GikoSys.OpenBrowser(inURL, gbtAuto);
4783 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4784 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4785 SelectTreeNode( Board, True );
4790 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4792 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4793 CoolBarResized( Sender, MainCoolBar );
4796 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4797 Shift: TShiftState);
4799 if Key = VK_RETURN then
4800 GikoDM.MoveToAction.Execute;
4803 procedure TGikoForm.BrowserEnter(Sender: TObject);
4805 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4808 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4810 CDS:PCopyDataStruct;
4814 CDS := Message.CopyDataStruct;
4815 GetMem(PC, CDS^.cbData);
4817 lstrcpy(PC,CDS^.lpData);
4818 SetString(sURL, PC,lstrlen(PC));
4823 Message.Result := 1;
4826 procedure TGikoForm.WndProc(var Message: TMessage);
4828 senderBrowser : TWebBrowser;
4834 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4837 if Message.WParam = SC_MINIMIZE then
4840 TreeClick( TreeView.Selected );
4847 USER_DOCUMENTCOMPLETE:
4848 if (Message.WParam <> 0) and
4849 (TObject(Message.WParam) is TWebBrowser) then begin
4850 senderBrowser := TWebBrowser( Message.WParam );
4851 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4860 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4865 //
\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Í
4866 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4867 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4868 if Msg.CharCode in [VK_BACK] then begin
4869 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4870 if Msg.KeyData > 0 then begin
4873 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4877 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4878 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4881 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4884 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4885 if Msg.CharCode in [VK_BACK] then begin
4886 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4887 if Msg.KeyData > 0 then begin
4890 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4893 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4896 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4900 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4904 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4910 HtmlFileName: string;
4914 TargetFrameName: OleVariant;
4915 PostData: OleVariant;
4916 Headers: OleVariant;
4917 WindowHeight: Integer;
4918 WindowWidth: Integer;
4922 Protocol, Host, Path, Document, Port, Bookmark: string;
4924 PreviewTimer.Enabled := False;
4928 case GikoSys.Setting.PreviewSize of
4935 WindowHeight := 192;
4939 WindowHeight := 384;
4943 WindowHeight := 480;
4945 else begin //gpsMedium
4947 WindowHeight := 288;
4951 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4953 case GikoSys.Setting.PopupPosition of
4954 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4955 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4956 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4957 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4958 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4959 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4960 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4961 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4962 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Ó
4965 html := '<html><head>'#13#10
4967 + 'function init() {'#13#10
4968 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4970 + ' var dh, ih;'#13#10
4971 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4972 + ' ih = Image1.width / Image1.height;'#13#10
4973 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4974 + ' if (ih > dh)'#13#10
4975 + ' Image1.width = document.body.clientWidth;'#13#10
4977 + ' Image1.height = document.body.clientHeight;'#13#10
4979 + ' if (ih < dh)'#13#10
4980 + ' Image1.height = document.body.clientHeight;'#13#10
4982 + ' Image1.width = document.body.clientWidth;'#13#10
4985 + ' Message.style.display = "none";'#13#10
4989 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
4990 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
4991 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
4993 sl := TStringList.Create;
4996 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
4997 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
4998 sl.SaveToFile(HtmlFileName);
5005 NavURL := HtmlFileName;
5007 TargetFrameName := '';
5010 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5011 Referer := Protocol + '://' + Host;
5013 Referer := Referer + ':' + Port;
5014 Referer := Referer + Path;
5015 Headers := 'Referer: ' + Referer;
5016 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5017 if ARect.Top + WindowHeight > Screen.DesktopHeight then
5018 ARect.Top := Screen.DesktopHeight - WindowHeight;
5019 if ARect.Left + WindowWidth > Screen.DesktopWidth then
5020 ARect.Left := Screen.DesktopWidth - WindowWidth;
5021 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5022 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5024 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
5025 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5026 FPreviewBrowserRect := ARect;
5027 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5028 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5032 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5037 if PreviewTimer.Enabled then
5038 PreviewTimer.Enabled := False;
5039 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
5040 FHint.ReleaseHandle;
5044 if (FPreviewBrowser <> nil)
5045 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5046 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5047 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5048 Pos := Mouse.CursorPos;
5049 Pos.X := Pos.X + Left;
5050 Pos.Y := Pos.Y + Top;
5051 if (FPreviewBrowserRect.Left > Pos.X) or
5052 (FPreviewBrowserRect.Right < Pos.X) or
5053 (FPreviewBrowserRect.Top > Pos.Y) or
5054 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5055 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5059 Message.Result := 1;
5062 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5064 GikoDM.MsgBarCloseAction.Execute;
5067 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5069 Doc: IHtmlDocument2;
5070 Range: IHTMLTxtRange;
5073 ThreadItem: TThreadItem;
5076 FactiveContent.IDAnchorPopup('');
5077 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5078 if Assigned(Doc) then begin
5079 Range := Doc.selection.createRange as IHTMLTxtRange;
5080 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5081 s := ZenToHan(Trim(s));
5082 if GikoSys.IsNumeric(s) then begin
5084 ThreadItem := GetActiveContent;
5085 if ThreadItem <> nil then begin
5086 Num := StrToInt64(s);
5087 FHint.PopupType := gptThread;
5088 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5089 if FHint.ResCount <> 0 then
5100 procedure TGikoForm.ShowTextPopup;
5105 // if Trim(s) = '' then
5108 FHint.Font.Name := GikoSys.Setting.HintFontName;
5109 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5110 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5111 FHint.Color := GikoSys.Setting.HintBackColor;
5112 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5114 if FHint.PopupType = gptRaw then
5115 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5117 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5118 case GikoSys.Setting.PopupPosition of
5119 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5120 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5121 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5122 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5123 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5124 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5125 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5126 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5127 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Ó
5129 //FHint.ActivateHint(ARect, s);
5130 if FHint.PopupType = gptRaw then
5131 FHint.ActivateHint(ARect, FHint.Caption)
5133 FHint.ActivateHint(ARect, '');
5135 FHint.ReleaseHandle;
5140 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5142 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5143 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5145 if FTreeType = gttHistory then begin
5146 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5147 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5151 TreeView.Items.Clear;
5155 procedure TGikoForm.SetLinkBar;
5159 ToolButton: TLinkToolButton;
5160 MenuItem: TMenuItem;
5161 oldIgnoreResize : TResizeType;
5163 oldIgnoreResize := FIsIgnoreResize;
5164 FIsIgnoreResize := rtResizing;
5165 MainCoolBar.Bands.BeginUpdate;
5167 LinkBarPopupMenu.Items.Clear;
5168 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5169 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5170 LinkToolBar.Buttons[i].Free;
5171 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5172 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5173 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5174 ToolButton := TLinkToolButton.Create(LinkToolBar);
5175 // ToolButton.Parent := LinkToolBar;
5176 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5177 MenuItem := TMenuItem.Create(Self);
5178 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5179 LinkBarPopupMenu.Items.Add(MenuItem);
5180 ToolButton.MenuItem := MenuItem;
5181 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5182 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5183 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5184 ToolButton.OnClick := FavoriteClick;
5185 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5186 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5187 ToolButton.OnClick := FavoriteClick;
5189 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5190 ToolButton.Left := 10000;
5191 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5192 ToolButton.AutoSize := True;
5193 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5194 ToolButton.OnDragOver := FavoriteDragOver;
5195 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5196 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5197 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5198 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5199 //ToolButton.DragMode := dmAutomatic;
5200 ToolButton.DragMode := dmManual;
5201 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5203 LinkToolBar.InsertControl(ToolButton);
5208 { if LinkToolBar.ButtonCount = 0 then begin
5209 ToolButton := TLinkToolButton.Create(LinkToolBar);
5210 ToolButton.Style := tbsButton;
5211 ToolButton.ImageIndex := -1;
5212 ToolButton.Caption := '';
5213 LinkToolBar.InsertControl(ToolButton);
5216 MainCoolBar.Bands.EndUpdate;
5217 LoadCoolBarSettings;
5218 FIsIgnoreResize := oldIgnoreResize;
5222 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5230 if Sender = FavoriteTreeView then begin
5231 Node := FavoriteTreeView.GetNodeAt(X, Y);
5236 bound := Node.DisplayRect( False );
5237 height := bound.Bottom - bound.Top;
5238 if (bound.Top + height / 2) <= Y then
5239 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5244 if Node.IsFirstNode then
5249 if FDropSpaceNode <> nil then
5250 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5253 if Change then begin
5254 if FDropSpaceNode <> nil then
5255 FDropSpaceNode.Free;
5257 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5258 FDropSpaceNode.MoveTo( Node, naInsert );
5259 FDropSpaceNode.ImageIndex := -1;
5260 FDropSpaceNode.SelectedIndex := -1;
5264 if Source = FavoriteTreeView then begin
5265 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5270 end else if Source = BrowserTab then
5272 else if Source = ListView then
5274 else if Source is TLinkToolButton then
5276 else if Source = TreeView then
5282 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5285 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5288 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5290 // FDragging := true;
5293 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5295 SenderNode: TTreeNode;
5296 LinkToolButton: TLinkToolButton;
5299 LinkToolButton := TLinkToolButton( Sender );
5300 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5301 SenderNode.Selected := False;
5302 FavoriteDragDrop( SenderNode, Source );
5308 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5310 favButton : TLinkToolButton;
5311 favThreadItem : TFavoriteThreadItem;
5317 if Sender is TLinkToolButton then begin
5318 favButton := TLinkToolButton( Sender );
5319 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5320 favThreadItem := TFavoriteThreadItem( favButton.Data );
5321 if favThreadItem.Item <> nil then
5322 InsertBrowserTab( favThreadItem.Item, False );
5330 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5334 TToolButton( Sender ).DragMode := dmManual;
5335 if ssLeft in Shift then begin
5336 // 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)
5337 if FDragTime = 0 then begin
5338 FDragTime := GetTickCount();
5340 Now := GetTickCount();
5341 if (Now - FDragTime) > 500 then begin
5342 if FDragButton <> TToolButton( Sender ) then begin
5344 FDragButton := TToolButton( Sender );
5345 TToolButton(Sender).BeginDrag(false ,5);
5348 {$IF Defined(debug)}
5349 ShowMessage('Error');
5360 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5365 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5370 for i := 0 to ToolBar.ButtonCount - 1 do
5371 if ToolBar.Buttons[i].Visible then
5372 Result := Result + ToolBar.Buttons[i].Width;
5375 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5377 Control : TWinControl;
5380 Control := FindControl(BandInfo^.hwndChild);
5381 if Control = nil then
5384 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5385 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5386 idx := MainCoolBar.Bands[ i ].ID;
5390 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5391 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5392 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5393 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5394 BandInfo^.cxMinChild := 0;
5395 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5396 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5397 end else if Control = LinkToolBar then begin
5398 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5399 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5400 BandInfo^.cxMinChild := 0;
5401 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5402 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5403 end else begin // AddressToolBar
5404 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5405 BandInfo^.cxMinChild := 0;
5406 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5410 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5416 ChevronPopupMenu.Items.Clear;
5418 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5419 if MainCoolBar.Bands[ i ].Visible then begin
5420 if Idx = Int64(RebarChevron^.uBand) then begin
5427 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5428 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5430 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5431 ToolBarChevronMenu(StdToolBar);
5432 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5436 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5437 ChevronPopupMenu.Popup(p.x, p.y);
5441 procedure TGikoForm.MenuBarChevronMenu;
5442 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5448 for i := 0 to MenuItem.Count - 1 do begin
5450 if MenuItem[i] is TFavoriteMenuItem then begin
5451 Item := TFavoriteMenuItem.Create(Self);
5452 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5454 Item := TMenuItem.Create(Self);
5455 Item.Caption := MenuItem[i].Caption;
5456 Item.Action := MenuItem[i].Action;
5457 Item.ImageIndex := MenuItem[i].ImageIndex;
5458 Item.OnClick := MenuItem[i].OnClick;
5459 PopupItem.Add(Item);
5460 if MenuItem[i].Count > 0 then
5461 SetSubMenu(MenuItem[i], Item);
5470 ChevronPopupMenu.Items.Clear;
5471 ChevronPopupMenu.Images := MainMenu.Images;
5472 bw := GetWidthAllToolButton(MenuToolBar);
5473 if MenuToolBar.Width < bw then begin
5475 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5476 w := w + MenuToolBar.Buttons[i].Width;
5477 if MenuToolBar.Width <= w then begin
5478 Item := TMenuItem.Create(Self);
5479 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5480 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5481 ChevronPopupMenu.Items.Add(Item);
5482 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5488 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5489 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5494 if Assigned(PopupMenu.OnPopup) then
5495 PopupMenu.OnPopup(nil);
5496 for i := 0 to PopupMenu.Items.Count - 1 do begin
5498 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5499 Item := TFavoriteMenuItem.Create(Self);
5500 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5502 Item := TMenuItem.Create(Self);
5503 Item.Caption := PopupMenu.Items[i].Caption;
5504 Item.Action := PopupMenu.Items[i].Action;
5505 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5506 Item.OnClick := PopupMenu.Items[i].OnClick;
5507 PopupItem.Add(Item);
5516 ChevronPopupMenu.Items.Clear;
5517 ChevronPopupMenu.Images := ToolBar.HotImages;
5518 bw := GetWidthAllToolButton(ToolBar);
5519 if ToolBar.Width < bw then begin
5521 for i := 0 to ToolBar.ButtonCount - 1 do begin
5522 if ToolBar.Buttons[i].Visible then
5523 w := w + ToolBar.Buttons[i].Width;
5524 if ToolBar.Width <= w then begin
5525 if ToolBar.Buttons[i].Tag = 0 then begin
5526 Item := TMenuItem.Create(Self);
5527 if ToolBar.Buttons[i].Style = tbsSeparator then
5530 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5531 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5534 Item.Caption := ToolBar.Buttons[i].Caption;
5535 Item.Action := ToolBar.Buttons[i].Action;
5537 //Item.Visible := True;
5539 ChevronPopupMenu.Items.Add(Item);
5540 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5542 Item.OnClick := nil;
5543 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5551 procedure TGikoForm.LinkBarChevronMenu;
5556 Item: TFavoriteMenuItem;
5558 Button: TLinkToolButton;
5560 ChevronPopupMenu.Items.Clear;
5561 ChevronPopupMenu.Images := LinkToolBar.Images;
5562 bw := GetWidthAllToolButton(LinkToolBar);
5563 if LinkToolBar.Width < bw then begin
5565 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5566 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5567 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5568 w := w + LinkToolBar.Buttons[j].Width;
5569 if LinkToolBar.Width <= w then begin
5570 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5571 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5572 Item := TFavoriteMenuItem.Create(Self);
5573 if TObject(Button.Data) is TFavoriteFolder then begin
5574 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5575 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5576 Item.OnClick := FavoriteClick;
5577 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5578 Item.OnClick := FavoriteClick;
5580 Item.Data := Button.Data;
5581 Item.Caption := LinkToolBar.Buttons[j].Caption;
5582 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5583 ChevronPopupMenu.Items.Add(Item);
5594 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5595 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5596 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5598 \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É
5599 \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
5601 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5603 bandInfo : tagREBARBANDINFOA;
5604 pBandInfo : PReBarBandInfoA;
5611 pBandInfo := @bandInfo;
5612 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5613 bandInfo.cbSize := sizeof( bandInfo );
5614 bandInfo.hwndChild := h;
5615 bandInfo.cyMinChild := bar.Height;
5616 bar.OnBandInfo( nil, pBandInfo );
5617 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5619 for i := bar.Bands.Count - 1 downto 0 do begin
5620 if bar.Bands[ i ].Control.Handle = h then begin
5626 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5630 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5632 Control: TWinControl;
5635 Control := FindControl(BandInfo^.hwndChild);
5636 if Control = nil then
5639 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5640 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5641 idx := ListCoolBar.Bands[ i ].ID;
5645 if Control = ListToolBar then begin
5646 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5647 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5648 BandInfo^.cxMinChild := 0;
5649 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5650 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5652 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5653 BandInfo^.cxMinChild := 0;
5654 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5658 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5663 ChevronPopupMenu.Items.Clear;
5664 Idx := RebarChevron^.uBand;
5665 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5666 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5667 ToolBarChevronMenu(ListToolBar);
5670 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5671 ChevronPopupMenu.Popup(p.x, p.y);
5675 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5677 Control: TWinControl;
5680 Control := FindControl(BandInfo^.hwndChild);
5681 if Control = nil then
5684 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5685 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5686 idx := BrowserCoolBar.Bands[ i ].ID;
5690 if Control = BrowserToolBar then begin
5691 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5692 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5693 BandInfo^.cxMinChild := 0;
5694 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5695 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5697 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5698 BandInfo^.cxMinChild := 0;
5699 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5703 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5708 ChevronPopupMenu.Items.Clear;
5709 Idx := RebarChevron^.uBand;
5710 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5711 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5712 ToolBarChevronMenu(BrowserToolBar)
5715 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5716 ChevronPopupMenu.Popup(p.x, p.y);
5720 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5722 if Column^.iImage = -1 then begin
5723 Column^.mask := Column^.mask or LVCF_FMT;
5725 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5726 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5730 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5735 for i := bar.ButtonCount - 1 downto 0 do begin
5736 if bar.Buttons[ i ].Action = action then begin
5737 Result := bar.Buttons[ i ];
5743 procedure TGikoForm.SetToolBarPopup;
5746 aIEButton : TToolButton;
5747 aCabinetBBSButton : TToolButton;
5748 aResRangeButton : TToolButton;
5749 aThreadRangeButton: TToolButton;
5751 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5753 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5754 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5755 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5756 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5757 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5759 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5760 if aIEButton <> nil then
5761 aIEButton.DropdownMenu := BrowserPopupMenu;
5762 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5763 if aCabinetBBSButton <> nil then
5764 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5765 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5766 if aResRangeButton <> nil then
5767 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5768 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5769 if aThreadRangeButton <> nil then
5770 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5773 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5774 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5778 // browserPos : TPoint;
5782 Wnd := WindowFromPoint(Mouse.CursorPos);
5784 if WheelDelta > 0 then
5789 if (Wnd = BrowserTab.Handle) or
5790 (Wnd = BrowserTab.Parent.Handle) then begin
5791 BrowserTab.ScrollTabs(Delta);
5793 if FIsHandledWheel then begin
5794 FIsHandledWheel := False;
5797 FIsHandledWheel := True;
5798 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5799 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5801 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5809 procedure TGikoForm.SetSelectWord( const text : string );
5811 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5812 ClearThreadRengeAction;
5814 if Length( text ) = 0 then
5816 GikoDM.AllItemAction.Checked := True;
5817 SetListViewType( gvtAll )
5819 SetListViewType( gvtUser, text, false );
5823 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5826 SetSelectWord( SelectComboBox.Text );
5830 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5831 Shift: TShiftState);
5839 if Key = VK_Return then
5842 end else if Key = 229 then begin
5843 if GikoSys.Setting.UseUndecided then begin
5844 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5845 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5846 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5847 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5848 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5849 SetLength(Str, Len);
5850 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5851 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5852 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5854 Str := SelectComboBox.Text + Str;
5856 if (Length(Str) > 0) then begin
5860 end else if Length( SelectComboBox.Text ) = 0 then
5862 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5863 *
\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
5864 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5867 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5868 ClearThreadRengeAction;
5872 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5873 procedure TGikoForm.ClearThreadRengeAction;
5875 //
\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é
5876 if GikoDM.AllItemAction.Checked then
5877 GikoDM.AllItemAction.Checked := False;
5878 if GikoDM.LogItemAction.Checked then
5879 GikoDM.LogItemAction.Checked := False;
5880 if GikoDM.NewItemAction.Checked then
5881 GikoDM.NewItemaction.Checked := False;
5882 if GikoDM.LiveItemAction.Checked then
5883 GikoDM.LiveItemAction.Checked := False;
5884 if GikoDM.ArchiveItemAction.Checked then
5885 GikoDM.ArchiveItemAction.Checked := False;
5889 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5894 if Length( SelectComboBox.Text ) = 0 then
5896 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5897 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5902 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5903 procedure TGikoForm.ModifySelectList;
5910 if not SelectComboBoxPanel.Visible then
5913 if Length( SelectComboBox.Text ) > 0 then
5915 oldText := SelectComboBox.Text;
5916 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5918 GikoSys.Setting.SelectTextList.Delete( idx );
5919 idx := SelectComboBox.Items.IndexOf( oldText );
5921 SelectComboBox.Items.Delete( idx );
5922 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5923 SelectComboBox.Items.Insert( 0, oldText );
5924 SelectComboBox.Text := oldText;
5932 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5933 Shift: TShiftState; X, Y: Integer);
5938 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5941 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5942 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5943 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5945 If w <= 50 Then Begin
5946 //
\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
5947 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5948 pos.X := pos.X + (50 - w);
5950 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5954 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5955 //If SelectComboBox.Width <> w Then Begin
5956 If SelectComboBoxPanel.Width <> w Then Begin
5957 SelectComboBoxPanel.Width := w;
5958 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5959 GikoSys.Setting.SelectComboBoxWidth := w;
5960 DraggingSelectComboBoxPosition := pos;
5962 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5963 ResetBandInfo( ListCoolBar, ListToolBar );
5969 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5970 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5974 IsDraggingSelectComboBox := True;
5977 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5981 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5982 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5984 IsDraggingSelectComboBox := False;
5988 procedure TGikoForm.StatusBarResize(Sender: TObject);
5990 StatusBar.Panels[1].Width := StatusBar.Width -
5991 StatusBar.Panels[0].Width -
5992 StatusBar.Panels[THREADSIZE_PANEL].Width -
5993 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5995 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5998 if (Length( SelectComboBox.Text ) = 0) or
5999 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6001 SelectComboBox.Text := '';
6002 SelectComboBox.Color := clWindow;
6007 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6010 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6013 if TObject(SenderNode.Data) is TFavoriteFolder then
6014 SourceNode.MoveTo(SenderNode, naAddChild)
6016 SourceNode.MoveTo(SenderNode, naInsert);
6020 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6024 FavoBoardItem: TFavoriteBoardItem;
6025 FavoThreadItem: TFavoriteThreadItem;
6027 ThreadItem: TThreadItem;
6030 if (SenderNode = nil) or (Source = nil) then
6033 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6034 FavNode := SenderNode.Parent
6036 FavNode := SenderNode;
6040 if Source is TBoard then begin
6041 Board := TBoard( Source );
6042 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6043 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6044 Node.ImageIndex := 15;
6045 Node.SelectedIndex := 15;
6046 end else if Source is TFavoriteBoardItem then begin
6047 FavoBoardItem := TFavoriteBoardItem( Source );
6048 Board := FavoBoardItem.Item;
6049 if Board <> nil then
6050 if not Board.IsThreadDatRead then
6051 GikoSys.ReadSubjectFile(Board);
6052 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6053 Node.ImageIndex := 15;
6054 Node.SelectedIndex := 15;
6055 end else if Source is TThreadItem then begin
6056 ThreadItem := TThreadItem( Source );
6057 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6058 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6059 Node.ImageIndex := 16;
6060 Node.SelectedIndex := 16;
6061 end else if Source is TBrowserRecord then begin
6062 ThreadItem := TBrowserRecord( Source ).Thread;
6063 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6064 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6065 Node.ImageIndex := 16;
6066 Node.SelectedIndex := 16;
6067 end else if Source is TFavoriteThreadItem then begin
6068 FavoThreadItem := TFavoriteThreadItem( Source );
6069 ThreadItem := FavoThreadItem.Item;
6070 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6071 Node.ImageIndex := 16;
6072 Node.SelectedIndex := 16;
6075 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6077 FavoriteMoveTo( SenderNode, Node );
6081 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6084 SourceNode: TTreeNode;
6085 LinkToolButton: TLinkToolButton;
6088 if SenderNode = nil then
6091 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6092 if FDropSpaceNode <> nil then
6093 SenderNode := FDropSpaceNode;
6095 if Source = FavoriteTreeView then begin
6096 SourceNode := FavoriteTreeView.Selected;
6097 FavoriteMoveTo( SenderNode, SourceNode );
6098 end else if Source is TLinkToolButton then begin
6099 LinkToolButton := TLinkToolButton( Source );
6100 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6101 FavoriteMoveTo( SenderNode, SourceNode );
6102 end else if Source = BrowserTab then begin
6103 idx := BrowserTab.TabIndex;
6104 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6105 end else if Source = ListView then begin
6106 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6107 end else if Source = TreeView then begin
6108 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6112 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6115 SenderNode: TTreeNode;
6118 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6119 if SenderNode <> nil then begin
6120 FavoriteDragDrop( SenderNode, Source );
6123 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6124 if FDropSpaceNode <> nil then begin
6126 FDropSpaceNode.Delete;
6128 FDropSpaceNode := nil;
6131 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6132 FavoriteDM.Modified := true;
6138 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6139 Node: TTreeNode; var S: String);
6141 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6142 FavoriteDM.Modified := true;
6144 FavoriteTreeView.ReadOnly := True;
6149 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6150 Shift: TShiftState);
6152 if not TTreeView(Sender).IsEditing then begin
6156 FClickNode := FavoriteTreeView.Selected;
6157 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6161 FClickNode := FavoriteTreeView.Selected;
6162 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6166 FavoriteClick( FavoriteTreeView.Selected );
6167 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6171 FClickNode := FavoriteTreeView.Selected;
6172 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6176 //
\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·
6177 if Key = VK_ESCAPE then begin
6178 if (TTreeView(Sender).Selected <> nil) then begin
6179 TTreeView(Sender).Selected.Text := FOrigenCaption;
6181 TTreeView(Sender).Selected.Focused := False;
6187 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6190 LinkToolButton: TLinkToolButton;
6193 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6195 FClickNode := FavoriteTreeView.Selected;
6197 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6199 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6200 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6201 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6202 FClickNode := FavoriteTreeView.Items[i];
6206 for i := 0 to FClickNode.Count - 1 do begin
6207 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6208 FClickNode := FClickNode.Item[i];
6215 if FClickNode = nil then begin
6216 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6217 FavoriteTreeDeletePopupMenu.Visible := False;
6218 FavoriteTreeRenamePopupMenu.Visible := False;
6219 FavoriteTreeNewFolderPopupMenu.Visible := False;
6220 FavoriteTreeURLCopyPopupMenu.Visible := False;
6221 FavoriteTreeNameCopyPopupMenu.Visible := False;
6222 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6223 FavoriteTreeReloadPopupMenu.Visible := False;
6224 FavoriteTreeLogDeletePopupMenu.Visible := False;
6225 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6226 end else if FClickNode.IsFirstNode then begin
6227 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6228 FavoriteTreeDeletePopupMenu.Visible := False;
6229 FavoriteTreeRenamePopupMenu.Visible := False;
6230 FavoriteTreeNewFolderPopupMenu.Visible := True;
6231 FavoriteTreeURLCopyPopupMenu.Visible := False;
6232 FavoriteTreeNameCopyPopupMenu.Visible := False;
6233 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6234 FavoriteTreeReloadPopupMenu.Visible := False;
6235 FavoriteTreeLogDeletePopupMenu.Visible := False;
6236 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6237 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6238 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6239 FavoriteTreeDeletePopupMenu.Visible := True;
6240 FavoriteTreeRenamePopupMenu.Visible := False;
6241 FavoriteTreeNewFolderPopupMenu.Visible := True;
6242 FavoriteTreeURLCopyPopupMenu.Visible := False;
6243 FavoriteTreeNameCopyPopupMenu.Visible := False;
6244 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6245 FavoriteTreeReloadPopupMenu.Visible := False;
6246 FavoriteTreeLogDeletePopupMenu.Visible := False;
6247 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6248 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6249 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6250 FavoriteTreeDeletePopupMenu.Visible := True;
6251 FavoriteTreeRenamePopupMenu.Visible := True;
6252 FavoriteTreeNewFolderPopupMenu.Visible := True;
6253 FavoriteTreeURLCopyPopupMenu.Visible := False;
6254 FavoriteTreeNameCopyPopupMenu.Visible := True;
6255 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6256 FavoriteTreeReloadPopupMenu.Visible := False;
6257 FavoriteTreeLogDeletePopupMenu.Visible := False;
6258 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6259 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6260 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6261 FavoriteTreeDeletePopupMenu.Visible := True;
6262 FavoriteTreeRenamePopupMenu.Visible := True;
6263 FavoriteTreeNewFolderPopupMenu.Visible := True;
6264 FavoriteTreeURLCopyPopupMenu.Visible := True;
6265 FavoriteTreeNameCopyPopupMenu.Visible := True;
6266 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6267 FavoriteTreeReloadPopupMenu.Visible := True;
6268 FavoriteTreeLogDeletePopupMenu.Visible := True;
6269 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6270 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6271 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6272 FavoriteTreeDeletePopupMenu.Visible := True;
6273 FavoriteTreeRenamePopupMenu.Visible := True;
6274 FavoriteTreeNewFolderPopupMenu.Visible := True;
6275 FavoriteTreeURLCopyPopupMenu.Visible := True;
6276 FavoriteTreeNameCopyPopupMenu.Visible := True;
6277 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6278 FavoriteTreeReloadPopupMenu.Visible := True;
6279 FavoriteTreeLogDeletePopupMenu.Visible := False;
6280 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6282 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6283 FavoriteTreeDeletePopupMenu.Visible := False;
6284 FavoriteTreeRenamePopupMenu.Visible := False;
6285 FavoriteTreeNewFolderPopupMenu.Visible := False;
6286 FavoriteTreeURLCopyPopupMenu.Visible := False;
6287 FavoriteTreeNameCopyPopupMenu.Visible := False;
6288 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6289 FavoriteTreeReloadPopupMenu.Visible := False;
6290 FavoriteTreeLogDeletePopupMenu.Visible := False;
6291 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6296 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6301 if not (TObject(node.Data) is TFavoriteFolder) then
6304 for i := 0 to node.Count - 1 do
6306 if TObject(node.Item[i].Data) is TFavoriteFolder then
6307 FavoriteBrowseFolder( node.Item[i] )
6308 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6309 FavoriteClick( node.Item[i], False );
6313 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6319 for i := 0 to Node.Count - 1 do begin
6320 if Node.Item[i].Data = FindPointer then begin
6321 Result := Node.Item[i];
6323 end else if Node.Item[i].Count > 0 then begin
6324 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6325 if Found <> nil then begin
6336 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6340 SenderNode: TTreeNode;
6344 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6345 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6346 SenderNode := FavoriteTreeView.Items[i];
6350 SenderNode.Selected := False;
6352 FavoriteDragDrop( SenderNode, Source );
6357 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6358 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6360 if FDragWFirst <> true then begin
6361 FDragWFirst := false;
6363 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6364 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6368 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6369 if GikoSys.Setting.ListWidthState = glsMin then begin
6370 GikoDM.BrowserMaxAndFocusAction.Execute;
6373 if GikoSys.Setting.ListHeightState = glsMin then begin
6374 GikoDM.BrowserMaxAndFocusAction.Execute;
6380 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6381 Y: Integer; State: TDragState; var Accept: Boolean);
6384 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6388 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6392 if FDropSpaceNode <> nil then begin
6394 FDropSpaceNode.Delete;
6396 FDropSpaceNode := nil;
6398 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6399 FavoriteDM.Modified := true;
6405 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6406 MousePos: TPoint; var Handled: Boolean);
6409 FToolBarSettingSender := tssList;
6410 MousePos := ListCoolBar.ClientToScreen( MousePos );
6411 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6415 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6416 MousePos: TPoint; var Handled: Boolean);
6419 FToolBarSettingSender := tssMain;
6420 MousePos := MainCoolBar.ClientToScreen( MousePos );
6421 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6425 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6426 MousePos: TPoint; var Handled: Boolean);
6429 FToolBarSettingSender := tssBrowser;
6430 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6431 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6434 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6436 if FListViewBackGroundColor <> value then begin
6437 FListViewBackGroundColor := value;
6438 ListView.Color := FListViewBackGroundColor;
6441 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6443 threadItem : TThreadItem;
6447 if FClickNode = nil then Exit;
6449 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6451 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6452 if threadItem = nil then
6454 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6456 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6458 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6459 if boardItem = nil then
6461 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6467 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6468 MousePos: TPoint; var Handled: Boolean);
6472 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6473 if BrowserTab.TabIndex <> idx then begin
6474 BrowserTab.TabIndex := idx;
6475 BrowserTab.OnChange(nil);
6479 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6481 ThreadItem: TThreadItem;
6487 boardPlugIn : TBoardPlugIn;
6489 if Number = 0 then Exit;
6490 ThreadItem := GetActiveContent;
6492 if ThreadItem <> nil then begin
6493 //if ThreadItem.IsBoardPlugInAvailable then begin
6494 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6495 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6496 //boardPlugIn := ThreadItem.BoardPlugIn;
6497 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6499 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6500 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6501 //
\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
6502 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6504 FileName := ThreadItem.FilePath;
6505 tmp := GikoSys.ReadThreadFile(FileName, Number);
6507 if tmp <> '' then begin
6508 THTMLCreate.DivideStrLine(tmp, @Res);
6510 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6511 if ReplaceTag then begin
6512 Header := CustomStringReplace(Header, '</b>', '',true);
6513 Header := CustomStringReplace(Header, '<b>', '',true);
6514 Header := CustomStringReplace(Header, '<br>', '',true);
6515 Header := DeleteFontTag(Header);
6517 //if ThreadItem.IsBoardPlugInAvailable then begin
6518 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6519 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6520 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6522 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6523 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6524 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6525 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6528 Body := CustomStringReplace(Body, '</a>', '',true);
6530 Body := HTMLCreater.DeleteLink(Body);
6531 if ReplaceTag then begin
6532 Body := CustomStringReplace(Body, '<', '<');
6533 Body := CustomStringReplace(Body, '>', '>');
6534 Body := CustomStringReplace(Body, '"', '"');
6535 Body := CustomStringReplace(Body, '&', '&');
6536 //Body := CustomStringReplace(Body, ' ', ' ');
6539 Header := Header + Body;
6541 Clipboard.SetTextBuf( PChar(Header) );
6547 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6549 AddRoundNameMenu(dummy1);
6552 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6554 FavoriteDM.URLReplace(oldURLs, newURLs);
6557 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6559 RoundList.URLReplace(oldURLs, newURLs);
6562 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6564 Filename = 'tab.sav';
6565 bFilename = '~tab.sav';
6571 oldBoardName: string;
6573 newBoardName: string;
6574 TabList: TStringList;
6577 if oldURLs.Count <> newURLs.Count then begin
6580 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6581 TabList := TStringList.Create;
6583 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6585 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6586 //
\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
6587 for i := 0 to oldURLs.Count - 1 do begin
6588 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6589 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6590 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6591 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6592 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6593 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6595 for j := 0 to TabList.Count - 1 do begin
6596 tempString := TabList[j];
6597 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6598 tempString := StringReplace(tempString, oldHost, newHost,[]);
6599 TabList[j] := tempString;
6603 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6605 if FileExists( GikoSys.GetAppDir + Filename) then begin
6606 if FileExists( GikoSys.GetAppDir + bFilename) then
6607 DeleteFile(GikoSys.GetAppDir + bFilename);
6609 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6610 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6613 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6621 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6622 procedure TGikoForm.OnMinimize;
6624 if FActiveContent <> nil then begin
6625 FIsMinimize := mtMinimizing;
6626 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6630 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6631 procedure TGikoForm.OnMinimized;
6633 FIsMinimize := mtMinimized;
6637 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6639 CoolBarResized( Sender, BrowserCoolBar );
6642 // *************************************************************************
6643 // ExternalBoardPlugInMain
6644 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6645 // *************************************************************************
6646 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6649 boardPlugIn : TBoardPlugIn;
6652 if not (Sender is TMenuItem) then
6655 item := TMenuItem( Sender );
6656 if not Assigned( Pointer( item.Tag ) ) then
6659 //
\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·
6660 boardPlugIn := TBoardPlugIn( item.Tag );
6661 boardPlugIn.PlugInMenu( item.Handle );
6664 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6665 procedure TGikoForm.TreeClick( Node : TTreeNode );
6671 if FTreeType = gttHistory then begin
6673 if TObject( Node.Data ) is TFavoriteThreadItem then
6674 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6675 FavoriteClick( Node );
6678 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6679 if ActiveList = Node.Data then
6682 ActiveListColumnSave;
6684 if TObject(Node.Data) is TBBS then begin
6685 SetActiveList(Node.data);
6686 end else if TObject(Node.Data) is TCategory then begin
6687 SetActiveList(Node.data);
6688 end else if TObject(Node.Data) is TBoard then begin
6689 if not TBoard(Node.Data).IsThreadDatRead then begin
6690 Screen.Cursor := crHourGlass;
6692 if not TBoard(Node.Data).IsThreadDatRead then
6693 GikoSys.ReadSubjectFile(Node.Data);
6695 Screen.Cursor := crDefault;
6698 Sort.SetSortDate(Now());
6699 SetActiveList(Node.data);
6702 if TObject( Node.Data ) is TBoard then begin // not TCategory
6703 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6704 if GikoSys.Setting.ListWidthState = glsMax then begin
6705 GikoDM.BrowserMinAction.Execute;
6706 if GikoForm.Visible then
6710 if GikoSys.Setting.ListHeightState = glsMax then begin
6711 GikoDM.BrowserMinAction.Execute;
6712 if GikoForm.Visible then
6720 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6721 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6724 ThreadItem : TThreadItem;
6725 shiftDown : Boolean;
6728 if Node = nil then Exit;
6730 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6732 if FTreeType = gtt2ch then begin
6733 if not (TObject(Node.Data) is TBoard) then Exit;
6734 Board := TBoard(Node.Data);
6735 DownloadList(Board, shiftDown);
6736 end else if FTreeType = gttHistory then begin
6737 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6738 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6739 DownloadContent(ThreadItem, shiftDown);
6743 // *************************************************************************
6744 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6745 // *************************************************************************
6746 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6747 Shift: TShiftState);
6749 if Key = VK_BACK then begin
6750 // UpFolderButtonClick(Sender);
6751 end else if Key = VK_SPACE then begin
6752 TreeDoubleClick( TreeView.Selected );
6753 end else if Key = VK_RETURN then begin
6754 TreeClick( TreeView.Selected );
6755 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6758 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6759 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6760 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6762 favItem : TTreeNode;
6763 favThreadItem : TFavoriteThreadItem;
6769 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6770 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6771 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6772 rect := FavoriteTreeView.Selected.DisplayRect(true);
6773 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6774 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6775 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6776 if ssDouble in Shift then begin
6777 FClickNode := FavoriteTreeView.Selected;
6778 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6782 TObject(FavoriteTreeView.Selected));
6789 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6790 if favItem = nil then Exit;
6792 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6793 favThreadItem := TFavoriteThreadItem( favItem.Data );
6794 if favThreadItem.Item <> nil then
6795 InsertBrowserTab( favThreadItem.Item, False );
6802 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6805 if FIsIgnoreResize <> rtNone then
6808 if GikoSys.Setting.ListOrientation = gloVertical then begin
6809 if GikoSys.Setting.ListHeightState = glsMin then begin
6810 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6811 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6817 procedure TGikoForm.OnResized;
6822 FOldFormWidth := Width;
6823 FIsIgnoreResize := rtNone;
6828 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6829 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6834 //
\8dÅ
\8f¬
\89»
\82Í
\8aù
\82É
\8a®
\97¹
\82µ
\82Ä
\82¢
\82é (
\82Â
\82Ü
\82è
\83^
\83X
\83N
\83o
\81[
\82©
\82ç
\83E
\83B
\83\93\83h
\83E
\82ð
\95\9c\8c³
\92\86)
6835 if FActiveContent <> nil then begin
6836 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6837 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6839 FIsMinimize := mtNone;
6844 // *************************************************************************
6845 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6846 // *************************************************************************
6847 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6852 stlist : TStringList;
6853 i, count, rc : Integer;
6859 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6860 FActiveContent.Browser.SetFocus;
6863 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6864 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6865 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6866 if (Assigned(e)) then begin
6867 if (e.className = 'date') or (e.id = 'date') then begin
6869 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6870 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6871 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6872 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6875 stlist := TStringList.Create;
6877 stList.DelimitedText := AID;
6879 for i := 0 to stList.Count - 1 do
6880 if Length(WideString(stList[i])) = 8 then begin
6881 if GikoSys.NotDateorTimeString(stList[i]) then begin
6890 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6892 if count > 20 then begin
6893 rc := GikoUtil.MsgBox(Handle,
6894 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6895 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6896 MB_YESNO or MB_ICONQUESTION);
6897 limited := rc <> ID_YES;
6899 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6900 FActiveContent.IDAnchorPopup(body);
6909 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6910 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6912 SelectTimer.Interval := 0;
6913 if not (ListView.Selected = nil) then
6914 if( FActiveContent = nil) or
6915 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6920 procedure TGikoForm.GetTabURLs(AStringList: TStringList);
6922 rec : TBrowserRecord;
6925 for i := 0 to BrowserTab.Tabs.Count -1 do begin
6927 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6928 if( rec <> nil) and (rec.Thread <> nil) then
6929 AStringList.Add( rec.Thread.URL );
6935 procedure TGikoForm.SaveTabURLs;
6937 Filename = 'tab.sav';
6938 bFilename = '~tab.sav';
6940 SaveStringList: TStringList;
6942 SaveStringList := TStringList.Create;
6944 GetTabURLs(SaveStringList);
6946 if FileExists( GikoSys.GetAppDir + Filename) then begin
6947 CopyFile(PChar(GikoSys.GetAppDir + Filename),
6948 PChar(GikoSys.GetAppDir + bFilename), False);
6952 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
6954 SaveStringList.Free;
6958 procedure TGikoForm.LoadTabURLs;
6960 TABFILE = 'tab.sav';
6965 GikoTab : TGikoTabAppend;
6968 GikoTab := GikoSys.Setting.BrowserTabAppend;
6969 URLs := TStringList.Create();
6971 fileName := ExtractFilePath(Application.ExeName) + TABFILE;
6972 if FileExists(fileName) then begin
6974 URLs.LoadFromFile(fileName);
6975 bound := URLs.Count - 1;
6976 if bound > -1 then begin
6977 GikoSys.Setting.BrowserTabAppend := gtpLast;
6978 for i := 0 to bound do begin
6979 item := BBSsFindThreadFromURL( URLs[ i ] );
6981 InsertBrowserTab( item, false );
6983 //
\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Ñ
6984 if BrowserTab.Tabs.Count > 0 then begin
6985 BrowserTab.OnChange(nil);
6988 //
\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
6989 DeleteFile(fileName);
6992 on EFOpenError do ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
6997 GikoSys.Setting.BrowserTabAppend := GikoTab;
7003 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7004 procedure TGikoForm.ActiveListColumnSave;
7006 ActivListObj : TObject;
7007 i, id, idx : Integer;
7008 BBSOrder : TGikoBBSColumnList;
7009 CategoryOrder : TGikoCategoryColumnList;
7010 BoardOrder : TGikoBoardColumnList;
7013 ActivListObj := ActiveList;
7014 if ActivListObj is TBBS then begin
7015 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7016 BBSOrder := TGikoBBSColumnList.Create;
7018 for i := 0 to ListView.Columns.Count - 1 do begin
7019 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7020 idx := ListView.Column[ i ].Tag;
7021 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7022 BBSOrder.Add( TGikoBBSColumnID( id ) );
7023 //
\95\9d\82Ì
\95Û
\91¶
7024 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7026 for i := 0 to ListView.Columns.Count - 1 do
7027 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7028 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7032 end else if ActivListObj is TCategory then begin
7033 //=====
\94Â
\83\8a\83X
\83g =====
7034 CategoryOrder := TGikoCategoryColumnList.Create;
7036 for i := 0 to ListView.Columns.Count - 1 do begin
7037 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7038 idx := ListView.Column[ i ].Tag;
7039 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7040 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7041 //
\95\9d\82Ì
\95Û
\91¶
7042 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7044 for i := 0 to ListView.Columns.Count - 1 do
7045 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7046 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7050 end else if ActivListObj is TBoard then begin
7051 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7052 BoardOrder := TGikoBoardColumnList.Create;
7054 for i := 0 to ListView.Columns.Count - 1 do begin
7055 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7056 idx := ListView.Column[ i ].Tag;
7057 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7058 BoardOrder.Add( TGikoBoardColumnID( id ) );
7059 //
\95\9d\82Ì
\95Û
\91¶
7060 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7062 for i := 0 to ListView.Columns.Count - 1 do
7063 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7064 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7072 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7073 Column: TListColumn; Point: TPoint);
7079 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7080 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7081 ListColumnPopupMenu.Items.Items[ i ].Free;
7083 //
\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¢)
7084 if TObject( FActiveList ) is TBBS then begin
7086 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7087 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7088 item := TMenuItem.Create( ListColumnPopupMenu );
7089 item.Caption := GikoBBSColumnCaption[ i ];
7091 item.OnClick := ListColumnPopupMenuOnClick;
7092 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7093 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7094 item.Checked := True;
7098 ListColumnPopupMenu.Items.Add( item );
7101 end else if TObject( FActiveList ) is TCategory then begin
7103 //=====
\94Â
\83\8a\83X
\83g =====
7104 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7105 item := TMenuItem.Create( ListColumnPopupMenu );
7106 item.Caption := GikoCategoryColumnCaption[ i ];
7108 item.OnClick := ListColumnPopupMenuOnClick;
7109 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7110 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7111 item.Checked := True;
7115 ListColumnPopupMenu.Items.Add( item );
7118 end else if TObject( FActiveList ) is TBoard then begin
7120 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7121 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7122 item := TMenuItem.Create( ListColumnPopupMenu );
7123 item.Caption := GikoBoardColumnCaption[ i ];
7125 item.OnClick := ListColumnPopupMenuOnClick;
7126 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7127 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7128 item.Checked := True;
7132 ListColumnPopupMenu.Items.Add( item );
7137 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7138 Point := ListView.ClientToScreen( Point );
7139 if ListColumnPopupMenu.Items.Count > 0 then
7140 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7144 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7145 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7152 if not (Sender is TMenuItem) then
7155 ActiveListColumnSave;
7156 item := TMenuItem( Sender );
7158 if TObject( FActiveList ) is TBBS then
7159 orderList := GikoSys.Setting.BBSColumnOrder
7160 else if TObject( FActiveList ) is TCategory then
7161 orderList := GikoSys.Setting.CategoryColumnOrder
7162 else if TObject( FActiveList ) is TBoard then
7163 orderList := GikoSys.Setting.BoardColumnOrder
7167 if item.Checked then begin
7168 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7169 for i := orderList.Count - 1 downto 0 do begin
7170 if Integer( orderList[ i ] ) = item.Tag then begin
7171 orderList.Delete( i );
7176 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7177 orderList.Add( Pointer( item.Tag ) );
7180 SetActiveList( FActiveList );
7184 procedure TGikoForm.OnGestureStart(Sender: TObject);
7189 procedure TGikoForm.OnGestureMove(Sender: TObject);
7196 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7198 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7199 s := MouseGesture.GetGestureStr;
7201 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7202 if Action <> nil then
7203 ActStr := '
\81i' + Action.Caption + '
\81j';
7204 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7205 StatusBar.Panels[1].Text := s;
7208 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7213 s := MouseGesture.GetGestureStr;
7214 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7215 if Action <> nil then
7217 StatusBar.Panels[1].Text := '';
7220 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7221 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7223 ThreadItem: TThreadItem;
7225 DefaultDraw := true;
7226 if TObject(Item.Data) is TThreadItem then begin
7227 ThreadItem := TThreadItem(Item.Data);
7228 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7229 ListView.Canvas.Brush.Color := FOddColor;
7230 //
\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
7231 if (GikoSys.Setting.UnFocusedBold) and
7232 (Item.Selected) and (not ListView.Focused) then begin
7233 ListView.Canvas.Font.Style := [fsBold];
7236 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7239 if ThreadItem.UnRead then
7240 ListView.Canvas.Font.Style := [fsBold];
7245 procedure TGikoForm.FormActivate(Sender: TObject);
7247 if GikoSys.Setting.GestureEnabled then begin
7248 GikoSys.Setting.Gestures.ClearGesture;
7249 GikoSys.Setting.Gestures.LoadGesture(
7250 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7251 MouseGesture.UnHook;
7252 MouseGesture.OnGestureStart := OnGestureStart;
7253 MouseGesture.OnGestureMove := OnGestureMove;
7254 MouseGesture.OnGestureEnd := OnGestureEnd;
7255 MouseGesture.SetHook(Handle);
7257 //MouseGesture.UnHook;
7258 MouseGesture.OnGestureStart := nil;
7259 MouseGesture.OnGestureMove := nil;
7260 MouseGesture.OnGestureEnd := nil;
7264 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7266 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7267 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7271 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7276 affectedBand : TCoolBand;
7279 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7280 FIsIgnoreResize := rtResizing;
7281 PostMessage( Handle, USER_RESIZED, 0, 0 );
7283 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7284 if CoolBar = MainCoolBar then begin
7285 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7286 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7287 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7288 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7289 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7291 end else if CoolBar = ListCoolBar then begin
7292 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7293 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7294 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7295 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7296 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7298 end else if CoolBar = BrowserCoolBar then begin
7299 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7300 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7301 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7302 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7303 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7306 if not (Sender is TToolBar) or (CoolBar = nil) then
7308 toolbar := TToolBar( Sender );
7309 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7310 affectedBand := nil;
7311 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7312 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7313 band := CoolBar.Bands[ i ];
7314 if band.Break or (i = 0) then begin
7315 if i + 1 < CoolBar.Bands.Count then
7316 if not CoolBar.Bands[ i + 1 ].Break then
7317 affectedBand := CoolBar.Bands[ i + 1 ];
7320 affectedBand := CoolBar.Bands[ i - 1 ];
7325 //
\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·
7326 if CoolBar = MainCoolBar then begin
7327 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7328 coolSet.FCoolWidth := toolbar.Width + 25;
7329 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7330 if affectedBand <> nil then begin
7331 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7332 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7333 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7335 end else if CoolBar = ListCoolBar then begin
7336 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7337 coolSet.FCoolWidth := toolbar.Width + 25;
7338 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7339 if affectedBand <> nil then begin
7340 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7341 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7342 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7344 end else if CoolBar = BrowserCoolBar then begin
7345 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7346 coolSet.FCoolWidth := toolbar.Width + 25;
7347 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7348 if affectedBand <> nil then begin
7349 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7350 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7351 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7358 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7360 CoolBarResized( Sender, MainCoolBar );
7363 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7365 CoolBarResized( Sender, ListCoolBar );
7368 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7370 CoolBarResized( Sender, BrowserCoolBar );
7373 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7374 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7376 ThreadItem : TThreadItem;
7377 ReadList : TStringList;
7378 wordCount : TWordCount;
7380 ThreadItem := GetActiveContent;
7381 ReadList := TStringList.Create;
7382 wordCount := TWordCount.Create;
7384 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7385 {$IFDEF SPAM_FILTER_ENABLED}
7386 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7387 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7388 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7389 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7390 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7392 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7393 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7398 FActiveContent.Repaint := true;
7399 if ThreadItem <> nil then
7400 InsertBrowserTab( ThreadItem, True );
7403 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7404 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7406 ThreadItem : TThreadItem;
7409 ReadList : TStringList;
7410 wordCount : TWordCount;
7412 No := KokoPopupMenu.Tag;
7413 if No = 0 then Exit;
7414 ThreadItem := GetActiveContent;
7415 if ThreadItem = nil then Exit;
7416 body := TStringList.Create;
7418 GikoSys.GetSameIDRes(No, ThreadItem, body);
7420 ReadList := TStringList.Create;
7421 wordCount := TWordCount.Create;
7423 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7424 {$IFDEF SPAM_FILTER_ENABLED}
7425 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7426 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7428 for i := 0 to body.Count - 1 do begin
7429 {$IFDEF SPAM_FILTER_ENABLED}
7430 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7431 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7432 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7434 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7435 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7441 FActiveContent.Repaint := true;
7442 if ThreadItem <> nil then
7443 InsertBrowserTab( ThreadItem, True );
7450 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7452 firstElement: IHTMLElement;
7453 document: IHTMLDocument2;
7455 document := FActiveContent.Browser.Document as IHTMLDocument2;
7456 if Assigned(document) then
7457 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7458 if Assigned(firstElement) then
7459 if firstElement.style.visibility <> 'hidden' then
7460 firstElement.style.visibility := 'hidden';
7464 procedure TGikoForm.RepaintAllTabsBrowser();
7467 ThreadItem: TThreadItem;
7469 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7470 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7472 ThreadItem := GetActiveContent;
7473 if ThreadItem <> nil then
7474 InsertBrowserTab( ThreadItem, True );
7478 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7479 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7480 Shift: TShiftState);
7482 //
\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Ì
7483 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7484 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7485 SelectTimer.Interval := 0;
7486 if not (GikoSys.Setting.BrowserTabVisible) then begin
7487 if (GetActiveList is TBoard) then begin
7488 //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
7489 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7490 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7491 (Key = VK_UP) or (Key = VK_DOWN)) then
7492 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7496 // *************************************************************************
7497 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7498 // *************************************************************************
7499 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7500 Node: TTreeNode; var AllowEdit: Boolean);
7502 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7503 FOrigenCaption := Node.Text;
7505 // *************************************************************************
7506 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7507 // *************************************************************************
7508 function TGikoForm.GetMainForm(): TComponent;
7510 Result := Application.MainForm;
7512 // *************************************************************************
7513 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7514 // *************************************************************************
7515 function TGikoForm.GetScreenCursor(): TCursor;
7517 Result := Screen.Cursor;
7519 // *************************************************************************
7520 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7521 // *************************************************************************
7522 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7524 if (Screen.Cursor <> Cursor) then
7525 Screen.Cursor := Cursor;
7527 // *************************************************************************
7528 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
7529 // *************************************************************************
7530 function TGikoForm.EditorFormExists(): boolean;
7535 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\92T
\82·
7536 for i := 0 to Screen.CustomFormCount - 1 do begin
7537 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
7543 // *************************************************************************
7544 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\96¼
\91O
\82Ì
\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
7545 // *************************************************************************
7546 procedure TGikoForm.AllEditroFormNameTextClearClear();
7550 for i := 0 to Screen.CustomFormCount - 1 do begin
7551 if TObject(Screen.CustomForms[i]) is TEditorForm then
7552 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7555 // *************************************************************************
7556 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
7557 // *************************************************************************
7558 procedure TGikoForm.AllEditroFormMailTextClearClear();
7562 for i := 0 to Screen.CustomFormCount - 1 do begin
7563 if TObject(Screen.CustomForms[i]) is TEditorForm then
7564 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7567 // *************************************************************************
7568 //!
\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
7569 // *************************************************************************
7570 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7572 //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Ì
7573 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7574 if GikoDM.CabinetVisibleAction.Enabled then begin
7575 GikoDM.CabinetVisibleAction.Execute;
7578 // *************************************************************************
7579 //!
\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
7580 // *************************************************************************
7581 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7583 if GikoDM.FavoriteArrangeAction.Enabled then begin
7584 GikoDM.FavoriteArrangeAction.Execute;
7587 // *************************************************************************
7588 //!
\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
7589 // *************************************************************************
7590 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7591 var Handled: Boolean);
7595 //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ß
7596 if Self.Active then begin
7598 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7599 WM_KEYFIRST..WM_KEYLAST :
7601 //
\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ç
7602 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7603 wmMsg.Msg := Msg.message;
7604 wmMsg.CharCode := Word(Msg.wParam);
7605 wmMsg.KeyData := Msg.lParam;
7606 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7607 Self.OnShortCut(wmMsg, Handled);
7613 // *************************************************************************
7614 //!
\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
7615 // *************************************************************************
7616 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7618 Application.ProcessMessages;
7619 if not Application.Terminated then begin
7620 if PreviewTimer.Enabled then
7621 PreviewTimer.Enabled := False;
7622 //
\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
7623 if FHint <> nil then begin
7624 FHint.ReleaseHandle;
7627 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7628 if FPreviewBrowser <> nil then
7629 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7633 // *************************************************************************
7634 //!
\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
7635 // *************************************************************************
7636 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7641 if (Sender <> nil) then begin
7642 s := ' [' + Sender.ClassName + ']' + #13#10;
7644 s := ' [ Sender is nil ] ' + #13#10;
7647 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7649 // *************************************************************************
7650 //!
\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¬
7651 // *************************************************************************
7652 procedure TGikoForm.CreateControlThread();
7654 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7655 FControlThread := TThreadControl.Create(True);
7656 FControlThread.MaxThreadCount := 1;
7657 FControlThread.Resume;
7658 FControlThread.OnDownloadEnd := DownloadEnd;
7659 FControlThread.OnDownloadMsg := DownloadMsg;
7660 FControlThread.OnWork := Work;
7661 FControlThread.OnWorkBegin := WorkBegin;
7662 FControlThread.OnWorkEnd := WorkEnd;
7664 // *************************************************************************
7665 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7666 // *************************************************************************
7667 procedure TGikoForm.CreateBrowsers(count: Integer);
7670 newBrowser: TWebBrowser;
7672 BrowserNullTab := TBrowserRecord.Create;
7673 BrowserNullTab.Browser := Browser;
7674 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7675 FBrowsers := TList.Create;
7676 for i := 0 to count -1 do begin
7677 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7678 newBrowser := FBrowsers[FBrowsers.Count - 1];
7679 TOleControl(newBrowser).Parent := BrowserPanel;
7680 TOleControl(newBrowser).Align := alNone;
7681 TOleControl(newBrowser).Left := 0;
7682 TOleControl(newBrowser).Top := 0;
7683 newBrowser.RegisterAsDropTarget := False;
7684 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7685 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7686 newBrowser.OnEnter := BrowserEnter;
7687 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7688 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7689 newBrowser.Navigate(BLANK_HTML);
7690 ShowWindow(newBrowser.Handle, SW_HIDE);
7692 BrowserNullTab.Browser.BringToFront;
7693 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7694 //
\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Ì
7695 //
\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Å
7696 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7697 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7698 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7699 Application.ProcessMessages;
7702 // *************************************************************************
7703 //!
\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é
7704 // *************************************************************************
7705 procedure TGikoForm.SetSelectComboBox();
7707 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7710 ToolButton: TToolButton;
7712 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7713 SelectComboBoxPanel.Visible := False;
7715 for i := ListToolBar.ControlCount - 1 downto 0 do
7717 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7719 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7720 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7721 SelectComboBoxPanel.Parent := ListToolBar;
7722 SelectComboBoxPanel.Visible := True;
7724 SelectComboBox.Left := 0;
7725 SelectComboBox.Top := 0;
7726 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7727 SelectComboBox.Width := SelectComboBoxPanel.Width -
7728 SelectComboBoxSplitter.Width;
7730 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7731 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7732 if ToolButton = nil then begin
7733 ToolButton := TToolButton.Create(ListToolBar);
7734 ToolButton.Name := DUMMYCOMPNAME;
7736 ToolButton.Style := tbsSeparator;
7737 ToolButton.Width := 0;
7738 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7739 ListToolBar.InsertControl(ToolButton);
7740 ToolButton.Visible := False;
7742 //
\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·
7743 if (i + 1) < ListToolBar.ControlCount then
7744 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7745 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7746 ListToolBar.Controls[ i + 1 ].Visible := False;
7749 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7750 ListToolBar.Controls[ i ].Visible := False;
7758 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7759 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7760 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7767 if (TreeView.Selected <> nil) and
7768 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7769 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7770 rect := TreeView.Selected.DisplayRect(true);
7771 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7772 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7773 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7774 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7775 if ssDouble in Shift then begin
7776 TreeDoubleClick( TreeView.Selected );
7778 TreeClick(TreeView.Selected);
7785 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7786 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7790 if ActionList <> nil then begin
7791 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7793 for i := 0 to ActionList.ActionCount - 1 do begin
7795 FActionListGroupIndexes[i] :=
7796 TCustomAction(ActionList.Actions[i]).GroupIndex;
7797 TCustomAction(ActionList.Actions[i]).GroupIndex
7800 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7806 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7807 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7811 if ActionList <> nil then begin
7812 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7813 for i := 0 to ActionList.ActionCount - 1 do begin
7815 TCustomAction(ActionList.Actions[i]).GroupIndex
7816 := FActionListGroupIndexes[i];
7818 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7824 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7825 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7829 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7830 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7832 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7833 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin