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;
24 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
25 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
26 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
27 TResizeType = (rtNone, rtResizing);
29 // TBrowserRecord = class;
31 TGikoForm = class(TForm)
32 StatusBar: TStatusBar;
35 TreeSplitter: TSplitter;
38 ThreadMainPanel: TPanel;
39 ListSplitter: TSplitter;
41 ListView: TGikoListView;
45 MessageHideButton: TSpeedButton;
46 MessageListView: TListView;
47 MessageSplitter: TSplitter;
49 CabinetCloseSpeedButton: TSpeedButton;
51 CabinetSelectToolButton: TToolButton;
52 HistoryToolBar: TToolBar;
53 HistoryShowToolButton: TToolButton;
54 HistoryAllClearToolButton: TToolButton;
55 ItemIcon16: TImageList;
56 ItemIcon32: TImageList;
57 HotToobarImageList: TImageList;
58 ItemImageList: TImageList;
61 DeleteMenu: TMenuItem;
63 KidokuMenu: TMenuItem;
64 MidokuMenu: TMenuItem;
65 AllSelectMenu: TMenuItem;
67 StdToolBarMenu: TMenuItem;
68 CabinetMenu: TMenuItem;
71 CabinetVisibleMenu: TMenuItem;
72 MessageMenu: TMenuItem;
73 StatusBarMenu: TMenuItem;
75 LargeIconMenu: TMenuItem;
76 SmallIconMenu: TMenuItem;
78 DetailMenu: TMenuItem;
83 OptionMenu: TMenuItem;
88 BrowserPopupMenu: TPopupMenu;
89 ShowThreadMenu: TMenuItem;
90 ShowBoardMenu: TMenuItem;
91 ListIconPopupMenu: TPopupMenu;
92 LargeIconPMenu: TMenuItem;
93 SmallIconPMenu: TMenuItem;
95 DetailPMenu: TMenuItem;
96 ClosePopupMenu: TPopupMenu;
107 ListPopupMenu: TPopupMenu;
108 ListRoundPMenu: TMenuItem;
109 ListReservPMenu: TMenuItem;
111 ItemRoundPMenu: TMenuItem;
113 KidokuPMenu: TMenuItem;
114 MidokuPMenu: TMenuItem;
115 AllSelectPMenu: TMenuItem;
116 UrlCopyPMenu: TMenuItem;
118 DeletePMenu: TMenuItem;
120 ViewPMenu: TMenuItem;
121 LargeIconLPMenu: TMenuItem;
122 SmallIconLPMenu: TMenuItem;
123 ListLPMenu: TMenuItem;
124 DetailLPMenu: TMenuItem;
142 KokoPopupMenu: TPopupMenu;
143 KokomadePMenu: TMenuItem;
145 MenuItem1: TMenuItem;
146 MenuItem2: TMenuItem;
147 BrowserTabPopupMenu: TPopupMenu;
152 TreePopupMenu: TPopupMenu;
153 TreeSelectThreadPupupMenu: TMenuItem;
154 TreeSelectBoardPupupMenu: TMenuItem;
156 TreeSelectURLPupupMenu: TMenuItem;
160 BrowserBottomPanel: TGikoPanel;
161 CabinetSelectPopupMenu: TPopupMenu;
163 ItemReservPMenu: TMenuItem;
164 RoundNamePopupMenu: TPopupMenu;
176 MessageImageList: TImageList;
177 ProgressBar: TProgressBar;
179 NameUrlCopyPMenu: TMenuItem;
186 ListCoolBar: TGikoCoolBar;
187 ListToolBar: TToolBar;
188 BrowserCoolBar: TGikoCoolBar;
189 BrowserToolBar: TToolBar;
190 ToolButton3: TToolButton;
191 ToolButton9: TToolButton;
192 ToolButton11: TToolButton;
193 ToolButton5: TToolButton;
194 ListNameToolBar: TToolBar;
195 ListNameLabel: TLabel;
197 BrowserNameToolBar: TToolBar;
198 ItemBoardImage: TImage;
199 BrowserBoardNameLabel: TLabel;
201 BrowserNameLabel: TLabel;
208 TreeSelectNameURLPupupMenu: TMenuItem;
212 BrowserTabToolBar: TToolBar;
213 BrowserTab: TTabControl;
224 FavoriteMenu: TMenuItem;
226 BoardFavoriteAddMenu: TMenuItem;
227 ThreadFavoriteAddMenu: TMenuItem;
229 TreeSelectFavoriteAddPupupMenu: TMenuItem;
230 FavoriteTreeView: TTreeView;
231 StateIconImageList: TImageList;
233 TopRightPanel: TPanel;
236 TopCoolPanel: TPanel;
237 MainCoolBar: TGikoCoolBar;
238 MenuToolBar: TToolBar;
239 StdToolBar: TToolBar;
240 AddressToolBar: TToolBar;
241 AddressComboBox: TComboBox;
242 MoveToToolButton: TToolButton;
243 AddressImageList: TImageList;
244 AddressToolBarMenu: TMenuItem;
254 PreviewTimer: TTimer;
255 MonazillaWebPageAction1: TMenuItem;
262 ChevronPopupMenu: TPopupMenu;
266 LinkToolBar: TToolBar;
271 LinkBarPopupMenu: TPopupMenu;
273 ThreadPopupMenu: TPopupMenu;
274 MenuItem4: TMenuItem;
275 MenuItem5: TMenuItem;
276 MenuItem6: TMenuItem;
279 SelectItemNameCopyAction1: TMenuItem;
283 SelectComboBox: TComboBox;
284 MainCoolBarPopupMenu: TPopupMenu;
285 StdToolBarVisiblePMenu: TMenuItem;
286 AddressToolBarVisiblePMenu: TMenuItem;
287 LinkToolBarVisiblePMenu: TMenuItem;
308 ToolButton16: TToolButton;
315 IndividualAbon1: TMenuItem;
317 IndividualAbon2: TMenuItem;
318 AntiIndivAbonMenuItem: TMenuItem;
319 AntiIndividualAbon: TMenuItem;
323 SearchBoardName: TMenuItem;
324 TreeSelectLogDeleteSeparator: TMenuItem;
327 FavoriteTreePopupMenu: TPopupMenu;
328 FavoriteTreeRenamePopupMenu: TMenuItem;
329 FavoriteTreeNewFolderPopupMenu: TMenuItem;
331 FavoriteTreeDeletePopupMenu: TMenuItem;
332 FavoriteToolBar: TToolBar;
333 FavoriteAddToolButton: TToolButton;
334 FavoriteArrangeToolButton: TToolButton;
335 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
337 FavoriteTreeReloadPopupMenu: TMenuItem;
339 FavoriteTreeURLCopyPopupMenu: TMenuItem;
340 FavoriteTreeNameCopyPopupMenu: TMenuItem;
341 FavoriteTreeLogDeletePopupMenu: TMenuItem;
343 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
344 ToolButton20: TToolButton;
346 ExportFavoriteFileAction1: TMenuItem;
357 TreeSelectLogDeletePopupMenu: TMenuItem;
359 BBSSelectPopupMenu: TPopupMenu;
360 PlugInMenu: TMenuItem;
361 TreeSelectNamePupupMenu: TMenuItem;
362 BrowserPanel: TPanel;
364 SelectThreadSave: TMenuItem;
368 OpenLogFolder: TMenuItem;
369 Browser: TWebBrowser;
372 ResRangePopupMenu: TPopupMenu;
373 ResRangeHundPMenuItem: TMenuItem;
374 ResRangeKokoPMenuItem: TMenuItem;
375 ResRangeNewPMenuItem: TMenuItem;
376 ResRangeAllPMenuItem: TMenuItem;
377 BrowsBoradHeadAction1: TMenuItem;
378 ThreadRangePopupMenu: TPopupMenu;
385 ResRangeSelectPMenuItem: TMenuItem;
386 ListColumnPopupMenu: TPopupMenu;
395 SelectComboBoxPanel: TPanel;
396 SelectComboBoxSplitter: TImage;
397 ToolButton1: TToolButton;
400 GikoApplicationEvents: TApplicationEvents;
401 procedure FormCreate(Sender: TObject);
402 procedure FormDestroy(Sender: TObject);
403 procedure BrowserStatusTextChange(Sender: TObject;
404 const Text: WideString);
405 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
406 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
407 var AllowChange: Boolean);
408 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
410 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
411 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
412 Button: TToolButton; State: TCustomDrawState;
413 var DefaultDraw: Boolean);
414 procedure BrowserBeforeNavigate2(Sender: TObject;
415 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
416 Headers: OleVariant; var Cancel: WordBool);
417 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
418 const ARect: TRect; var DefaultDraw: Boolean);
419 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
420 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
421 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
422 procedure TreeViewDblClick(Sender: TObject);
423 procedure ListViewCustomDraw(Sender: TCustomListView;
424 const ARect: TRect; var DefaultDraw: Boolean);
425 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
426 Shift: TShiftState; X, Y: Integer);
427 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
428 procedure MessageListViewResize(Sender: TObject);
429 procedure CabinetVisible( isVisible : Boolean );
430 procedure FormResize(Sender: TObject);
431 procedure ListPopupMenuPopup(Sender: TObject);
432 procedure TreePopupMenuPopup(Sender: TObject);
433 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
434 var Cancel: WordBool);
435 procedure ListSplitterMoved(Sender: TObject);
436 procedure BrowserTabChange(Sender: TObject);
437 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
438 Shift: TShiftState; X, Y: Integer);
439 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
440 State: TDragState; var Accept: Boolean);
441 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
442 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
444 procedure BrowserDocumentComplete(Sender: TObject;
445 const pDisp: IDispatch; var URL: OleVariant);
446 procedure RoundNamePopupMenuPopup(Sender: TObject);
447 procedure FormShow(Sender: TObject);
448 procedure BrowserTabToolBarResize(Sender: TObject);
449 procedure FavoriteMenuClick(Sender: TObject);
450 procedure MainCoolBarResize(Sender: TObject);
451 procedure AddressToolBarResize(Sender: TObject);
452 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
454 procedure BrowserEnter(Sender: TObject);
455 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
456 procedure PreviewTimerTimer(Sender: TObject);
457 procedure MessageHideButtonClick(Sender: TObject);
458 procedure HistoryAllClearToolButtonClick(Sender: TObject);
459 procedure MainCoolBarBandInfo(Sender: TObject;
460 var BandInfo: PReBarBandInfoA);
461 procedure MainCoolBarChevronClick(Sender: TObject;
462 RebarChevron: PNMRebarChevron);
463 procedure ListCoolBarBandInfo(Sender: TObject;
464 var BandInfo: PReBarBandInfoA);
465 procedure ListCoolBarChevronClick(Sender: TObject;
466 RebarChevron: PNMRebarChevron);
467 procedure BrowserCoolBarBandInfo(Sender: TObject;
468 var BandInfo: PReBarBandInfoA);
469 procedure BrowserCoolBarChevronClick(Sender: TObject;
470 RebarChevron: PNMRebarChevron);
471 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
472 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
473 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
474 procedure SelectComboBoxChange(Sender: TObject);
475 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
477 procedure SelectComboBoxExit(Sender: TObject);
478 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
479 Shift: TShiftState; X, Y: Integer);
480 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
481 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
482 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
483 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
484 procedure StatusBarResize(Sender: TObject);
485 procedure SelectComboBoxEnter(Sender: TObject);
486 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
488 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
489 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
491 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
493 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
494 procedure FavoriteTreeViewDblClick(Sender: TObject);
495 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
496 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
497 Shift: TShiftState; X, Y: Integer);
498 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
499 State: TDragState; var Accept: Boolean);
500 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
502 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
503 var Handled: Boolean);
504 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
505 var Handled: Boolean);
506 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
507 var Handled: Boolean);
508 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
509 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
510 var Handled: Boolean);
511 procedure BrowserTabPopupMenuPopup(Sender: TObject);
512 procedure BrowserTabResize(Sender: TObject);
513 procedure TreeViewClick(Sender: TObject);
514 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
516 procedure FavoriteTreeViewMouseDown(Sender: TObject;
517 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
518 procedure MessagePanelResize(Sender: TObject);
520 procedure FavoriteTreeViewMouseUp(Sender: TObject;
521 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
522 procedure SelectTimerTimer(Sender: TObject);
523 procedure ListViewColumnRightClick(Sender: TObject;
524 Column: TListColumn; Point: TPoint);
525 procedure ListViewCustomDrawItem(Sender: TCustomListView;
526 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
527 procedure FormActivate(Sender: TObject);
528 procedure BrowserPanelResize(Sender: TObject);
529 procedure MenuToolBarResize(Sender: TObject);
530 procedure ListToolBarResize(Sender: TObject);
531 procedure BrowserToolBarResize(Sender: TObject);
532 procedure KokoPopupMenuPopup(Sender: TObject);
533 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
535 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
536 var AllowEdit: Boolean);
537 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
538 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
539 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
540 var Handled: Boolean);
541 procedure GikoApplicationEventsDeactivate(Sender: TObject);
542 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
543 procedure FavoriteTreeViewClick(Sender: TObject);
544 procedure FavoriteTreeViewCollapsing(Sender: TObject; Node: TTreeNode;
545 var AllowCollapse: Boolean);
546 procedure FavoriteTreeViewExpanding(Sender: TObject; Node: TTreeNode;
547 var AllowExpansion: Boolean);
548 procedure TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
549 var AllowCollapse: Boolean);
550 procedure TreeViewExpanding(Sender: TObject; Node: TTreeNode;
551 var AllowExpansion: Boolean);
552 procedure TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
553 Shift: TShiftState; X, Y: Integer);
558 FEnabledCloseButton: Boolean;
559 FClickNode: TTreeNode;
562 FPreviewBrowser: TWebBrowser;
564 FBrowserSizeHeight: Integer;
565 FBrowserSizeWidth: Integer;
566 FTabHintIndex: Integer;
567 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
568 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
569 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
570 FActiveList: TObject;
571 FActiveContent: TBrowserRecord; //
573 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
574 FTreeType: TGikoTreeType;
578 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
579 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
580 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
581 IsDraggingSelectComboBox : Boolean;
582 DraggingSelectComboBoxPosition : TPoint;
583 FSearchDialog: TSearchDialog;
584 FDropSpaceNode: TTreeNode;
585 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
586 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
587 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
588 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
589 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¦
590 FOddColor : TColor; ///<
\82»
\82Ì
\90F
591 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
592 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
593 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
594 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
595 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
596 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
598 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
600 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
601 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
602 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ñ
603 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
604 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
605 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
606 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
607 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
609 procedure ListDoubleClick(Shift: TShiftState);
610 function Hook(var Message: TMessage): Boolean;
611 procedure AddRoundNameMenu(MenuItem: TMenuItem);
612 procedure SetMenuFont;
613 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
614 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
615 procedure FavoriteClick(Sender: TObject); overload;
616 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
617 function OnDocumentContextMenu(Sender: TObject): WordBool;
618 procedure ShowTextPopup;
619 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
620 procedure MenuBarChevronMenu;
621 procedure LinkBarChevronMenu;
622 procedure ToolBarChevronMenu(ToolBar: TToolBar);
623 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
624 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
625 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
626 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
627 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
628 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
629 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
630 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
631 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
633 procedure SetListViewBackGroundColor(value: TColor);
634 procedure BBSMenuItemOnClick( Sender : TObject );
635 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
636 procedure SaveCoolBarSettings;
637 procedure SaveMainCoolBarSettings;
638 procedure SaveBoardCoolBarSettings;
639 procedure SaveBrowserCoolBarSettings;
640 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
641 procedure LoadCoolBarSettings;
642 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
643 procedure OnMinimize;
644 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
645 procedure OnMinimized;
646 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
647 procedure TreeClick( Node : TTreeNode );
648 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
649 procedure TreeDoubleClick( Node : TTreeNode );
650 ///
\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
651 procedure SetBBSMenu;
653 function GetTabURLs(AStringList: TStringList) : Boolean;
654 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
655 procedure ListColumnPopupMenuOnClick( Sender : TObject );
656 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
657 procedure SetSelectWord( const text : string );
658 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
659 function GetScreenCursor(): TCursor;
660 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
661 procedure SetScreenCursor(Cursor : TCursor);
662 //!
\83A
\83N
\83V
\83\87\83\93\82Ì
\83`
\83F
\83b
\83N
\8fó
\91Ô
\82Ì
\8f\89\8aú
\89»
663 procedure InitActionChecked();
664 //!
\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¬
665 procedure CreateControlThread();
666 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
667 procedure CreateBrowsers(count: Integer);
669 procedure CreateParams(var Params: TCreateParams); override;
670 procedure WndProc(var Message: TMessage); override;
671 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
672 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
673 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
677 LastRoundTime: TDateTime;
678 BrowserNullTab: TBrowserRecord;
679 FControlThread: TThreadControl;
680 procedure MoveToURL(const inURL: string);
681 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
683 function GetHttpState: Boolean;
684 procedure SetEnabledCloseButton(Enabled: Boolean);
685 function GetTreeNode(Data: TObject): TTreeNode;
686 procedure ListViewAllSelect;
687 property ListStyle: TViewStyle read FListStyle write FListStyle;
688 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
689 property ViewType: TGikoViewType read FViewType write FViewType;
690 property NameCookie: string read FNameCookie write FNameCookie;
691 property MailCookie: string read FMailCookie write FMailCookie;
692 property ClickNode: TTreeNode read FClickNode write FClickNode;
693 property TreeType: TGikoTreeType read FTreeType write FTreeType;
694 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
695 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
696 property SelectResWord : string read FSelectResWord write FSelectResWord;
697 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
698 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
699 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
700 property ToolBarSettingSender : TToolBarSettingSenderType
701 read FToolBarSettingSender write FToolBarSettingSender;
702 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
703 property SortIndex: Integer read FSortIndex write FSortIndex;
704 property SortOrder: Boolean read FSortOrder write FSortOrder;
705 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
706 property WorkCount: Integer read FWorkCount write FWorkCount;
707 procedure SetContent(inThread: TBrowserRecord);
708 function GetActiveContent: TThreadItem;
709 function GetActiveList: TObject;
711 procedure SetListViewType(AViewType: TGikoViewType); overload;
712 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
713 procedure PlaySound(SoundEventName: string);
714 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
715 procedure ClearHistory;
716 procedure SaveHistory;
717 procedure LoadHistory;
718 procedure ShowBBSTree( inBBS : TBBS );
719 procedure ShowBBSTreeOld( inBBS : TBBS );
720 procedure ShowHistoryTree;
721 procedure SetHistoryTreeNode;
722 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
723 procedure SetBrowserTabState;
724 procedure SetToolBarPopup;
725 procedure ShowFavoriteAddDialog( Item : TObject );
726 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
727 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
728 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
729 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
730 property OddColor : TColor read FOddColor write FOddColor;
731 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
732 procedure OnPlugInMenuItem( Sender : TObject );
733 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
734 /// 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Å
735 procedure ActiveListColumnSave;
736 procedure SetActiveList(Obj: TObject);
737 property ActiveList: TObject read GetActiveList write SetActiveList;
738 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
739 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
740 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
741 procedure IndividualAbonID(Atype : Integer);
742 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
743 procedure IndividualAbon(Atag, Atype : Integer);
744 //
\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Ý
745 procedure RepaintAllTabsBrowser();
746 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
747 procedure SetLinkBar;
748 procedure FavoriteBrowseFolder( node: TTreeNode );
749 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
750 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
751 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
752 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
753 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
754 procedure DeleteHistory( threadItem: TThreadItem );
755 //
\83^
\83u
\82ð
\8dí
\8f\9c
756 procedure DeleteTab(ThreadItem: TThreadItem); overload;
757 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
758 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
759 procedure BrowserMovement(const AName: string);
760 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
761 function GetMainForm(): TComponent;
762 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
763 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
764 procedure OnGestureStart(Sender: TObject);
765 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
766 procedure OnGestureMove(Sender: TObject);
767 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
768 procedure OnGestureEnd(Sender: TObject);
769 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
770 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
771 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
772 function EditorFormExists(): boolean;
773 //
\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é
774 procedure AllEditroFormNameTextClearClear();
775 //
\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é
776 procedure AllEditroFormMailTextClearClear();
777 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
778 procedure SelectListItem(List: TList);
780 function SaveTabURLs : Boolean;
781 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
782 function LoadTabURLs : Boolean;
783 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
784 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
786 procedure ModifySelectList;
788 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
790 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
792 procedure SetSelectRoundName(Sender: TObject);
794 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
796 function WebBrowserClick(Sender: TObject): WordBool;
797 //!
\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é
798 procedure SetSelectComboBox();
800 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
803 TFavoriteMenuItem = class(TMenuItem)
807 property Data: Pointer read FData write FData;
810 TBBSMenuItem = class(TMenuItem)
814 property Data: Pointer read FData write FData;
817 TLinkToolButton = class(TToolButton)
821 property Data: Pointer read FData write FData;
830 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
831 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
832 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
833 FavoriteArrange, AddressHistory, Preview, Gesture,
834 About, Option, Round, Splash, Sort, ListSelect, Imm,
835 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
836 HTMLCreate, ListViewUtils, GikoDataModule;
839 BLANK_HTML: string = 'about:blank';
840 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
842 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
843 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
844 HTML_FILE_NAME = 'temp_preview.html';
845 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
846 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
847 //
\83\81\83b
\83Z
\81[
\83WID
848 USER_TREECLICK = WM_USER + 2000;
849 USER_RESIZED = WM_USER + 2001;
850 USER_MINIMIZED = WM_USER + 2002;
851 USER_SETLINKBAR = WM_USER + 2003;
852 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
855 procedure TGikoForm.CreateParams(var Params: TCreateParams);
858 if FormStyle in [fsNormal, fsStayOnTop] then begin
859 if BorderStyle in [bsSingle, bsSizeable] then begin
860 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
861 Params.WndParent := 0;
866 procedure TGikoForm.FormCreate(Sender: TObject);
868 TVS_NOTOOLTIPS = $0080;
874 wp: TWindowPlacement;
879 Writeln('============================================================');
880 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
882 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
883 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¢');
884 Writeln('============================================================');
886 FTreeType := gttNone;
887 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
889 Application.HookMainWindow(Hook);
890 FIsIgnoreResize := rtResizing;
892 FSearchDialog := nil;
893 CreateBrowsers(BROWSER_COUNT);
895 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
898 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
899 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
901 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
902 //AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
903 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
905 EnabledCloseButton := True;
907 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
908 ListView.ViewStyle := GikoSys.Setting.ListStyle;
910 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
912 AnimePanel.Left := 0;
914 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
916 //
\83L
\83\83\83r
\83l
\83b
\83g
917 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
919 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
920 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
921 GikoDM.MsgBarVisibleActionExecute(nil);
922 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
924 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
925 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
926 GikoDM.StatusBarVisibleActionExecute(nil);
928 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
929 TreeView.Items.BeginUpdate;
930 FavoriteTreeView.Items.BeginUpdate;
931 ListView.Items.BeginUpdate;
933 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
934 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
935 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
936 TreeView.Color := GikoSys.Setting.CabinetBackColor;
937 FavoriteTreeView.Font.Assign(TreeView.Font);
938 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
940 ListView.Font.Name := GikoSys.Setting.ListFontName;
941 ListView.Font.Size := GikoSys.Setting.ListFontSize;
942 ListView.Font.Color := GikoSys.Setting.ListFontColor;
943 ListView.Font.Style := [];
944 if GikoSys.Setting.ListFontBold then
945 ListView.Font.Style := [fsbold];
946 if GikoSys.Setting.ListFontItalic then
947 ListView.Font.Style := ListView.Font.Style + [fsitalic];
949 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
950 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
951 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
952 FOddColor := GikoSys.Setting.OddColor;
955 TreeView.Items.EndUpdate;
956 FavoriteTreeView.Items.EndUpdate;
957 ListView.Items.EndUpdate;
959 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
960 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
962 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
963 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
964 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
965 BrowserTab.Font.Style := [];
966 if GikoSys.Setting.BrowserTabFontBold then
967 BrowserTab.Font.Style := [fsBold];
968 if GikoSys.Setting.BrowserTabFontItalic then
969 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
970 FDragWFirst := false;
971 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
973 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
974 ProgressBar.Parent := StatusBar;
975 ProgressBar.Top := 2;
976 ProgressBar.Left := 0;
977 ProgressBar.Width := StatusBar.Panels[0].Width;
978 ProgressBar.Height := StatusBar.Height - 2;
979 ProgressBar.Position := 0;
981 //
\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Æ)
982 InitializeBoardPlugIns;
984 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
985 GikoSys.ListBoardFile;
987 //
\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è
988 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
990 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
991 for i := Length(BBSs) - 1 downto 0 do begin
992 if not BBSs[i].IsBoardFileRead then
993 GikoSys.ReadBoardFile(BBSs[i]);
995 if SplashWindow <> nil then begin
996 SplashWindow.ProgressBar.StepBy(20);
1000 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1001 RoundList := TRoundList.Create;
1002 RoundList.LoadRoundBoardFile;
1003 RoundList.LoadRoundThreadFile;
1005 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1006 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1007 Style := Style or TVS_NOTOOLTIPS;
1008 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1010 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1011 TreeView.Align := alClient;
1012 FavoriteTreeView.Align := alClient;
1013 FavoriteTreeView.Visible := False;
1015 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1018 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1019 wp.length := sizeof(wp);
1020 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1021 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1022 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1023 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1024 wp.showCmd := SW_HIDE;
1025 SetWindowPlacement(Handle, @wp);
1028 if GikoSys.Setting.WindowMax then
1029 WindowState := wsMaximized;
1031 //
\83M
\83R
\83A
\83j
\83\81
1033 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1034 if FileExists(FileName) then
1035 Animate.FileName := FileName;
1043 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1044 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1045 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1048 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1049 FHistoryList := TList.Create;
1051 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1054 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1055 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1056 FavoriteDM.ReadFavorite;
1058 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1059 GikoDM.ArrangeAction.Execute;
1061 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1062 case GikoSys.Setting.ListWidthState of
1064 ViewPanel.Width := 1;
1065 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1066 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1069 ViewPanel.Width := GikoSys.Setting.ListWidth;
1070 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1071 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1074 ViewPanel.Width := GikoSys.Setting.ListWidth;
1075 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1076 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1080 case GikoSys.Setting.ListHeightState of
1082 ViewPanel.Height := 1;
1083 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1084 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1087 ViewPanel.Height := GikoSys.Setting.ListHeight;
1088 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1089 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1092 ViewPanel.Height := GikoSys.Setting.ListHeight;
1093 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1094 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1099 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1100 CreateControlThread();
1102 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1103 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1105 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1108 BrowserBoardNameLabel.Caption := '';
1109 BrowserNameLabel.Caption := '';
1112 FTabHintIndex := -1;
1114 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1115 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1116 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1118 MakeDefaultINIFile();
1119 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1120 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1121 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1122 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1125 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1126 SetSelectComboBox();
1128 //
\83A
\83h
\83\8c\83X
\83o
\81[
1129 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1131 //
\83\8a\83\93\83N
\83o
\81[
1133 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1135 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1136 if not FileExists(GikoSys.GetBoardFileName) then begin
1137 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
1138 + '
\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
1139 + '
\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';
1140 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1141 GikoDM.NewBoardAction.Execute;
1144 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1145 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1147 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1148 // FLastRoundTime := 0;
1151 FHint := TResPopup.Create(Self);
1153 ListView.OnData := TListViewUtils.ListViewData;
1155 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1156 CabinetVisible( False );
1157 if GikoSys.Setting.CabinetVisible then begin
1158 i := CabinetSelectPopupMenu.Items.Count - 1;
1159 if GikoSys.Setting.CabinetIndex = i - 1 then
1160 GikoDM.CabinetHistoryAction.Execute
1161 else if GikoSys.Setting.CabinetIndex = i then
1162 GikoDM.CabinetFavoriteAction.Execute
1164 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1165 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1166 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1167 FIsIgnoreResize := rtResizing;
1168 GikoDM.CabinetBBSAction.Execute;
1171 ShowBBSTreeOld( BBSs[ 0 ] );
1172 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1175 //
\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
1176 for i := 1 to ParamCount do begin
1177 MoveToURL(ParamStr(i));
1180 s := GikoSys.FAbon.NGwordname;
1181 StatusBar.Panels[2].Text := s;
1182 StatusBar.Panels[2].Width := Max(StatusBar.Canvas.TextWidth(s), 100);
1183 StatusBarResize(Sender);
1185 dummy1.Caption := ItemReservPMenu.Caption;
1186 dummy1.Hint := ItemReservPMenu.Hint;
1188 //Samba24
\82Ì
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
1189 GikoSys.SambaFileExists();
1191 {$IFDEF SPAM_FILTER_ENABLED}
1192 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1193 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1196 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1197 MouseGesture := TMouseGesture.Create;
1198 GikoSys.Setting.Gestures.LoadGesture(
1199 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1200 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1201 MouseGesture.OnGestureStart := OnGestureStart;
1202 MouseGesture.OnGestureMove := OnGestureMove;
1203 MouseGesture.OnGestureEnd := OnGestureEnd;
1204 if GikoSys.Setting.GestureEnabled then
1205 MouseGesture.SetHook( Handle );
1207 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1208 GikoSys.Setting.SetMessages;
1210 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1211 if GikoSys.Setting.AutoLogin then
1212 GikoDM.LoginAction.Execute;
1214 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1216 //
\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è
1217 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1218 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1222 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1223 procedure TGikoForm.SaveCoolBarSettings;
1226 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1228 SaveMainCoolBarSettings;
1229 SaveBoardCoolBarSettings;
1230 SaveBrowserCoolBarSettings;
1233 procedure TGikoForm.SaveMainCoolBarSettings;
1238 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1239 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1240 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1241 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1242 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1243 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1246 procedure TGikoForm.SaveBoardCoolBarSettings;
1251 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1252 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1253 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1254 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1255 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1256 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1259 procedure TGikoForm.SaveBrowserCoolBarSettings;
1264 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1265 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1266 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1267 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1268 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1269 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1272 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1273 procedure TGikoForm.LoadCoolBarSettings;
1279 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1280 MainCoolBar.Bands.BeginUpdate;
1282 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1283 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1284 CoolSet := GikoSys.Setting.MainCoolSet[i];
1285 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1286 FIsIgnoreResize := rtNone;
1287 SaveCoolBarSettings;
1290 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1291 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1292 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1295 MainCoolBar.Bands.EndUpdate;
1298 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1299 ListCoolBar.Bands.BeginUpdate;
1301 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1302 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1303 CoolSet := GikoSys.Setting.ListCoolSet[i];
1304 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1305 FIsIgnoreResize := rtNone;
1306 SaveCoolBarSettings;
1309 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1310 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1311 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1314 ListCoolBar.Bands.EndUpdate;
1317 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1318 BrowserCoolBar.Bands.BeginUpdate;
1320 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1321 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1322 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1323 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1324 FIsIgnoreResize := rtNone;
1325 SaveCoolBarSettings;
1328 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1329 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1330 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1333 BrowserCoolBar.Bands.EndUpdate;
1338 procedure TGikoForm.FormShow(Sender: TObject);
1340 if FStartUp then begin
1341 ShowWindow(Application.Handle, SW_HIDE);
1343 //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½
1344 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1345 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1346 GikoDM.StdToolBarVisibleActionExecute( nil );
1347 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1348 GikoDM.AddressBarVisibleActionExecute( nil );
1349 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1350 GikoDM.LinkBarVisibleActionExecute( nil );
1351 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1352 GikoDM.ListToolBarVisibleActionExecute( nil );
1353 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1354 GikoDM.ListNameBarVisibleActionExecute( nil );
1355 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1356 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1357 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1358 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1360 //
\83u
\83\89\83E
\83U
\83^
\83u
1361 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1362 GikoDM.BrowserTabVisibleActionExecute(nil);
1364 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1365 GikoDM.BrowserTabTopAction.Checked := True;
1366 GikoDM.BrowserTabTopActionExecute(nil);
1368 GikoDM.BrowserTabBottomAction.Checked := True;
1369 GikoDM.BrowserTabBottomActionExecute(nil);
1372 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1373 GikoDM.BrowserTabTabStyleAction.Checked := True;
1374 GikoDM.BrowserTabTabStyleActionExecute(nil);
1375 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1376 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1377 GikoDM.BrowserTabButtonStyleActionExecute(nil);
1379 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1380 GikoDM.BrowserTabFlatStyleActionExecute(nil);
1383 // ListView
\82Ì
\83w
\83b
\83_
\83h
\83\89\83b
\83O
1384 // ListView.FullDrag := True;
1386 // CoolBar
\95\9c\8c³
1387 LoadCoolBarSettings;
1389 //
\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é
1390 // ResetBandInfo( ListCoolBar, ListToolBar );
1391 FIsIgnoreResize := rtNone;
1392 //
\83c
\81[
\83\8b\83o
\81[
\82Ì
\8dX
\90V
\82ð
\8fI
\82¦
\82½
\8cã
\82É
\82â
\82ç
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Ì
\82©
\82à
1393 //
\83A
\83N
\83V
\83\87\83\93\82Ì
\83`
\83F
\83b
\83N
\8fó
\91Ô
\82ð
\8f\89\8aú
\89»
1394 InitActionChecked();
1396 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1397 if GikoSys.Setting.TabAutoLoadSave then begin
1398 GikoDM.TabAutoLoadAction.Execute;
1400 //
\82É
\82¿
\82á
\82ñ
\8cê
\88Ä
\93à
\83T
\83|
\81[
\83g
\8b@
\94\
1401 if GikoSys.Setting.GengoSupport then begin
1410 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1412 // if GikoForm.WindowState <> wsMinimized then
1413 // SaveCoolBarSettings;
1414 if ( GikoSys.Setting.ShowDialogForEnd ) and
1415 (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
1420 if GikoSys.Setting.TabAutoLoadSave then begin
1421 GikoDM.TabAutoSaveAction.Execute;
1424 { //2ch
\8c¾
\8cȩ̂²ÙFree
1425 if GikoSys.Setting.Gengo <> nil then begin
1426 GikoSys.Setting.Gengo.Free;
1429 Application.UnhookMainWindow(Hook);
1430 Application.Terminate;
1433 procedure TGikoForm.FormDestroy(Sender: TObject);
1436 // CoolSet: TCoolSet;
1437 wp : TWindowPlacement;
1440 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1442 MouseGesture.UnHook;
1446 ActiveListColumnSave;
1450 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1451 wp.length := sizeof(wp);
1452 GetWindowPlacement(Handle, @wp);
1453 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1454 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1455 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1456 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1457 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1459 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1460 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1461 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1462 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1463 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1464 if GikoDM.ArrangeAction.Checked then
1465 GikoSys.Setting.ListOrientation := gloVertical
1467 GikoSys.Setting.ListOrientation := gloHorizontal;
1468 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1473 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1474 if not GikoSys.Setting.ResRangeHold then
1475 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1478 if WindowState <> wsNormal then
1479 WindowState := wsNormal;
1480 SaveCoolBarSettings;
1482 GikoSys.Setting.WriteWindowSettingFile;
1483 GikoSys.Setting.WriteNameMailSettingFile;
1486 //
\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è
1487 //
\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¢
1489 //
\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
1491 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1494 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1496 //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é
1497 FavoriteDM.WriteFavorite;
1501 LockWindowUpdate(Self.Handle);
1503 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1504 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1505 GikoSys.Setting.ShowDialogForAllTabClose := false;
1506 GikoDM.AllTabCloseAction.Execute;
1507 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1511 for i := FBrowsers.Count - 1 downto 0 do begin
1512 TWebBrowser(FBrowsers[i]).Free;
1515 FBrowsers.Capacity := 0;
1520 if BrowserNullTab <> nil then begin
1521 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1522 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1524 BrowserNullTab.Free;
1530 TreeView.Items.BeginUpdate;
1531 TreeView.Items.GetFirstNode.Free;
1532 TreeView.Items.Clear;
1533 TreeView.Items.EndUpdate;
1537 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1539 //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
1540 //AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.AddressHistoryCount);
1541 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1545 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1559 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1561 RoundList.SaveRoundFile;
1575 FControlThread.Terminate;
1576 FControlThread.WaitFor;
1580 FControlThread.Free;
1583 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1584 // 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Å
1585 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1586 for i := Length(BoardGroups) - 1 downto 0 do begin
1587 //BoardGroups[i].Clear;
1588 BoardGroups[i].Free;
1592 for i := Length( BBSs ) - 1 downto 0 do begin
1593 if BBSs[ i ] <> nil then
1601 if FEvent <> nil then
1605 if FHint <> nil then begin
1606 FHint.ReleaseHandle;
1611 if TPreviewBrowser <> nil then begin
1612 FPreviewBrowser.Free;
1613 FPreviewBrowser := nil;
1617 LockWindowUpdate(0);
1620 //
\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
1621 procedure TGikoForm.SetBBSMenu;
1624 item : TBBSMenuItem;
1627 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1628 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1630 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1631 CabinetSelectPopupMenu.Items[ i ].Free;
1632 CabinetMenu.Items[ i ].Free;
1633 BBSSelectPopupMenu.Items[ i ].Free;
1639 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1640 for i := Length( BBSs ) - 1 downto 0 do begin
1642 item := TBBSMenuItem.Create( PopupMenu );
1643 item.Caption := BBSs[ i ].Title;
1644 item.Data := BBSs[ i ];
1645 item.OnClick := BBSMenuItemOnClick;
1646 CabinetSelectPopupMenu.Items.Insert( 0, item );
1647 item := TBBSMenuItem.Create( PopupMenu );
1648 item.Caption := BBSs[ i ].Title;
1649 item.Data := BBSs[ i ];
1650 item.OnClick := BBSMenuItemOnClick;
1651 CabinetMenu.Insert( 0, item );
1652 item := TBBSMenuItem.Create( PopupMenu );
1653 item.Caption := BBSs[ i ].Title;
1654 item.Data := BBSs[ i ];
1655 item.OnClick := BBSMenuItemOnClick;
1656 BBSSelectPopupMenu.Items.Insert( 0, Item );
1663 procedure TGikoForm.ReloadBBS;
1668 LockWindowUpdate(Self.Handle);
1670 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1671 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1672 GikoSys.Setting.ShowDialogForAllTabClose := false;
1673 GikoDM.AllTabCloseAction.Execute;
1674 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1676 SetContent(BrowserNullTab);
1677 //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
1678 TreeView.Items.Clear;
1680 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1682 RoundList.SaveRoundFile;
1685 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1691 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1698 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1700 FavoriteDM.WriteFavorite;
1705 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1706 for i := Length(BoardGroups) - 1 downto 0 do begin
1708 BoardGroups[i].Free;
1714 for i := Length( BBSs ) - 1 downto 0 do begin
1715 if BBSs[ i ] <> nil then
1724 FTreeType := gttNone;
1726 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1728 //
\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Æ)
1729 InitializeBoardPlugIns;
1731 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1733 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1734 for i := Length(BBSs) - 1 downto 0 do begin
1735 if not BBSs[i].IsBoardFileRead then
1736 GikoSys.ReadBoardFile(BBSs[i]);
1739 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1742 ShowBBSTree( BBSs[ 0 ] );
1744 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1747 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1748 FavoriteDM.ReadFavorite;
1752 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1753 RoundList.LoadRoundBoardFile;
1754 RoundList.LoadRoundThreadFile;
1756 LockWindowUpdate(0);
1758 GikoDM.TabsOpenAction.Execute;
1762 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1770 threadItem : TThreadItem;
1772 Protocol, Host, Path, Document, Port, Bookmark: string;
1777 ActiveFileName: string;
1782 if not( TObject(Sender) is TWebBrowser )then
1786 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1787 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1788 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1795 if PreviewTimer.Enabled then
1796 PreviewTimer.Enabled := False;
1797 Application.CancelHint;
1799 if GetActiveContent <> nil then
1800 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1802 ActiveFileName := '';
1804 FActiveContent := nil;
1808 StatusBar.Panels[1].Text := Text;
1810 if FHint <> nil then begin
1811 FHint.ReleaseHandle;
1814 if FPreviewBrowser <> nil then
1815 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1817 if not GikoSys.Setting.UnActivePopup then
1818 if not GikoForm.Active then
1821 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1822 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1825 Ext := AnsiLowerCase(ExtractFileExt(Text));
1826 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
1827 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1828 if FPreviewBrowser = nil then begin
1829 FPreviewBrowser := TPreviewBrowser.Create(Self);
1830 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1831 TOleControl(FPreviewBrowser).Parent := nil;
1833 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1834 FPreviewURL := Text;
1835 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1836 PreviewTimer.Enabled := True;
1837 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
1838 if Pos('mailto:', Text) = 1 then begin
1839 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
1840 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1842 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1843 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1844 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1845 if (Assigned(e)) then begin
1846 tmp2 := ZenToHan(e.Get_outerText);
1847 if (GikoSys.IsNumeric(tmp2)) then begin
1848 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1849 wkIntSt := StrToInt(tmp2);
1850 wkIntTo := StrToInt(tmp2);
1851 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1852 FHint.PopupType := gptThread;
1853 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1855 FHint.PopupType := gptRaw;
1860 threadItem := GetActiveContent;
1861 URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
1862 PathRec := Gikosys.Parse2chURL2(URL);
1863 if (PathRec.FNoParam) then begin
1867 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1869 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1871 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1873 URL := GikoSys.GetBrowsableThreadURL( URL );
1874 wkIntSt := PathRec.FSt;
1875 wkIntTo := PathRec.FTo;
1877 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1880 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1882 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1884 end else if wkIntSt > wkIntTo then begin
1889 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1894 threadItem := BBSsFindThreadFromURL( URL );
1896 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1897 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1898 if board <> nil then begin
1899 if not board.IsThreadDatRead then
1900 GikoSys.ReadSubjectFile( board );
1901 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1905 if threadItem <> nil then begin
1906 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1907 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1908 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1912 FHint.PopupType := gptThread;
1913 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1918 if FHint.PopupType = gptRaw then begin
1919 if FHint.Caption <> '' then
1922 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
1928 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
1932 FEnabledCloseButton := Enabled;
1933 SysMenu := GetSystemMenu(Handle, False);
1935 if Enabled then begin
1936 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
1938 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
1941 DrawMenuBar(Handle);
1944 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
1945 var AllowChange: Boolean);
1947 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
1948 // if FTreeType = gtt2ch then
1949 // FSortIndex := -1;
1952 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
1953 Shift: TShiftState);
1957 if GetActiveList is TBoard then begin
1959 VK_BACK:; // UpFolderButtonClick(Sender);
1960 VK_SPACE: ListDoubleClick(Shift);
1961 VK_RETURN: ListClick;
1964 if ListView.Selected <> nil then begin
1965 pos.X := ListView.Column[ 0 ].Width;
1966 pos.Y := ListView.Selected.Top;
1968 pos.X := ListView.Left;
1969 pos.Y := ListView.Top;
1971 Windows.ClientToScreen( ListView.Handle, pos );
1972 ListPopupMenu.Popup( pos.X, pos.Y );
1975 end else begin // TBBS, TCategory
1977 VK_BACK:; // UpFolderButtonClick(Sender);
1978 VK_SPACE: ListClick;
1979 VK_RETURN: ListDoubleClick(Shift);
1982 if ListView.Selected <> nil then begin
1983 pos.X := ListView.Column[ 0 ].Width;
1984 pos.Y := ListView.Selected.Top;
1986 pos.X := ListView.Left;
1987 pos.Y := ListView.Top;
1989 Windows.ClientToScreen( ListView.Handle, pos );
1990 ListPopupMenu.Popup( pos.X, pos.Y );
1996 function TGikoForm.GetHttpState: Boolean;
1998 Result := FHttpState;
2001 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2002 Column: TListColumn);
2007 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2009 if TObject( FActiveList ) is TBBS then
2010 orderList := GikoSys.Setting.BBSColumnOrder
2011 else if TObject( FActiveList ) is TCategory then
2012 orderList := GikoSys.Setting.CategoryColumnOrder
2013 else if TObject( FActiveList ) is TBoard then
2014 orderList := GikoSys.Setting.BoardColumnOrder
2018 id := Integer( orderList[ idx ] );
2020 if FSortIndex = id then
2021 FSortOrder := not FSortOrder
2023 FSortOrder := id = 0;
2026 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
2029 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2030 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2034 DefaultDraw := True;
2036 DefaultDraw := False;
2037 if (cdsSelected in State) or (cdsHot in State) then begin
2038 Sender.Canvas.Brush.Color := clHighlight;
2039 Sender.Canvas.Font.Color := clHighlightText;
2041 Sender.Canvas.Brush.Color := clBtnFace;
2042 Sender.Canvas.Font.Color := clBtnText;
2044 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2045 Sender.Canvas.FillRect(ARect);
2046 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2049 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2054 Nodes := TreeView.Items;
2056 for i := 0 to Nodes.Count - 1 do begin
2057 if Nodes.Item[i].Data = Data then begin
2058 Result := Nodes.Item[i];
2065 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2066 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2067 Headers: OleVariant; var Cancel: WordBool);
2072 kMenuName: string = 'menu:';
2075 if Pos(kMenuName, URL) <> 0 then begin
2076 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2078 if not GikoSys.IsNumeric(sNo) then Exit;
2082 KokoPopupMenu.Tag := StrToInt(sNo);
2083 KokoPopupMenu.Popup(p.x, p.y);
2084 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2085 Cancel := not GikoSys.Setting.OpenMailer;
2090 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2091 const ARect: TRect; var DefaultDraw: Boolean);
2095 IsBoardNode: Boolean;
2101 Category: TCategory;
2105 DefaultDraw := True;
2107 if FTreeType = gttHistory then Exit;
2109 TreeView.Canvas.Font.Color := clBlue;
2110 IsBoardNode := False;
2111 for i := 0 to TreeView.Items.Count - 1 do begin
2113 if not TreeView.Items[i].IsVisible then
2116 if TObject(TreeView.Items[i].Data) is TCategory then begin
2117 if TreeView.Items[i].Expanded then
2120 IsBoardNode := False;
2121 Category := TCategory(TreeView.Items[i].Data);
2122 for j := 0 to Category.Count - 1 do begin
2123 Board := Category.Items[j];
2124 if Board <> nil then begin
2125 if Board.UnRead > 0 then begin
2133 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2134 IsBoardNode := True;
2135 Board := TBoard(TreeView.Items[i].Data);
2137 Cnt := Board.UnRead;
2143 Bitmap := TBitmap.Create;
2145 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2146 Bitmap.Canvas.Font.Style := [fsBold];
2147 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2152 NodeRect := TreeView.Items[i].DisplayRect(True);
2155 CntText := '(' + IntToStr(Cnt) + ')'
2156 else if Cnt = 1 then
2160 TextWidth := TreeView.Canvas.TextWidth(CntText);
2162 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2164 NodeRect.Left + NodeWidth + TextWidth + 8,
2166 DrawText(TreeView.Canvas.Handle,
2170 DT_SINGLELINE or DT_VCENTER);
2172 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2175 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2176 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2179 Category: TCategory;
2182 DefaultDraw := True;
2184 if FTreeType = gttHistory then Exit;
2186 TreeView.Canvas.Font.Style := [];
2187 if Node <> nil then begin
2188 if TObject(Node.Data) is TCategory then begin
2189 Category := TCategory(Node.Data);
2190 for i := 0 to Category.Count - 1 do begin
2191 Board := Category.Items[i];
2192 if Board <> nil then begin
2193 if Board.UnRead > 0 then begin
2194 TreeView.Canvas.Font.Style := [fsBold];
2199 end else if TObject(Node.Data) is TBoard then begin
2200 Board := TBoard(Node.Data);
2201 if Board.UnRead > 0 then
2202 TreeView.Canvas.Font.Style := [fsBold];
2207 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2209 TreeView.Invalidate;
2211 if TObject(Node.Data) is TBBS then begin
2212 TBBS(Node.Data).NodeExpand := True;
2213 end else if TObject(Node.Data) is TCategory then begin
2214 TCategory(Node.Data).NodeExpand := True;
2215 end else if TObject(Node.Data) is TBoard then begin
2216 TBoard(Node.Data).NodeExpand := True;
2220 procedure TGikoForm.ListViewAllSelect;
2225 // *************************************************************************
2226 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82Ì
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
2227 // *************************************************************************
2228 procedure TGikoForm.TreeViewDblClick(Sender: TObject);
2233 pos := FMouseDownPos;
2234 if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(pos.X, pos.Y)) then begin
2235 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
2236 rect := FClickNode.DisplayRect(true);
2237 if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
2238 ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
2239 TreeDoubleClick( FClickNode );
2245 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2247 AddMessageList(Msg, nil, Icon);
2250 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2254 boardPlugIn : TBoardPlugIn;
2256 browserRec : TBrowserRecord;
2260 if Item.DownType = gdtBoard then
2261 ATitle := Item.Board.Title
2263 ATitle := Item.ThreadItem.Title;
2265 ATitle := GikoSys.Setting.GetMessage(Ord(gmUnKnown));
2267 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2269 if Item.DownType = gdtBoard then begin
2272 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureItiran)), nil, gmiOK);
2273 if GetActiveList = Item.Board then begin
2275 SetActiveList(Item.Board);
2277 Item.Board.Modified := True;
2278 Item.Board.IsThreadDatRead := True;
2280 end else if Item.DownType = gdtThread then begin
2283 Item.ThreadItem.NewArrival := True;
2284 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2285 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2286 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2287 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2288 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2289 Item.ThreadItem.Title := Res.FTitle;
2290 ATitle := Item.ThreadItem.Title;
2291 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2292 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2293 ATitle := Res.FTitle;
2295 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2296 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2297 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2301 if GikoSys.Setting.BrowserTabVisible then begin
2302 if GetActiveContent = Item.ThreadItem then
2303 browserRec := InsertBrowserTab(Item.ThreadItem)
2304 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2305 browserRec := InsertBrowserTab(Item.ThreadItem, True)
2307 browserRec := InsertBrowserTab(Item.ThreadItem, False);
2308 if browserRec.Thread = BrowserNullTab.Thread then begin
2309 browserRec.Movement := BrowserNullTab.Movement;
2310 BrowserNullTab.Movement := '';
2313 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2314 InsertBrowserTab(Item.ThreadItem);
2317 Application.ProcessMessages;
2319 if Item.State = gdsComplete then begin
2321 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureSyutoku)), nil, gmiOK);
2325 PlaySound('NewDiff');
2326 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmSureDiff)), nil, gmiOK);
2331 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2332 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2333 Item.ThreadItem.Round := False;
2334 //Item.ThreadItem.RoundName := '';
2335 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);
2338 //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
2339 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2340 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2341 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2342 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2343 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2344 case GikoForm.ViewType of
2345 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2346 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2347 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2348 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2353 end else if Item.State = gdsNotModify then begin
2355 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2356 //SetContent(Item.ThreadItem);
2357 InsertBrowserTab(Item.ThreadItem);
2359 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmNotMod)), nil, gmiSAD);
2360 PlaySound('NoChange');
2361 Screen.Cursor := crDefault;
2362 end else if Item.State = gdsAbort then begin
2364 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmAbort)), nil, gmiOK);
2365 end else if Item.State = gdsError then begin
2370 AddMessageList(ATitle + ' ' + GikoSys.Setting.GetMessage(Ord(gmError)) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2371 // if Item.ResponseCode = 302 then
2372 // 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);
2378 if FWorkCount < 0 then FWorkCount := 0;
2379 if FWorkCount = 0 then begin
2381 Animate.Active := False;
2383 Screen.Cursor := crDefault;
2390 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2392 // SetProgressValue(Number, 0, AWorkCountMax);
2393 // ProgressBar.Visible := True;
2394 ProgressBar.Position := 0;
2395 ProgressBar.Max := AWorkCountMax;
2396 FDownloadTitle := AWorkTitle;
2397 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2398 FDownloadMax := AWorkCountMax;
2401 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2403 ProgressBar.Position := 0;
2404 if FDownloadMax <> 0 then
2405 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2408 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2410 ProgressBar.Position := AWorkCount;
2411 // SetProgressValue(Number, AWorkCount);
2412 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2415 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2417 ListItem: TListItem;
2419 MessageListView.Items.BeginUpdate;
2421 ListItem := MessageListView.Items.Add;
2422 ListItem.Caption := ACaption;
2423 ListItem.Data := AObject;
2424 ListItem.MakeVisible(False);
2426 gmiOK: ListItem.ImageIndex := 0;
2427 gmiSAD: ListItem.ImageIndex := 1;
2428 gmiNG: ListItem.ImageIndex := 2;
2429 gmiWhat: ListItem.ImageIndex := 3;
2432 MessageListView.Items.EndUpdate;
2437 function TGikoForm.InsertBrowserTab(
2438 ThreadItem : TThreadItem;
2439 ActiveTab : Boolean = True
2442 i, j, idx : Integer;
2443 favItem : TFavoriteThreadItem;
2444 newBrowser : TBrowserRecord;
2448 if Threaditem = nil then Exit;
2450 if ThreadItem.IsLogFile then begin
2451 //
\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é
2452 //
\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é
2453 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2454 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2455 j := FBrowsers.IndexOf(FActiveContent.Browser);
2456 if j = BROWSER_COUNT - 1 then
2457 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2459 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2460 if not AddHistory( favItem ) then
2463 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2464 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2465 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2466 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2467 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2468 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2469 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2470 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2474 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2475 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2476 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2478 if ActiveTab then begin
2479 BrowserTab.TabIndex := i;
2480 BrowserTab.OnChange(nil);
2487 idx := BrowserTab.TabIndex;
2488 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2489 newBrowser := TBrowserRecord.Create;
2490 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2491 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2492 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2496 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2497 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2498 //newBrowser.Browser.Navigate(BLANK_HTML);
2499 newBrowser.thread := ThreadItem;
2500 newBrowser.Repaint := true;
2501 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2503 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2504 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2505 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2509 if ActiveTab then begin
2510 BrowserTab.TabIndex := 0;
2514 newBrowser := TBrowserRecord.Create;
2515 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2516 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2517 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2521 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2522 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2523 //newBrowser.Browser.Navigate(BLANK_HTML);
2524 newBrowser.thread := ThreadItem;
2525 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2526 newBrowser.Repaint := true;
2528 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2529 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2530 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2534 if ActiveTab then begin
2535 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2536 BrowserTab.TabIndex := 0
2538 BrowserTab.TabIndex := i;
2541 Result := newBrowser;
2542 if(ActiveTab) or (idx = -1) then begin
2543 BrowserTab.OnChange(nil);
2546 if BrowserNullTab = nil then begin
2547 BrowserNullTab := TBrowserRecord.Create;
2548 BrowserNullTab.Browser := Browser;
2550 BrowserNullTab.thread := ThreadItem;
2551 Result := BrowserNullTab;
2552 BrowserTab.TabIndex := -1;
2553 SetContent(BrowserNullTab);
2556 if GikoSys.Setting.URLDisplay then
2557 AddressComboBox.Text := ThreadItem.URL;
2561 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2570 ThreadItem: TThreadItem;
2571 Thread: TBrowserRecord;
2572 ThreadTitle, ThreadPTitle: string;
2573 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2576 idx := BrowserTab.TabIndex;
2577 if (FActiveContent <> nil) and
2578 (FActiveContent.Thread <> Thread.Thread) and
2579 (Assigned(FActiveContent.Browser.Document)) then begin
2583 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2586 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2591 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2592 Thread.Browser.Navigate(BLANK_HTML);
2593 BrowserBoardNameLabel.Caption := '';
2594 ItemBoardImage.Picture := nil;
2595 BrowserNameLabel.Caption := '';
2596 ItemImage.Picture := nil;
2597 BrowserNullTab.Thread := nil;
2598 //TOleControl(BrowserNullTab.Browser).Visible := true;
2599 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2600 FActiveContent := nil;
2602 end else if Thread.Browser = nil then begin
2603 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2604 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2605 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2606 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2607 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2611 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2612 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2615 ThreadTitle := Thread.Thread.Title;
2616 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2617 //ThreadScrollTop := Thread.Thread.ScrollTop;
2618 ThreadIsLog := Thread.Thread.IsLogFile;
2619 ThreadItem := Thread.Thread;
2620 ThreadNewArraical := Thread.Thread.NewArrival;
2621 //ThreadUnRead := Thread.Thread.UnRead;
2622 BBSID := ThreadItem.ParentBoard.BBSID;
2623 FileName := ThreadItem.FileName;
2625 if GetCapture = ListView.Handle then
2628 Screen.Cursor := crHourGlass;
2632 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2633 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2634 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2636 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2637 if (not Assigned(Thread.Browser.Document)) then begin
2638 Thread.Browser.Navigate('about:blank');
2641 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2642 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2643 Application.ProcessMessages;
2644 if idx <> BrowserTab.TabIndex then begin
2649 //ActiveContent
\81@
\82Ì
\8dX
\90V
2650 FActiveContent := Thread;
2652 if not ThreadIsLog then begin
2653 Self.Caption := GikoDataModule.CAPTION_NAME ;
2655 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2656 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2658 doc.charset := 'Shift_JIS';
2664 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2665 //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«
2666 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2667 if Thread.Repaint then begin
2668 Thread.Repaint := false;
2670 Thread.Browser.OnStatusTextChange := nil;
2671 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2673 //GikoSys.CreateHTML2(doc, ThreadItem, sTitle);
2674 HTMLCreater.CreateHTML2(doc, ThreadItem, sTitle);
2675 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2677 if ThreadItem = nil then begin
2678 FActiveContent := nil;
2682 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2685 if (Thread <> nil) and (ThreadItem <>nil) then begin
2686 BrowserBoardNameLabel.Caption := ThreadPTitle;
2687 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2688 BrowserNameLabel.Caption := ThreadTitle;
2689 ItemImage.Picture := nil;
2691 if ThreadNewArraical then
2692 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2694 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2696 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2698 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2699 BrowserNameLabel.Left := ItemImage.Left + 20;
2701 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
2702 if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then
2705 FActiveContent := nil;
2708 Screen.Cursor := crDefault;
2712 function TGikoForm.GetActiveContent: TThreadItem;
2715 if FActiveContent <> nil then
2716 Result := FActiveContent.Thread
2725 procedure TGikoForm.SetActiveList(Obj: TObject);
2729 // if FActiveList <> Obj then begin
2732 if ListView.Selected <> nil then
2733 idx := ListView.Selected.Index
2739 ListView.Items.Count := 0;
2740 ListView.Items.Clear;
2741 ListView.Selected := nil;
2742 // ListView.Columns.Clear;
2743 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2744 and (FActiveContent.Thread.IsLogFile) then
2745 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2747 Self.Caption := GikoDataModule.CAPTION_NAME;
2748 //Application.Title := CAPTION_NAME;
2750 // ActiveListColumnSave;
2752 Screen.Cursor := crHourGlass;
2754 if Obj is TBBS then begin
2755 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2756 FSortIndex, FSortOrder);
2757 end else if Obj is TCategory then begin
2758 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2759 FSortIndex, FSortOrder);
2760 end else if Obj is TBoard then begin
2761 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
2762 FSortIndex, FSortOrder);
2765 Screen.Cursor := crDefault;
2768 if idx >= 0 then begin
2769 if idx >= ListView.Items.Count then
2770 idx := ListView.Items.Count - 1;
2771 ListView.ItemIndex := idx;
2772 ListView.ItemFocused := ListView.Items.Item[ idx ];
2778 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2779 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2780 function TGikoForm.GetActiveList: TObject;
2782 Result := FActiveList;
2785 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2787 SetListViewType(AViewType, '', False);
2790 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2795 for i := Length( BBSs ) - 1 downto 0 do begin
2796 BBSs[i].SelectText := SelectText;
2797 BBSs[i].KubetsuChk := KubetsuChk;
2799 ViewType := AViewType;
2800 if ActiveList is TBoard then begin
2801 Board := TBoard(ActiveList);
2803 //gvtAll: ListView.Items.Count := Board.Count;
2804 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2805 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2806 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2809 SetActiveList(Board);
2813 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2814 const ARect: TRect; var DefaultDraw: Boolean);
2820 if ListView.Items.Count = 0 then begin
2821 DefaultDraw := true;
2822 ListView.Canvas.Brush.Color := ListView.Color;
2823 ListView.Canvas.FillRect(ARect);
2827 ListView.Canvas.Font.Color := clWindowText;
2828 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2831 ListView.Canvas.Font.Color := clBlue;
2832 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';
2835 ListView.Canvas.Font.Color := clGreen;
2836 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2839 ListView.Canvas.Font.Color := clNavy;
2840 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';
2841 if GetActiveList is TBoard then
2842 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2850 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2851 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2852 ListView.Canvas.TextOut(p.X, p.Y, s);
2854 DefaultDraw := True;
2858 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2860 Item: TDownloadItem;
2862 if not Board.IsThreadDatRead then
2863 GikoSys.ReadSubjectFile(Board);
2864 Item := TDownloadItem.Create;
2866 Item.Board := Board;
2867 Item.DownType := gdtBoard;
2868 Item.ForceDownload := ForceDownload;
2869 FControlThread.AddItem(Item);
2870 if FWorkCount = 0 then begin
2872 Animate.Active := True;
2875 Screen.Cursor := crAppStart;
2883 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2885 Item: TDownloadItem;
2887 Item := TDownloadItem.Create;
2889 Item.ThreadItem := ThreadItem;
2890 Item.DownType := gdtThread;
2891 Item.ForceDownload := ForceDownload;
2892 FControlThread.AddItem(Item);
2893 if FWorkCount = 0 then begin
2895 Animate.Active := True;
2898 Screen.Cursor := crAppStart;
2906 procedure TGikoForm.PlaySound(SoundEventName: string);
2910 if not GikoSys.Setting.Mute then begin
2911 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
2912 if FileExists(FileName) then begin
2913 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
2914 sndPlaySound(nil, SND_SYNC);
2915 Application.ProcessMessages;
2917 sndPlaySound(PChar(FileName), SND_ASYNC);
2923 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
2926 Item: TFavoriteThreadItem;
2930 // if (GetActiveContent = ThreadItem) and
2931 // (ThreadItem.Count <= ThreadItem.Kokomade) then
2933 // if GetActiveContent = ThreadItem then
2937 if FTreeType = gttHistory then
2938 TreeView.Selected := nil;
2940 for i := 0 to FHistoryList.Count - 1 do begin
2941 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
2942 Item := TFavoriteThreadItem(FHistoryList[i]);
2943 if Item.URL = favItem.URL then begin
2944 // SetContent(ThreadItem);
2945 FHistoryList.Move(i, 0);
2946 if FTreeType = gttHistory then
2947 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
2948 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
2955 if FHistoryList.Count > 0 then
2956 FHistoryList.Insert( 0, favItem )
2958 FHistoryList.Add( favItem );
2959 // SetContent(ThreadItem);
2960 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
2961 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
2962 i := FHistoryList.Count - 1;
2963 TObject( FHistoryList.Items[ i ] ).Free;
2964 FHistoryList.Delete( i );
2967 if FTreeType = gttHistory then begin
2968 Node := TreeView.Items.Add( nil, favItem.Title );
2969 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
2971 if favItem.NewArrival then begin
2972 Node.ImageIndex := ITEM_ICON_THREADNEW1;
2973 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
2975 Node.ImageIndex := ITEM_ICON_THREADLOG1;
2976 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
2979 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
2980 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
2981 Node.ImageIndex := ITEM_ICON_THREADLOG1;
2982 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
2983 Node.Data := favItem;
2984 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
2985 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
2986 i := TreeView.Items.Count - 1;
2987 TreeView.Items.Item[ i ].Delete;
2992 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
2996 for i := 0 to FHistoryList.Count - 1 do begin
2997 if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
2998 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
2999 FHistoryList.Delete(i);
3000 FHistoryList.Capacity := FHistoryList.Count;
3006 procedure TGikoForm.ClearHistory;
3010 //FHistoryList.Clear;
3013 for i := FHistoryList.Count - 1 downto 0 do begin
3014 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3015 TFavoriteThreadItem(FHistoryList[ i ]).Free
3016 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3017 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3019 //FHistoryList.Delete(i);
3025 FHistoryList.Capacity := FHistoryList.Count;
3029 procedure TGikoForm.SaveHistory;
3032 saveList : TstringList;
3035 saveList := TStringList.Create;
3038 FHistoryList.Capacity := FHistoryList.Count;
3039 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3040 saveList.Add('<address>');
3041 bound := FHistoryList.Count - 1;
3042 for i := bound downto 0 do begin
3043 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3045 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3046 ' title="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).Title ) + '"/>');
3048 saveList.Add('</address>');
3049 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3056 procedure TGikoForm.LoadHistory;
3060 XMLDoc : IXMLDocument;
3062 HistoryNode : IXMLNode;
3064 favItem : TFavoriteThreadItem;
3067 fileName := GikoSys.GetConfigDir + 'History.xml';
3069 if FileExists( fileName ) then begin
3071 XMLDoc := IXMLDocument.Create;
3072 //XMLDoc := LoadXMLDocument(FileName);
3073 LoadXMLDocument(FileName, XMLDoc);
3075 XMLNode := XMLDoc.DocumentElement;
3077 if XMLNode.NodeName = 'address' then begin
3078 bound := XMLNode.ChildNodes.Count - 1;
3079 for i := 0 to bound do begin
3080 HistoryNode := XMLNode.ChildNodes[i];
3081 if HistoryNode.NodeName = 'history' then begin
3082 //if FReadCount >= sl.Count then begin
3083 s := Trim(HistoryNode.Attributes['url']);
3084 if s <> '' then begin
3085 favItem := TFavoriteThreadItem.Create(
3086 s, HistoryNode.Attributes[ 'title' ] );
3087 if not AddHistory( favItem ) then
3103 procedure TGikoForm.ShowBBSTreeOld(
3111 FavoriteTreeView.Visible := False;
3112 FavoriteToolBar.Hide;
3113 TreeView.Visible := True;
3115 b := CabinetSelectPopupMenu.Items.Count - 1;
3116 for i := 0 to b do begin
3117 item := CabinetSelectPopupMenu.Items[ i ];
3118 if item is TBBSMenuItem then begin
3119 if TBBSMenuItem( item ).Data = inBBS then begin
3120 item.Checked := True;
3121 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3122 CabinetMenu.Items[ i ].Checked := True;
3123 GikoSys.Setting.CabinetIndex := i;
3127 item.Checked := False;
3128 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3129 CabinetMenu.Items[ i ].Checked := False;
3131 CabinetSelectToolButton.Caption := inBBS.Title;
3133 GikoDM.CabinetHistoryAction.Checked := False;
3134 GikoDM.CabinetFavoriteAction.Checked := False;
3136 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3137 FTreeType := gtt2ch;
3138 HistoryToolBar.Hide;
3139 FActiveBBS := inBBS;
3140 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3141 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3142 //?c???[??g?b?v?????I????
3143 if GetActiveList = nil then
3144 TreeView.Selected := TreeView.Items[0]
3146 for i := 0 to TreeView.Items.Count - 1 do begin
3147 if TreeView.Items[i].Data = GetActiveList then begin
3148 TreeView.Selected := TreeView.Items[i];
3152 TreeView.Selected := TreeView.Items[0]
3160 procedure TGikoForm.ShowBBSTree(
3169 FavoriteTreeView.Visible := False;
3170 FavoriteToolBar.Hide;
3171 TreeView.Visible := True;
3173 b := CabinetSelectPopupMenu.Items.Count - 1;
3174 for i := 0 to b do begin
3175 item := CabinetSelectPopupMenu.Items[ i ];
3176 if item is TBBSMenuItem then begin
3177 if TBBSMenuItem( item ).Data = inBBS then begin
3178 item.Checked := True;
3179 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3180 CabinetMenu.Items[ i ].Checked := True;
3181 GikoSys.Setting.CabinetIndex := i;
3185 item.Checked := False;
3186 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3187 CabinetMenu.Items[ i ].Checked := False;
3189 CabinetSelectToolButton.Caption := inBBS.Title;
3191 GikoDM.CabinetHistoryAction.Checked := False;
3192 GikoDM.CabinetFavoriteAction.Checked := False;
3194 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3195 or (not (CabinetPanel.Visible)) then begin
3196 FTreeType := gtt2ch;
3197 HistoryToolBar.Hide;
3198 FActiveBBS := inBBS;
3199 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3200 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3201 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3202 if GetActiveList = nil then begin
3204 TreeClick( TreeView.Items[0] );
3208 for i := 0 to TreeView.Items.Count - 1 do begin
3209 if TreeView.Items[i].Data = GetActiveList then begin
3210 TreeClick( TreeView.Items[i] );
3214 TreeClick( TreeView.Items[0] );
3222 procedure TGikoForm.ShowHistoryTree;
3227 if CabinetPanel.Visible then begin
3228 if FTreeType = gttHistory then begin
3229 CabinetVisible( False );
3230 GikoDM.CabinetHistoryAction.Checked := False;
3232 GikoDM.CabinetHistoryAction.Checked := True;
3235 CabinetVisible( True );
3236 GikoDM.CabinetHistoryAction.Checked := True;
3239 // BBS...BBS, History, Favorite
3240 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3242 FavoriteTreeView.Visible := False;
3243 TreeView.Visible := True;
3245 GikoDM.CabinetBBSAction.Checked := False;
3246 GikoDM.CabinetFavoriteAction.Checked := False;
3248 if FTreeType <> gttHistory then begin
3249 b := CabinetSelectPopupMenu.Items.Count - 1;
3250 for i := 0 to b do begin
3251 item := CabinetSelectPopupMenu.Items[ i ];
3252 if item is TBBSMenuItem then begin
3253 item.Checked := False;
3254 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3255 CabinetMenu.Items[ i ].Checked := False;
3259 FTreeType := gttHistory;
3260 HistoryToolBar.Show;
3261 FavoriteToolBar.Hide;
3263 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3267 procedure TGikoForm.SetHistoryTreeNode;
3271 Item: TFavoriteThreadItem;
3273 TreeView.Items.BeginUpdate;
3275 TreeView.Items.Clear;
3276 for i := 0 to FHistoryList.Count - 1 do begin
3277 Item := TFavoriteThreadItem(FHistoryList[i]);
3278 Node := TreeView.Items.Add(nil, Item.Title);
3280 if Item.Item.NewArrival then begin
3281 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3282 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3284 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3285 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3288 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3289 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3290 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3291 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3295 TreeView.Items.EndUpdate;
3299 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3301 ChangeEvent: TTVChangedEvent;
3302 ChangingEvent: TTVChangingEvent;
3306 if Item is TCategory then
3307 bbs := TCategory( Item ).ParenTBBS
3308 else if Item is TBoard then
3309 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3313 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3314 if Item <> FActiveList then begin
3316 ChangingEvent := nil;
3318 if not CallEvent then begin
3319 ChangeEvent := TreeView.OnChange;
3320 ChangingEvent := TreeView.OnChanging;
3323 if not CallEvent then begin
3324 TreeView.OnChange := nil;
3325 TreeView.OnChanging := nil;
3327 //Application.ProcessMessages;
3328 for i := 0 to TreeView.Items.Count - 1 do begin
3329 if TreeView.Items[i].Data = Item then begin
3330 TreeView.Items[i].Selected := True;
3332 TreeClick(TreeView.Items[i]);
3336 //Application.ProcessMessages;
3338 if not CallEvent then begin
3339 TreeView.OnChange := ChangeEvent;
3340 TreeView.OnChanging := ChangingEvent;
3345 if Item <> FActiveList then begin
3346 ActiveListColumnSave;
3348 if (Item is TBBS) or (Item is TCategory) then begin
3349 ListView.Columns.Clear;
3350 SetActiveList( Item );
3351 end else if Item is TBoard then begin
3352 if not TBoard( Item ).IsThreadDatRead then begin
3353 Screen.Cursor := crHourGlass;
3355 if not TBoard( Item ).IsThreadDatRead then
3356 GikoSys.ReadSubjectFile(TBoard( Item ));
3358 Screen.Cursor := crDefault;
3361 SetActiveList( Item );
3366 if Item is TBoard then begin // not TCategory
3367 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3368 if GikoSys.Setting.ListWidthState = glsMax then begin
3369 GikoDM.BrowserMinAction.Execute;
3370 if GikoForm.Visible then
3374 if GikoSys.Setting.ListHeightState = glsMax then begin
3375 GikoDM.BrowserMinAction.Execute;
3376 if GikoForm.Visible then
3383 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3384 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3386 listItem : TListItem;
3387 threadItem : TThreadItem;
3394 if not (GetActiveList is TBoard) then Exit;
3395 listItem := ListView.GetItemAt( X, Y );
3396 if listItem = nil then Exit;
3397 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3399 threadItem := TThreadItem(ListItem.Data);
3400 InsertBrowserTab(threadItem, False);
3401 if threadItem.IsLogFile then
3402 ListView.UpdateItems(listItem.Index, listItem.Index);
3406 //
\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Å
3407 if (ssDouble in Shift) then
3408 ListDoubleClick(Shift)
3416 Windows.ClientToScreen( ListView.Handle, pos );
3417 ListPopupMenu.Popup( pos.X, pos.Y );
3423 procedure TGikoForm.ListClick;
3425 ListItem: TListItem;
3426 ThreadItem: TThreadItem;
3428 if ListView.SelCount <> 1 then Exit;
3429 ListItem := ListView.Selected;
3430 if ListItem = nil then Exit;
3431 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3433 ThreadItem := TThreadItem(ListItem.Data);
3434 if ThreadItem.IsLogFile then begin
3435 InsertBrowserTab(ThreadItem);
3436 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3438 InsertBrowserTab(ThreadItem);
3441 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3442 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3443 if GikoSys.Setting.ListWidthState = glsMin then begin
3444 GikoDM.BrowserMaxAndFocusAction.Execute;
3447 if GikoSys.Setting.ListHeightState = glsMin then begin
3448 GikoDM.BrowserMaxAndFocusAction.Execute;
3454 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3456 ThreadItem: TThreadItem;
3459 shiftDown := (ssShift in Shift);
3461 if ListView.Selected = nil then Exit;
3463 if TObject(ListView.Selected.Data) is TCategory then begin
3464 SelectTreeNode(ListView.Selected.Data, True);
3465 end else if TObject(ListView.Selected.Data) is TBoard then begin
3466 SelectTreeNode(ListView.Selected.Data, True)
3467 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3468 Application.ProcessMessages;
3469 ThreadItem := TThreadItem(ListView.Selected.Data);
3470 DownloadContent(ThreadItem, shiftDown);
3472 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3473 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3474 if GikoSys.Setting.ListWidthState = glsMin then begin
3475 GikoDM.BrowserMaxAction.Execute;
3476 GikoDM.SetFocusForBrowserAction.Execute;
3479 if GikoSys.Setting.ListHeightState = glsMin then begin
3480 GikoDM.BrowserMaxAction.Execute;
3481 GikoDM.SetFocusForBrowserAction.Execute;
3488 procedure TGikoForm.BrowserMovement(const AName: string);
3490 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3491 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3492 and (FActiveContent <> nil) then begin
3493 FActiveContent.Move(AName);
3497 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3499 if TObject(Node.Data) is TBBS then begin
3500 TBBS(Node.Data).NodeExpand := False;
3501 end else if TObject(Node.Data) is TCategory then begin
3502 TCategory(Node.Data).NodeExpand := False;
3503 end else if TObject(Node.Data) is TBoard then begin
3504 TBoard(Node.Data).NodeExpand := False;
3508 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3510 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3512 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3514 TreeSplitter.Visible := isVisible;
3515 CabinetPanel.Visible := isVisible;
3516 GikoDM.CabinetVisibleAction.Checked := isVisible;
3519 procedure TGikoForm.SelectListItem(List: TList);
3521 TmpListItem: TListItem;
3525 TmpListItem := ListView.Selected;
3526 while TmpListItem <> nil do begin
3527 List.Add(TmpListItem.Data);
3528 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3533 procedure TGikoForm.FormResize(Sender: TObject);
3536 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3537 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3539 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3540 if GikoSys.Setting.ListWidthState = glsMin then begin
3541 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3542 ViewPanel.Width := ThreadMainPanel.Width - 80;
3545 if GikoSys.Setting.ListHeightState = glsMin then begin
3546 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3547 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3551 FIsIgnoreResize := rtResizing;
3552 PostMessage( Handle, USER_RESIZED, 0, 0 );
3557 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3562 idx := BrowserTab.TabIndex;
3563 FTabHintIndex := -1;
3564 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3565 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3566 BrowserTab.Tabs.BeginUpdate;
3568 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3569 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3570 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3573 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3575 if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
3576 FActiveContent := nil;
3577 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3578 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3580 FBrowsers.Move(j, BROWSER_COUNT - 1);
3582 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3583 BrowserTab.Tabs.Delete(i);
3584 if idx > i then begin
3585 BrowserTab.TabIndex := idx - 1;
3587 if BrowserTab.Tabs.Count -1 >= idx then
3588 BrowserTab.TabIndex := idx
3590 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3592 if BrowserTab.Tabs.Count = 0 then begin
3593 BrowserNullTab.Thread := nil;
3595 if(BrowserTab.TabIndex <> -1) and
3596 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3597 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3598 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3599 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3601 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3605 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3606 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3607 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3608 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3610 BrowserTab.Tabs.EndUpdate;
3611 if( FActiveContent = nil) then
3612 BrowserTab.OnChange(nil);
3617 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3622 idx := BrowserTab.TabIndex;
3623 FTabHintIndex := -1;
3624 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3625 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3626 BrowserTab.Tabs.BeginUpdate;
3628 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3629 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3630 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3634 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3636 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
3637 FActiveContent := nil;
3638 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3639 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3641 FBrowsers.Move(j, BROWSER_COUNT - 1);
3643 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3644 BrowserTab.Tabs.Delete(i);
3645 if idx > i then begin
3646 BrowserTab.TabIndex := idx - 1;
3648 if BrowserTab.Tabs.Count -1 >= idx then
3649 BrowserTab.TabIndex := idx
3651 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3653 if(BrowserTab.TabIndex <> -1) and
3654 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3655 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3656 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3657 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3659 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3663 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3664 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3665 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3666 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3669 BrowserTab.Tabs.EndUpdate;
3670 if( FActiveContent = nil) then
3671 BrowserTab.OnChange(nil);
3676 function TGikoForm.Hook(var Message: TMessage): Boolean;
3678 //
\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Ì
3679 //
\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ð
3683 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3685 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3689 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3691 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
3692 ItemReservPMenu.Visible := (GetActiveList is TBoard);
3693 LPMSep01.Visible := (GetActiveList is TBoard);
3694 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3695 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3696 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3697 KidokuPMenu.Visible := (GetActiveList is TBoard);
3698 MidokuPMenu.Visible := (GetActiveList is TBoard);
3699 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3700 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3701 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3702 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3703 DeletePMenu.Visible := (GetActiveList is TBoard);
3704 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3705 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
3706 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
3708 AddRoundNameMenu(ItemReservPMenu);
3709 AddRoundNameMenu(ListReservPMenu);
3712 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3714 FClickNode := TreeView.Selected;
3715 if FClickNode = nil then begin
3716 TreeSelectThreadPupupMenu.Visible := False;
3717 TreeSelectBoardPupupMenu.Visible := False;
3718 TPMSep01.Visible := False;
3719 TreeSelectURLPupupMenu.Visible := False;
3720 TreeSelectNamePupupMenu.Visible := False;
3721 TreeSelectNameURLPupupMenu.Visible := False;
3722 TreeSelectFavoriteAddPupupMenu.Visible := False;
3723 TreeSelectLogDeleteSeparator.Visible := False;
3724 TreeSelectLogDeletePopupMenu.Visible := False;
3725 end else if TObject(FClickNode.Data) is TBoard then begin
3726 TreeSelectThreadPupupMenu.Visible := False;
3727 TreeSelectBoardPupupMenu.Visible := True;
3728 TPMSep01.Visible := True;
3729 TreeSelectURLPupupMenu.Visible := True;
3730 TreeSelectNamePupupMenu.Visible := True;
3731 TreeSelectNameURLPupupMenu.Visible := True;
3732 TreeSelectFavoriteAddPupupMenu.Visible := True;
3733 TreeSelectLogDeleteSeparator.Visible := False;
3734 TreeSelectLogDeletePopupMenu.Visible := False;
3735 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3736 TreeSelectThreadPupupMenu.Visible := False;
3737 TreeSelectBoardPupupMenu.Visible := True;
3738 TPMSep01.Visible := True;
3739 TreeSelectURLPupupMenu.Visible := True;
3740 TreeSelectNamePupupMenu.Visible := True;
3741 TreeSelectNameURLPupupMenu.Visible := True;
3742 TreeSelectFavoriteAddPupupMenu.Visible := True;
3743 TreeSelectLogDeleteSeparator.Visible := False;
3744 TreeSelectLogDeletePopupMenu.Visible := False;
3745 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3746 TreeSelectThreadPupupMenu.Visible := True;
3747 TreeSelectBoardPupupMenu.Visible := False;
3748 TPMSep01.Visible := True;
3749 TreeSelectURLPupupMenu.Visible := True;
3750 TreeSelectNamePupupMenu.Visible := True;
3751 TreeSelectNameURLPupupMenu.Visible := True;
3752 TreeSelectFavoriteAddPupupMenu.Visible := True;
3753 TreeSelectLogDeleteSeparator.Visible := True;
3754 TreeSelectLogDeletePopupMenu.Visible := True;
3755 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3756 TreeSelectThreadPupupMenu.Visible := True;
3757 TreeSelectBoardPupupMenu.Visible := False;
3758 TPMSep01.Visible := True;
3759 TreeSelectURLPupupMenu.Visible := True;
3760 TreeSelectNamePupupMenu.Visible := True;
3761 TreeSelectNameURLPupupMenu.Visible := True;
3762 TreeSelectFavoriteAddPupupMenu.Visible := True;
3763 TreeSelectLogDeleteSeparator.Visible := True;
3764 TreeSelectLogDeletePopupMenu.Visible := True;
3765 end else if (TObject(FClickNode.Data) is TCategory) then begin
3766 TreeSelectThreadPupupMenu.Visible := False;
3767 TreeSelectBoardPupupMenu.Visible := False;
3768 TPMSep01.Visible := False;
3769 TreeSelectURLPupupMenu.Visible := False;
3770 TreeSelectNamePupupMenu.Visible := True;
3771 TreeSelectNameURLPupupMenu.Visible := False;
3772 TreeSelectFavoriteAddPupupMenu.Visible := False;
3773 TreeSelectLogDeleteSeparator.Visible := False;
3774 TreeSelectLogDeletePopupMenu.Visible := False;
3775 end else if FClickNode.IsFirstNode then begin
3776 TreeSelectThreadPupupMenu.Visible := False;
3777 TreeSelectBoardPupupMenu.Visible := False;
3778 TPMSep01.Visible := False;
3779 TreeSelectURLPupupMenu.Visible := False;
3780 TreeSelectNamePupupMenu.Visible := True;
3781 TreeSelectNameURLPupupMenu.Visible := False;
3782 TreeSelectFavoriteAddPupupMenu.Visible := False;
3783 TreeSelectLogDeleteSeparator.Visible := False;
3784 TreeSelectLogDeletePopupMenu.Visible := False;
3786 TreeSelectThreadPupupMenu.Visible := False;
3787 TreeSelectBoardPupupMenu.Visible := False;
3788 TPMSep01.Visible := False;
3789 TreeSelectURLPupupMenu.Visible := False;
3790 TreeSelectNamePupupMenu.Visible := False;
3791 TreeSelectNameURLPupupMenu.Visible := False;
3792 TreeSelectFavoriteAddPupupMenu.Visible := False;
3793 TreeSelectLogDeleteSeparator.Visible := False;
3794 TreeSelectLogDeletePopupMenu.Visible := False;
3798 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3799 var ppDisp: IDispatch; var Cancel: WordBool);
3808 threadItem: TThreadItem;
3812 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3813 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3814 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3815 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3816 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3817 if GikoSys.Setting.ResAnchorJamp then begin
3818 Text := ZenToHan(Trim(Text));
3820 if(AnsiPos('>>', Text) = 1) then begin
3821 //Text := Copy(Text, 3, Length(Text) - 2);
3824 //Text := Copy(Text, 2, Length(Text) - 1);
3828 if AnsiPos('-', Text) <> 0 then begin
3829 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3830 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3831 wkIntTo := StrToIntDef(Text, 0);
3832 if wkIntTo < wkIntSt then
3835 wkIntSt := StrToIntDef(Text, 0);
3838 if wkIntSt <> 0 then begin
3839 FActiveContent.IDAnchorPopup('');
3840 BrowserMovement(IntToStr(wkIntSt));
3846 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3848 URL := GikoSys.GetHRefText(Html);
3849 URL := GikoSys.HTMLDecode(URL);
3850 if AnsiPos('BE:', URL) = 1 then begin
3851 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3852 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3853 threadItem := FActiveContent.Thread;
3854 if threadItem = nil then Exit;
3855 URL := BE_PHP_URL + BNum + '&u=d'
3856 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3859 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3860 ( AnsiPos('ftp://', URL) = 1) then begin
3861 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3862 if GikoSys.Setting.LinkAddAddressBar then begin
3863 idx := AddressComboBox.Items.IndexOf(URL);
3864 if idx = -1 then begin
3865 AddressComboBox.Items.Insert(0, URL);
3866 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3867 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3869 AddressComboBox.Items.Delete(idx);
3870 AddressComboBox.Items.Insert(0, URL);
3880 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3882 if Mouse.Capture <> 0 then
3884 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3885 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3886 FBrowserSizeWidth := ViewPanel.Width;
3888 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3889 FBrowserSizeHeight := ViewPanel.Height;
3891 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3892 if ViewPanel.Width < 2 then begin
3893 ViewPanel.Width := 1;
3894 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3895 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3896 GikoSys.Setting.ListWidthState := glsMax;
3897 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3898 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3899 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3900 GikoSys.Setting.ListWidthState := glsMin;
3902 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3903 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3904 GikoSys.Setting.ListWidthState := glsNormal;
3907 if ViewPanel.Height < 2 then begin
3908 ViewPanel.Height := 1;
3909 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3910 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3911 GikoSys.Setting.ListHeightState := glsMax;
3912 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3913 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3914 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3915 GikoSys.Setting.ListHeightState := glsMin;
3917 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3918 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3919 GikoSys.Setting.ListHeightState := glsNormal;
3922 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3923 FBrowserSizeHeight := ViewPanel.Height
3924 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3925 FBrowserSizeWidth := ViewPanel.Width;}
3928 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3934 // if NewTab = -1 then
3935 // ThreadItem := nil;
3936 if not BrowserTab.Dragging then begin
3937 FTabHintIndex := -1;
3938 BrowserTab.Hint := '';
3939 idx := BrowserTab.TabIndex;
3940 if idx = -1 then begin
3941 BrowserNullTab.Thread := nil;
3942 SetContent(BrowserNullTab);
3944 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3945 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3946 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3948 FBrowsers.Move(j ,0);
3950 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3951 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3952 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3953 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3955 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3956 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3957 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
3961 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3962 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3963 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3965 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3966 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3967 // GikoSys.OnlyAHundredRes := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
3968 // OnlyAHundredRes.Checked := TBrowserRecord(BrowserTab.Tabs.Objects[idx]).OnlyHundred;
3969 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3971 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3972 AddressComboBox.Text := GetActiveContent.URL;
3974 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3975 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3978 GikoDM.SetFocusForBrowserAction.Execute;
3987 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3988 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3994 if Button = mbMiddle then begin
3995 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3998 p := BrowserTab.ScreenToClient(p);
3999 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4001 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4002 end else if Button = mbLeft then begin
4003 FDragWFirst := true;
4004 FMouseDownPos.X := X;
4005 FMouseDownPos.Y := Y;
4010 procedure TGikoForm.SetBrowserTabState;
4013 CoolBand: TCoolBand;
4015 BrowserBottomPanel.AutoSize := False;
4016 if GikoSys.Setting.BrowserTabVisible then begin
4017 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4018 BrowserTab.Style := tsTabs;
4019 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4020 BrowserTab.TabPosition := tpTop
4022 BrowserTab.TabPosition := tpBottom;
4023 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4024 BrowserTab.TabPosition := tpTop;
4025 BrowserTab.Style := tsButtons;
4027 BrowserTab.TabPosition := tpTop;
4028 BrowserTab.Style := tsFlatButtons
4031 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4032 BrowserTab.Parent := BrowserTabToolBar;
4033 BrowserBottomPanel.Hide;
4034 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4035 if CoolBand <> nil then
4036 CoolBand.Visible := True;
4037 // BrowserTab.Parent := BrowserTopPanel;
4038 // BrowserTab.Parent := BrowserCoolBar;
4039 // BrowserTab.Top := 26;
4040 // BrowserTopPanel.Height := 44;
4043 BrowserTab.Parent := BrowserBottomPanel;
4044 BrowserTab.Top := 0;
4045 BrowserTab.Left := 0;
4046 BrowserBottomPanel.Show;
4047 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4048 if CoolBand <> nil then
4049 CoolBand.Visible := False;
4050 // BrowserTopPanel.Height := 26;
4054 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4055 if CoolBand <> nil then
4056 CoolBand.Visible := False;
4057 BrowserBottomPanel.Visible := False;
4058 // BrowserTab.Visible := False;
4059 // BrowserTopPanel.Height := 26;
4060 GikoDM.AllTabCloseAction.Execute;
4064 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4065 Y: Integer; State: TDragState; var Accept: Boolean);
4069 idx := BrowserTab.IndexOfTabAt(X, Y);
4070 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4073 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4078 idx := BrowserTab.IndexOfTabAt(X, Y);
4080 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4083 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4084 Shift: TShiftState; X, Y: Integer);
4087 ThreadItem: TThreadItem;
4090 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4092 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4093 if FDragWFirst = false then begin
4094 FDragWFirst := true;
4096 BrowserTab.EndDrag(false);
4097 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4098 FDragWFirst := false;
4101 BrowserTab.EndDrag(false);
4102 FDragWFirst := false;
4105 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4106 Application.CancelHint;
4107 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4108 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4109 BrowserTab.Hint := ThreadItem.Title;
4110 Application.ShowHint := True;
4112 BrowserTab.Hint := '';
4113 Application.ShowHint := True;
4115 FTabHintIndex := TabIdx;
4120 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4121 const pDisp: IDispatch; var URL: OleVariant);
4123 FDispHtmlDocument: DispHTMLDocument;
4124 BrowserRecord :TBrowserRecord;
4127 threadItem : TThreadItem;
4129 // AddMessageList('DocumentComplete', nil, gmiWhat);
4130 if TObject(Sender) is TWebBrowser then begin
4131 BrowserRecord := nil;
4132 if TWebBrowser(Sender) <> Browser then begin
4133 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4134 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4135 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4139 if BrowserRecord <> nil then begin
4140 if BrowserRecord.Event <> nil then
4141 BrowserRecord.Event.Free;
4142 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4143 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4144 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4145 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4148 if GetActiveContent <> nil then begin
4149 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4150 if FEvent <> nil then
4152 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4153 FEvent.OnContextMenu := OnDocumentContextMenu;
4154 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4159 if (BrowserRecord <> nil) and
4160 Assigned( BrowserRecord.Thread ) then begin
4161 threadItem := BrowserRecord.Thread;
4163 if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
4164 if threadItem.UnRead then begin
4165 threadItem.UnRead := False;
4169 //
\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®
4170 if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4171 BrowserRecord.Move(BrowserRecord.Movement);
4172 BrowserRecord.Movement := '';
4174 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4177 end else if threadItem.UnRead then begin
4178 threadItem.UnRead := False;
4180 BrowserRecord.Move('new');
4182 end else if threadItem.ScrollTop <> 0 then begin
4184 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4185 doc.Body.ScrollTop := threadItem.ScrollTop;
4188 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4195 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4197 AddRoundNameMenu(RoundNamePopupMenu.Items);
4200 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4206 Item := TMenuItem.Create(Self);
4207 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4208 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4210 Item := TMenuItem.Create(Self);
4211 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4212 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4214 Item := TMenuItem.Create(Self);
4215 Item.Caption := '-';
4217 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4218 Item := TMenuItem.Create(Self);
4219 Item.Caption := RoundList.RoundNameList[i];
4220 Item.OnClick := SetSelectRoundName;
4225 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4227 threadItem : TThreadItem;
4229 if ParentName <> 'dummy1' then begin
4230 SetSelectItemRound(RoundFlag, RoundName);
4232 threadItem := GetActiveContent;
4233 if threadItem <> nil then begin
4234 threadItem.RoundName := RoundName;
4236 RoundList.RoundNameList.Add(RoundName);
4237 threadItem.Round := RoundFlag;
4242 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4247 List := TList.Create;
4249 SelectListItem(List);
4250 for i := 0 to List.Count - 1 do begin
4251 if TObject(List[i]) is TBoard then begin
4252 TBoard(List[i]).RoundName := RoundName;
4254 RoundList.RoundNameList.Add(RoundName);
4255 TBoard(List[i]).Round := RoundFlag;
4256 end else if TObject(List[i]) is TThreadItem then begin
4257 if TThreadItem(List[i]).IsLogFile then begin
4258 TThreadItem(List[i]).RoundName := RoundName;
4260 RoundList.RoundNameList.Add(RoundName);
4261 TThreadItem(List[i]).Round := RoundFlag;
4270 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4272 MenuItem: TMenuItem;
4274 if Sender is TMenuItem then begin
4275 MenuItem := TMenuItem(Sender);
4276 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4281 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4286 if CoolBar = nil then
4288 for i := 0 to CoolBar.Bands.Count - 1 do begin
4289 if CoolBar.Bands[i].Control = Control then begin
4290 Result := CoolBar.Bands[i];
4296 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4298 if BrowserTab.Parent = BrowserTabToolBar then
4299 BrowserTab.Width := BrowserTabToolBar.Width;
4302 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4307 procedure TGikoForm.SetMenuFont;
4309 // GikoSys.MenuFont(MenuToolBar.Font);
4310 // MenuToolBar.Buttons[0].AutoSize := False;
4311 // MenuToolBar.Buttons[0].AutoSize := True;
4312 // MenuToolBar.Font.Color := clMenuText;
4313 GikoSys.MenuFont(MainCoolBar.Font);
4314 MenuToolBar.Buttons[0].AutoSize := False;
4315 MenuToolBar.Buttons[0].AutoSize := True;
4316 MainCoolBar.AutoSize := False;
4317 MainCoolBar.AutoSize := True;
4319 GikoSys.MenuFont(ListCoolBar.Font);
4320 GikoSys.MenuFont(BrowserCoolBar.Font);
4321 // MenuToolBar.Font.Color := clMenuText;
4324 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4330 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4331 NewMenu := TMenuItem.Create(MainMenu);
4332 NewMenu.Action := GikoDM.FavoriteAddAction;
4333 FavoriteMenu.Add(NewMenu);
4334 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4335 NewMenu := TMenuItem.Create(FavoriteMenu);
4336 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4337 FavoriteMenu.Add(NewMenu);
4338 //
\83Z
\83p
\83\8c\81[
\83^
4339 NewMenu := TMenuItem.Create(FavoriteMenu);
4340 NewMenu.Caption := '-';
4341 FavoriteMenu.Add(NewMenu);
4343 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4346 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4351 for i := 0 to Node.Count - 1 do begin
4352 NewMenu := TFavoriteMenuItem.Create(Self);
4353 NewMenu.AutoHotkeys := maAutomatic;
4354 NewMenu.Caption := CustomStringReplace(Node.Item[i].Text, '&', '&&');
4355 TFavoriteMenuItem(NewMenu).Data := Node.Item[i].Data;
4356 MenuItem.Add(NewMenu);
4358 if TObject(Node.Item[i].Data) is TFavoriteFolder then begin
4359 NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4360 CreateFavMenu(Node.Item[i], NewMenu);
4361 end else if TObject(Node.Item[i].Data) is TFavoriteBoardItem then begin
4362 NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4363 NewMenu.OnClick := FavoriteClick;
4364 end else if TObject(Node.Item[i].Data) is TFavoriteThreadItem then begin
4365 NewMenu.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4366 NewMenu.OnClick := FavoriteClick;
4371 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4373 Dlg : TFavoriteAddDialog;
4379 if Item is TFavoriteBoardItem then
4380 Item := TFavoriteBoardItem( Item ).Item
4381 else if Item is TFavoriteThreadItem then
4382 Item := TFavoriteThreadItem( Item ).Item;
4384 Node := FavoriteTreeView.Items.GetFirstNode;
4385 if Item is TBoard then begin
4386 ItemURL := TBoard( Item ).URL;
4387 while Node <> nil do begin
4389 if TObject( Data ) is TFavoriteBoardItem then begin
4390 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4391 if Application.MessageBox( '
\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', '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á', MB_YESNO ) = IDNO then
4396 Node := Node.GetNext;
4398 Dlg := TFavoriteAddDialog.Create(Self);
4400 Dlg.SetBoard( TBoard( Item ) );
4405 end else if Item is TThreadItem then begin
4406 ItemURL := TThreadItem( Item ).URL;
4407 while Node <> nil do begin
4409 if TObject( Data ) is TFavoriteThreadItem then begin
4410 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4411 if Application.MessageBox( '
\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', '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á', MB_YESNO ) = IDNO then
4416 Node := Node.GetNext;
4418 Dlg := TFavoriteAddDialog.Create(Self);
4420 Dlg.SetThreadItem( TThreadItem( Item ) );
4430 procedure TGikoForm.FavoriteClick(Sender: TObject);
4433 FavoriteClick( Sender, True );
4437 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4440 ThreadItem: TThreadItem;
4441 FavBoard: TFavoriteBoardItem;
4442 FavThread: TFavoriteThreadItem;
4446 if Sender is TFavoriteMenuItem then
4447 Item := TFavoriteMenuItem(Sender).Data
4448 else if Sender is TLinkToolButton then
4449 Item := TLinkToolButton(Sender).Data
4450 else if Sender is TTreeNode then
4451 Item := TTreeNode( Sender ).Data
4455 if TObject(Item) is TFavoriteBoardItem then begin
4456 FavBoard := TFavoriteBoardItem(Item);
4457 Board := FavBoard.Item;
4458 if Board <> nil then begin
4459 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4460 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4461 SelectTreeNode(Board, True);
4463 end else if TObject(Item) is TFavoriteThreadItem then begin
4464 FavThread := TFavoriteThreadItem(Item);
4465 ThreadItem := FavThread.Item;
4466 if ThreadItem = nil then
4469 InsertBrowserTab(ThreadItem, ActiveTab);
4471 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4472 if GikoSys.Setting.ListWidthState = glsMin then begin
4473 GikoDM.BrowserMaxAndFocusAction.Execute;
4476 if GikoSys.Setting.ListHeightState = glsMin then begin
4477 GikoDM.BrowserMaxAndFocusAction.Execute;
4483 procedure TGikoForm.BBSMenuItemOnClick(
4488 if Sender is TBBSMenuItem then
4489 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4493 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4495 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4499 procedure TGikoForm.MoveToURL(const inURL: string);
4501 protocol, host, path, document, port, bookmark : string;
4502 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4504 BBSID, BBSKey: string;
4505 {tmpBoard,} Board: TBoard;
4506 ThreadItem: TThreadItem;
4509 tmpThread : TThreadItem;
4510 // category : TCategory;
4511 // categoryNode : TTreeNode;
4512 // boardNode : TTreeNode;
4513 shiftDown : Boolean;
4515 stRes, edRes : Int64;
4516 browserRec : TBrowserRecord;
4519 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4520 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4523 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4524 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4525 if shiftDown then begin
4526 GikoSys.OpenBrowser(inURL, gbtUserApp);
4528 end else if ctrlDown then begin
4529 GikoSys.OpenBrowser(inURL, gbtIE);
4533 //=====
\83v
\83\89\83O
\83C
\83\93
4536 bi := Length(BoardGroups) - 1;
4537 for i := 1 to bi do begin
4538 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4539 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4542 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4543 Board := BBSsFindBoardFromURL( boardURL );
4546 if Board = nil then begin
4548 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4549 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4552 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4553 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4554 ShowBBSTree( BBSs[ 1 ] );
4557 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4558 if not Board.IsThreadDatRead then begin
4559 GikoSys.ReadSubjectFile( Board );
4563 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4564 if ThreadItem = nil then begin
4565 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4566 ThreadItem := tmpThread;
4567 Board.Insert( 0, ThreadItem );
4568 if ActiveList is TBoard then begin
4569 if TBoard(ActiveList) = Board then
4570 ListView.Items.Count := ListView.Items.Count + 1;
4572 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4573 browserRec := InsertBrowserTab( ThreadItem );
4574 if (browserRec <> nil) and (stRes > 0) then
4575 browserRec.Movement := IntToStr( stRes );
4576 DownloadContent( ThreadItem );
4580 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4581 browserRec := InsertBrowserTab( ThreadItem );
4582 if ThreadItem.IsLogFile then begin
4583 if (browserRec <> nil) and (stRes > 0) then begin
4584 browserRec.Movement := IntToStr( stRes );
4585 if (stRes > ThreadItem.Count) then begin
4586 DownloadContent( ThreadItem );
4590 if (browserRec <> nil) and (stRes > 0) then
4591 browserRec.Movement := IntToStr( stRes );
4592 DownloadContent( ThreadItem );
4601 Board := BBSsFindBoardFromURL(
4602 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4604 if Board <> nil then begin
4605 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4606 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4607 SelectTreeNode( Board, True );
4615 // 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¢
4619 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4620 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4621 Board := BBSsFindBoardFromURL( boardURL );
4622 //if Board = nil then
4623 // Board := BBSsFindBoardFromBBSID( BBSID );
4624 {
\82±
\82Ì
\95\94\95ª
\82àBBS
\82\93FindBoardFromURL
\82É
\8e\9d\82½
\82¹
\82½
\81@20050523
4625 if Board = nil then begin
4626 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4627 //
\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)
4628 Board := BBSs[ 0 ].FindBBSID( BBSID );
4631 if Board = nil then begin
4632 //
\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
4633 GikoSys.OpenBrowser(inURL, gbtUserApp);
4636 //
\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é
4638 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4639 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4640 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4641 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4642 GikoSys.OpenBrowser(inURL, gbtUserApp);
4647 if not Board.IsThreadDatRead then
4648 GikoSys.ReadSubjectFile(Board);
4649 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4650 ThreadItem := Board.FindThreadFromURL( URL );
4651 //
\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)
4652 if ThreadItem = nil then begin
4653 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4655 if ThreadItem = nil then begin
4656 //shift ->
\90Ý
\92è
\83u
\83\89\83E
\83U
\81i
\96³
\82¯
\82ê
\82ÎIE
\81j
4658 {shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4659 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4661 GikoSys.OpenBrowser(URL1, gbtUserApp)
4662 else if ctrlDown then
4663 GikoSys.OpenBrowser(URL1, gbtIE)
4666 ThreadItem := TThreadItem.Create( nil, Board, URL );
4667 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4668 if AnsiPos(Host, Board.URL) = 0 then
4669 ThreadItem.DownloadHost := Host
4671 ThreadItem.DownloadHost := '';
4672 Board.Insert(0, ThreadItem);
4673 if ActiveList is TBoard then begin
4674 if TBoard(ActiveList) = Board then
4675 ListView.Items.Count := ListView.Items.Count + 1;
4677 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4678 browserRec := InsertBrowserTab(ThreadItem);
4679 if (browserRec <> nil) and (stRes > 0) then
4680 browserRec.Movement := IntToStr( stRes );
4681 DownloadContent(ThreadItem);
4684 if ThreadItem.IsLogFile then begin
4685 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4686 browserRec := InsertBrowserTab(ThreadItem);
4687 if (browserRec <> nil) and (stRes > 0) then begin
4688 browserRec.Movement := IntToStr( stRes );
4689 if (stRes > ThreadItem.Count) then begin
4690 DownloadContent(ThreadItem);
4694 if AnsiPos(Host, Board.URL) = 0 then
4695 ThreadItem.DownloadHost := Host
4697 ThreadItem.DownloadHost := '';
4698 GikoSys.GetPopupResNumber( inURL, stRes, edRes );
4699 browserRec := InsertBrowserTab(ThreadItem);
4700 if (browserRec <> nil) and (stRes > 0) then
4701 browserRec.Movement := IntToStr( stRes );
4702 DownloadContent(ThreadItem);
4706 Board := BBSsFindBoardFromURL( inURL );
4707 if Board = nil then begin
4708 GikoSys.OpenBrowser(inURL, gbtAuto);
4710 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4711 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4712 SelectTreeNode( Board, True );
4717 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4719 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4720 CoolBarResized( Sender, MainCoolBar );
4723 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4724 Shift: TShiftState);
4726 if Key = VK_RETURN then
4727 GikoDM.MoveToAction.Execute;
4730 procedure TGikoForm.BrowserEnter(Sender: TObject);
4732 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4735 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4737 CDS:PCopyDataStruct;
4741 CDS := Message.CopyDataStruct;
4742 GetMem(PC, CDS^.cbData);
4744 lstrcpy(PC,CDS^.lpData);
4745 SetString(sURL, PC,lstrlen(PC));
4750 Message.Result := 1;
4753 procedure TGikoForm.WndProc(var Message: TMessage);
4755 senderBrowser : TWebBrowser;
4761 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4764 if Message.WParam = SC_MINIMIZE then
4767 TreeClick( TreeView.Selected );
4774 USER_DOCUMENTCOMPLETE:
4775 if (Message.WParam <> 0) and
4776 (TObject(Message.WParam) is TWebBrowser) then begin
4777 senderBrowser := TWebBrowser( Message.WParam );
4778 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4787 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4792 //
\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Í
4793 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4794 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4795 if Msg.CharCode in [VK_BACK] then begin
4796 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4797 if Msg.KeyData > 0 then begin
4800 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4804 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4805 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4808 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4811 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4812 if Msg.CharCode in [VK_BACK] then begin
4813 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4814 if Msg.KeyData > 0 then begin
4817 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4820 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4823 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4827 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4831 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4837 HtmlFileName: string;
4841 TargetFrameName: OleVariant;
4842 PostData: OleVariant;
4843 Headers: OleVariant;
4844 WindowHeight: Integer;
4845 WindowWidth: Integer;
4849 Protocol, Host, Path, Document, Port, Bookmark: string;
4851 PreviewTimer.Enabled := False;
4855 case GikoSys.Setting.PreviewSize of
4862 WindowHeight := 192;
4866 WindowHeight := 384;
4870 WindowHeight := 480;
4872 else begin //gpsMedium
4874 WindowHeight := 288;
4878 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4880 case GikoSys.Setting.PopupPosition of
4881 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4882 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4883 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4884 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4885 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4886 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4887 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4888 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4889 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Ó
4892 html := '<html><head>'#13#10
4894 + 'function init() {'#13#10
4895 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4897 + ' var dh, ih;'#13#10
4898 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4899 + ' ih = Image1.width / Image1.height;'#13#10
4900 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4901 + ' if (ih > dh)'#13#10
4902 + ' Image1.width = document.body.clientWidth;'#13#10
4904 + ' Image1.height = document.body.clientHeight;'#13#10
4906 + ' if (ih < dh)'#13#10
4907 + ' Image1.height = document.body.clientHeight;'#13#10
4909 + ' Image1.width = document.body.clientWidth;'#13#10
4912 + ' Message.style.display = "none";'#13#10
4916 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
4917 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
4918 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
4920 sl := TStringList.Create;
4923 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
4924 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
4925 sl.SaveToFile(HtmlFileName);
4932 NavURL := HtmlFileName;
4934 TargetFrameName := '';
4937 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
4938 Referer := Protocol + '://' + Host;
4940 Referer := Referer + ':' + Port;
4941 Referer := Referer + Path;
4942 Headers := 'Referer: ' + Referer;
4943 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
4944 if ARect.Top + WindowHeight > Screen.DesktopHeight then
4945 ARect.Top := Screen.DesktopHeight - WindowHeight;
4946 if ARect.Left + WindowWidth > Screen.DesktopWidth then
4947 ARect.Left := Screen.DesktopWidth - WindowWidth;
4948 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
4949 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
4951 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
4952 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4954 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
4955 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
4959 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4961 if PreviewTimer.Enabled then
4962 PreviewTimer.Enabled := False;
4963 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4964 FHint.ReleaseHandle;
4967 if (FPreviewBrowser <> nil) and (IsWindowVisible(FPreviewBrowser.Handle)) then
4968 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4969 Message.Result := 1;
4973 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4975 GikoDM.MsgBarCloseAction.Execute;
4978 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4980 Doc: IHtmlDocument2;
4981 Range: IHTMLTxtRange;
4984 ThreadItem: TThreadItem;
4987 FactiveContent.IDAnchorPopup('');
4988 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4989 if Assigned(Doc) then begin
4990 Range := Doc.selection.createRange as IHTMLTxtRange;
4991 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4992 s := ZenToHan(Trim(s));
4993 if GikoSys.IsNumeric(s) then begin
4995 ThreadItem := GetActiveContent;
4996 if ThreadItem <> nil then begin
4998 FHint.PopupType := gptThread;
4999 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5000 if FHint.ResCount <> 0 then
5011 procedure TGikoForm.ShowTextPopup;
5016 // if Trim(s) = '' then
5019 FHint.Font.Name := GikoSys.Setting.HintFontName;
5020 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5021 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5022 FHint.Color := GikoSys.Setting.HintBackColor;
5023 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5025 if FHint.PopupType = gptRaw then
5026 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5028 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5029 case GikoSys.Setting.PopupPosition of
5030 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5031 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5032 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5033 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5034 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5035 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5036 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5037 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5038 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Ó
5040 //FHint.ActivateHint(ARect, s);
5041 if FHint.PopupType = gptRaw then
5042 FHint.ActivateHint(ARect, FHint.Caption)
5044 FHint.ActivateHint(ARect, '');
5046 FHint.ReleaseHandle;
5051 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5053 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5054 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5056 if FTreeType = gttHistory then begin
5057 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5058 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5062 TreeView.Items.Clear;
5066 procedure TGikoForm.SetLinkBar;
5070 ToolButton: TLinkToolButton;
5071 MenuItem: TMenuItem;
5072 oldIgnoreResize : TResizeType;
5074 oldIgnoreResize := FIsIgnoreResize;
5075 FIsIgnoreResize := rtResizing;
5076 MainCoolBar.Bands.BeginUpdate;
5078 LinkBarPopupMenu.Items.Clear;
5079 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5080 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5081 LinkToolBar.Buttons[i].Free;
5082 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5083 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5084 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5085 ToolButton := TLinkToolButton.Create(LinkToolBar);
5086 // ToolButton.Parent := LinkToolBar;
5087 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5088 MenuItem := TMenuItem.Create(Self);
5089 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5090 LinkBarPopupMenu.Items.Add(MenuItem);
5091 ToolButton.MenuItem := MenuItem;
5092 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5093 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5094 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5095 ToolButton.OnClick := FavoriteClick;
5096 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5097 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5098 ToolButton.OnClick := FavoriteClick;
5100 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5101 ToolButton.Left := 10000;
5102 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5103 ToolButton.AutoSize := True;
5104 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5105 ToolButton.OnDragOver := FavoriteDragOver;
5106 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5107 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5108 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5109 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5110 //ToolButton.DragMode := dmAutomatic;
5111 ToolButton.DragMode := dmManual;
5112 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5114 LinkToolBar.InsertControl(ToolButton);
5119 { if LinkToolBar.ButtonCount = 0 then begin
5120 ToolButton := TLinkToolButton.Create(LinkToolBar);
5121 ToolButton.Style := tbsButton;
5122 ToolButton.ImageIndex := -1;
5123 ToolButton.Caption := '';
5124 LinkToolBar.InsertControl(ToolButton);
5127 MainCoolBar.Bands.EndUpdate;
5128 LoadCoolBarSettings;
5129 FIsIgnoreResize := oldIgnoreResize;
5133 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5141 if Sender = FavoriteTreeView then begin
5142 Node := FavoriteTreeView.GetNodeAt(X, Y);
5147 bound := Node.DisplayRect( False );
5148 height := bound.Bottom - bound.Top;
5149 if (bound.Top + height / 2) <= Y then
5150 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5155 if Node.IsFirstNode then
5160 if FDropSpaceNode <> nil then
5161 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5164 if Change then begin
5165 if FDropSpaceNode <> nil then
5166 FDropSpaceNode.Free;
5168 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5169 FDropSpaceNode.MoveTo( Node, naInsert );
5170 FDropSpaceNode.ImageIndex := -1;
5171 FDropSpaceNode.SelectedIndex := -1;
5175 if Source = FavoriteTreeView then begin
5176 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5181 end else if Source = BrowserTab then
5183 else if Source = ListView then
5185 else if Source is TLinkToolButton then
5187 else if Source = TreeView then
5193 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5196 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5199 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5201 // FDragging := true;
5204 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5206 SenderNode: TTreeNode;
5207 LinkToolButton: TLinkToolButton;
5210 LinkToolButton := TLinkToolButton( Sender );
5211 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5212 SenderNode.Selected := False;
5213 FavoriteDragDrop( SenderNode, Source );
5219 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5221 favButton : TLinkToolButton;
5222 favThreadItem : TFavoriteThreadItem;
5228 if Sender is TLinkToolButton then begin
5229 favButton := TLinkToolButton( Sender );
5230 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5231 favThreadItem := TFavoriteThreadItem( favButton.Data );
5232 if favThreadItem.Item <> nil then
5233 InsertBrowserTab( favThreadItem.Item, False );
5241 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5245 TToolButton( Sender ).DragMode := dmManual;
5246 if ssLeft in Shift then begin
5247 // 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)
5248 if FDragTime = 0 then begin
5249 FDragTime := GetTickCount();
5251 Now := GetTickCount();
5252 if (Now - FDragTime) > 500 then begin
5253 if FDragButton <> TToolButton( Sender ) then begin
5255 FDragButton := TToolButton( Sender );
5256 TToolButton(Sender).BeginDrag(false ,5);
5259 {$IF Defined(debug)}
5260 ShowMessage('Error');
5271 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5276 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5281 for i := 0 to ToolBar.ButtonCount - 1 do
5282 if ToolBar.Buttons[i].Visible then
5283 Result := Result + ToolBar.Buttons[i].Width;
5286 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5288 Control : TWinControl;
5291 Control := FindControl(BandInfo^.hwndChild);
5292 if Control = nil then
5295 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5296 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5297 idx := MainCoolBar.Bands[ i ].ID;
5301 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5302 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5303 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5304 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5305 BandInfo^.cxMinChild := 0;
5306 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5307 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5308 end else if Control = LinkToolBar then begin
5309 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5310 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5311 BandInfo^.cxMinChild := 0;
5312 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5313 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5314 end else begin // AddressToolBar
5315 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5316 BandInfo^.cxMinChild := 0;
5317 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5321 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5327 ChevronPopupMenu.Items.Clear;
5329 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5330 if MainCoolBar.Bands[ i ].Visible then begin
5331 if Idx = Int64(RebarChevron^.uBand) then begin
5338 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5339 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5341 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5342 ToolBarChevronMenu(StdToolBar);
5343 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5347 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5348 ChevronPopupMenu.Popup(p.x, p.y);
5352 procedure TGikoForm.MenuBarChevronMenu;
5353 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5359 for i := 0 to MenuItem.Count - 1 do begin
5361 if MenuItem[i] is TFavoriteMenuItem then begin
5362 Item := TFavoriteMenuItem.Create(Self);
5363 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5365 Item := TMenuItem.Create(Self);
5366 Item.Caption := MenuItem[i].Caption;
5367 Item.Action := MenuItem[i].Action;
5368 Item.ImageIndex := MenuItem[i].ImageIndex;
5369 Item.OnClick := MenuItem[i].OnClick;
5370 PopupItem.Add(Item);
5371 if MenuItem[i].Count > 0 then
5372 SetSubMenu(MenuItem[i], Item);
5381 ChevronPopupMenu.Items.Clear;
5382 ChevronPopupMenu.Images := MainMenu.Images;
5383 bw := GetWidthAllToolButton(MenuToolBar);
5384 if MenuToolBar.Width < bw then begin
5386 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5387 w := w + MenuToolBar.Buttons[i].Width;
5388 if MenuToolBar.Width <= w then begin
5389 Item := TMenuItem.Create(Self);
5390 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5391 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5392 ChevronPopupMenu.Items.Add(Item);
5393 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5399 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5400 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5405 if Assigned(PopupMenu.OnPopup) then
5406 PopupMenu.OnPopup(nil);
5407 for i := 0 to PopupMenu.Items.Count - 1 do begin
5409 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5410 Item := TFavoriteMenuItem.Create(Self);
5411 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5413 Item := TMenuItem.Create(Self);
5414 Item.Caption := PopupMenu.Items[i].Caption;
5415 Item.Action := PopupMenu.Items[i].Action;
5416 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5417 Item.OnClick := PopupMenu.Items[i].OnClick;
5418 PopupItem.Add(Item);
5427 ChevronPopupMenu.Items.Clear;
5428 ChevronPopupMenu.Images := ToolBar.HotImages;
5429 bw := GetWidthAllToolButton(ToolBar);
5430 if ToolBar.Width < bw then begin
5432 for i := 0 to ToolBar.ButtonCount - 1 do begin
5433 if ToolBar.Buttons[i].Visible then
5434 w := w + ToolBar.Buttons[i].Width;
5435 if ToolBar.Width <= w then begin
5436 if ToolBar.Buttons[i].Tag = 0 then begin
5437 Item := TMenuItem.Create(Self);
5438 if ToolBar.Buttons[i].Style = tbsSeparator then
5441 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5442 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5445 Item.Caption := ToolBar.Buttons[i].Caption;
5446 Item.Action := ToolBar.Buttons[i].Action;
5448 //Item.Visible := True;
5450 ChevronPopupMenu.Items.Add(Item);
5451 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5453 Item.OnClick := nil;
5454 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5462 procedure TGikoForm.LinkBarChevronMenu;
5467 Item: TFavoriteMenuItem;
5469 Button: TLinkToolButton;
5471 ChevronPopupMenu.Items.Clear;
5472 ChevronPopupMenu.Images := LinkToolBar.Images;
5473 bw := GetWidthAllToolButton(LinkToolBar);
5474 if LinkToolBar.Width < bw then begin
5476 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5477 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5478 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5479 w := w + LinkToolBar.Buttons[j].Width;
5480 if LinkToolBar.Width <= w then begin
5481 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5482 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5483 Item := TFavoriteMenuItem.Create(Self);
5484 if TObject(Button.Data) is TFavoriteFolder then begin
5485 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5486 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5487 Item.OnClick := FavoriteClick;
5488 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5489 Item.OnClick := FavoriteClick;
5491 Item.Data := Button.Data;
5492 Item.Caption := LinkToolBar.Buttons[j].Caption;
5493 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5494 ChevronPopupMenu.Items.Add(Item);
5505 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5506 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5507 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5509 \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É
5510 \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
5512 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5514 bandInfo : tagREBARBANDINFOA;
5515 pBandInfo : PReBarBandInfoA;
5522 pBandInfo := @bandInfo;
5523 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5524 bandInfo.cbSize := sizeof( bandInfo );
5525 bandInfo.hwndChild := h;
5526 bandInfo.cyMinChild := bar.Height;
5527 bar.OnBandInfo( nil, pBandInfo );
5528 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5530 for i := bar.Bands.Count - 1 downto 0 do begin
5531 if bar.Bands[ i ].Control.Handle = h then begin
5537 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5541 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5543 Control: TWinControl;
5546 Control := FindControl(BandInfo^.hwndChild);
5547 if Control = nil then
5550 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5551 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5552 idx := ListCoolBar.Bands[ i ].ID;
5556 if Control = ListToolBar then begin
5557 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5558 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5559 BandInfo^.cxMinChild := 0;
5560 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5561 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5563 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5564 BandInfo^.cxMinChild := 0;
5565 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5569 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5574 ChevronPopupMenu.Items.Clear;
5575 Idx := RebarChevron^.uBand;
5576 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5577 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5578 ToolBarChevronMenu(ListToolBar);
5581 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5582 ChevronPopupMenu.Popup(p.x, p.y);
5586 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5588 Control: TWinControl;
5591 Control := FindControl(BandInfo^.hwndChild);
5592 if Control = nil then
5595 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5596 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5597 idx := BrowserCoolBar.Bands[ i ].ID;
5601 if Control = BrowserToolBar then begin
5602 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5603 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5604 BandInfo^.cxMinChild := 0;
5605 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5606 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5608 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5609 BandInfo^.cxMinChild := 0;
5610 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5614 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5619 ChevronPopupMenu.Items.Clear;
5620 Idx := RebarChevron^.uBand;
5621 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5622 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5623 ToolBarChevronMenu(BrowserToolBar)
5626 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5627 ChevronPopupMenu.Popup(p.x, p.y);
5631 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5633 if Column^.iImage = -1 then begin
5634 Column^.mask := Column^.mask or LVCF_FMT;
5636 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5637 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5641 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5646 for i := bar.ButtonCount - 1 downto 0 do begin
5647 if bar.Buttons[ i ].Action = action then begin
5648 Result := bar.Buttons[ i ];
5654 procedure TGikoForm.SetToolBarPopup;
5657 aIEButton : TToolButton;
5658 aCabinetBBSButton : TToolButton;
5659 aResRangeButton : TToolButton;
5660 aThreadRangeButton: TToolButton;
5662 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5664 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5665 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5666 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5667 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5668 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5670 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5671 if aIEButton <> nil then
5672 aIEButton.DropdownMenu := BrowserPopupMenu;
5673 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5674 if aCabinetBBSButton <> nil then
5675 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5676 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5677 if aResRangeButton <> nil then
5678 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5679 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5680 if aThreadRangeButton <> nil then
5681 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5684 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5685 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5689 // browserPos : TPoint;
5693 Wnd := WindowFromPoint(Mouse.CursorPos);
5695 if WheelDelta > 0 then
5700 if (Wnd = BrowserTab.Handle) or
5701 (Wnd = BrowserTab.Parent.Handle) then begin
5702 BrowserTab.ScrollTabs(Delta);
5704 if FIsHandledWheel then begin
5705 FIsHandledWheel := False;
5708 FIsHandledWheel := True;
5709 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5710 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5712 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5720 procedure TGikoForm.SetSelectWord( const text : string );
5723 if Length( text ) = 0 then
5725 GikoDM.AllItemAction.Checked := True;
5726 GikoDM.LogItemAction.Checked := False;
5727 GikoDM.NewItemAction.Checked := False;
5729 //
\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é
5730 if GikoDM.AllItemAction.Checked then
5731 GikoDM.AllItemAction.Checked := False;
5732 if GikoDM.LogItemAction.Checked then
5733 GikoDM.LogItemAction.Checked := False;
5734 if GikoDM.NewItemAction.Checked then
5735 GikoDM.NewItemaction.Checked := False;
5738 if Length( text ) = 0 then
5739 SetListViewType( gvtAll )
5741 SetListViewType( gvtUser, text, false );
5745 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5748 SetSelectWord( SelectComboBox.Text );
5752 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5753 Shift: TShiftState);
5761 if Key = VK_Return then
5764 end else if Key = 229 then begin
5765 if GikoSys.Setting.UseUndecided then begin
5766 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5767 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5768 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5769 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5770 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5771 SetLength(Str, Len);
5772 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5773 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5774 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5776 Str := SelectComboBox.Text + Str;
5780 end else if Length( SelectComboBox.Text ) = 0 then
5782 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5783 *
\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
5784 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5787 //
\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é
5788 if GikoDM.AllItemAction.Checked then
5789 GikoDM.AllItemAction.Checked := False;
5790 if GikoDM.LogItemAction.Checked then
5791 GikoDM.LogItemAction.Checked := False;
5792 if GikoDM.NewItemAction.Checked then
5793 GikoDM.NewItemaction.Checked := False;
5798 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5803 if Length( SelectComboBox.Text ) = 0 then
5805 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5806 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5811 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5812 procedure TGikoForm.ModifySelectList;
5819 if not SelectComboBoxPanel.Visible then
5822 if Length( SelectComboBox.Text ) > 0 then
5824 oldText := SelectComboBox.Text;
5825 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5827 GikoSys.Setting.SelectTextList.Delete( idx );
5828 idx := SelectComboBox.Items.IndexOf( oldText );
5830 SelectComboBox.Items.Delete( idx );
5831 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5832 SelectComboBox.Items.Insert( 0, oldText );
5833 SelectComboBox.Text := oldText;
5841 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5842 Shift: TShiftState; X, Y: Integer);
5847 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5850 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5851 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5852 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5854 If w <= 50 Then Begin
5855 //
\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
5856 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5857 pos.X := pos.X + (50 - w);
5859 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5863 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5864 //If SelectComboBox.Width <> w Then Begin
5865 If SelectComboBoxPanel.Width <> w Then Begin
5866 SelectComboBoxPanel.Width := w;
5867 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5868 GikoSys.Setting.SelectComboBoxWidth := w;
5869 DraggingSelectComboBoxPosition := pos;
5871 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5872 ResetBandInfo( ListCoolBar, ListToolBar );
5878 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5879 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5883 IsDraggingSelectComboBox := True;
5886 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5890 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5891 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5893 IsDraggingSelectComboBox := False;
5897 procedure TGikoForm.StatusBarResize(Sender: TObject);
5899 StatusBar.Panels[1].Width := StatusBar.Width -
5900 StatusBar.Panels[0].Width -
5901 StatusBar.Panels[2].Width;
5903 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5906 if (Length( SelectComboBox.Text ) = 0) or
5907 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5909 SelectComboBox.Text := '';
5910 SelectComboBox.Color := clWindow;
5915 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5918 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5921 if TObject(SenderNode.Data) is TFavoriteFolder then
5922 SourceNode.MoveTo(SenderNode, naAddChild)
5924 SourceNode.MoveTo(SenderNode, naInsert);
5928 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5932 FavoBoardItem: TFavoriteBoardItem;
5933 FavoThreadItem: TFavoriteThreadItem;
5935 ThreadItem: TThreadItem;
5938 if (SenderNode = nil) or (Source = nil) then
5941 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5942 FavNode := SenderNode.Parent
5944 FavNode := SenderNode;
5948 if Source is TBoard then begin
5949 Board := TBoard( Source );
5950 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5951 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5952 Node.ImageIndex := 15;
5953 Node.SelectedIndex := 15;
5954 end else if Source is TFavoriteBoardItem then begin
5955 FavoBoardItem := TFavoriteBoardItem( Source );
5956 Board := FavoBoardItem.Item;
5957 if Board <> nil then
5958 if not Board.IsThreadDatRead then
5959 GikoSys.ReadSubjectFile(Board);
5960 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5961 Node.ImageIndex := 15;
5962 Node.SelectedIndex := 15;
5963 end else if Source is TThreadItem then begin
5964 ThreadItem := TThreadItem( Source );
5965 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5966 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5967 Node.ImageIndex := 16;
5968 Node.SelectedIndex := 16;
5969 end else if Source is TBrowserRecord then begin
5970 ThreadItem := TBrowserRecord( Source ).Thread;
5971 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5972 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5973 Node.ImageIndex := 16;
5974 Node.SelectedIndex := 16;
5975 end else if Source is TFavoriteThreadItem then begin
5976 FavoThreadItem := TFavoriteThreadItem( Source );
5977 ThreadItem := FavoThreadItem.Item;
5978 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5979 Node.ImageIndex := 16;
5980 Node.SelectedIndex := 16;
5983 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5985 FavoriteMoveTo( SenderNode, Node );
5989 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5992 SourceNode: TTreeNode;
5993 LinkToolButton: TLinkToolButton;
5996 if SenderNode = nil then
5999 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6000 if FDropSpaceNode <> nil then
6001 SenderNode := FDropSpaceNode;
6003 if Source = FavoriteTreeView then begin
6004 SourceNode := FavoriteTreeView.Selected;
6005 FavoriteMoveTo( SenderNode, SourceNode );
6006 end else if Source is TLinkToolButton then begin
6007 LinkToolButton := TLinkToolButton( Source );
6008 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6009 FavoriteMoveTo( SenderNode, SourceNode );
6010 end else if Source = BrowserTab then begin
6011 idx := BrowserTab.TabIndex;
6012 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6013 end else if Source = ListView then begin
6014 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6015 end else if Source = TreeView then begin
6016 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6020 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6023 SenderNode: TTreeNode;
6026 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6027 if SenderNode <> nil then begin
6028 FavoriteDragDrop( SenderNode, Source );
6031 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6032 if FDropSpaceNode <> nil then begin
6034 FDropSpaceNode.Delete;
6036 FDropSpaceNode := nil;
6044 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6045 Node: TTreeNode; var S: String);
6048 FavoriteTreeView.ReadOnly := True;
6053 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6054 Shift: TShiftState);
6056 if not TTreeView(Sender).IsEditing then begin
6060 FClickNode := FavoriteTreeView.Selected;
6061 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6065 FClickNode := FavoriteTreeView.Selected;
6066 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6070 FavoriteClick( FavoriteTreeView.Selected );
6071 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6074 FavoriteTreeViewDblClick( Sender );
6077 //
\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·
6078 if Key = VK_ESCAPE then begin
6079 if (TTreeView(Sender).Selected <> nil) then begin
6080 TTreeView(Sender).Selected.Text := FOrigenCaption;
6082 TTreeView(Sender).Selected.Focused := False;
6088 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6091 LinkToolButton: TLinkToolButton;
6094 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6096 FClickNode := FavoriteTreeView.Selected;
6098 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6100 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6101 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6102 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6103 FClickNode := FavoriteTreeView.Items[i];
6107 for i := 0 to FClickNode.Count - 1 do begin
6108 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6109 FClickNode := FClickNode.Item[i];
6116 if FClickNode = nil then begin
6117 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6118 FavoriteTreeDeletePopupMenu.Visible := False;
6119 FavoriteTreeRenamePopupMenu.Visible := False;
6120 FavoriteTreeNewFolderPopupMenu.Visible := False;
6121 FavoriteTreeURLCopyPopupMenu.Visible := False;
6122 FavoriteTreeNameCopyPopupMenu.Visible := False;
6123 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6124 FavoriteTreeReloadPopupMenu.Visible := False;
6125 FavoriteTreeLogDeletePopupMenu.Visible := False;
6126 end else if FClickNode.IsFirstNode then begin
6127 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6128 FavoriteTreeDeletePopupMenu.Visible := False;
6129 FavoriteTreeRenamePopupMenu.Visible := False;
6130 FavoriteTreeNewFolderPopupMenu.Visible := True;
6131 FavoriteTreeURLCopyPopupMenu.Visible := False;
6132 FavoriteTreeNameCopyPopupMenu.Visible := True;
6133 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6134 FavoriteTreeReloadPopupMenu.Visible := False;
6135 FavoriteTreeLogDeletePopupMenu.Visible := False;
6136 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6137 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6138 FavoriteTreeDeletePopupMenu.Visible := True;
6139 FavoriteTreeRenamePopupMenu.Visible := False;
6140 FavoriteTreeNewFolderPopupMenu.Visible := True;
6141 FavoriteTreeURLCopyPopupMenu.Visible := False;
6142 FavoriteTreeNameCopyPopupMenu.Visible := True;
6143 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6144 FavoriteTreeReloadPopupMenu.Visible := False;
6145 FavoriteTreeLogDeletePopupMenu.Visible := False;
6146 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6147 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6148 FavoriteTreeDeletePopupMenu.Visible := True;
6149 FavoriteTreeRenamePopupMenu.Visible := True;
6150 FavoriteTreeNewFolderPopupMenu.Visible := True;
6151 FavoriteTreeURLCopyPopupMenu.Visible := False;
6152 FavoriteTreeNameCopyPopupMenu.Visible := True;
6153 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6154 FavoriteTreeReloadPopupMenu.Visible := False;
6155 FavoriteTreeLogDeletePopupMenu.Visible := False;
6156 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6157 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6158 FavoriteTreeDeletePopupMenu.Visible := True;
6159 FavoriteTreeRenamePopupMenu.Visible := True;
6160 FavoriteTreeNewFolderPopupMenu.Visible := True;
6161 FavoriteTreeURLCopyPopupMenu.Visible := True;
6162 FavoriteTreeNameCopyPopupMenu.Visible := True;
6163 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6164 FavoriteTreeReloadPopupMenu.Visible := True;
6165 FavoriteTreeLogDeletePopupMenu.Visible := True;
6166 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6167 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6168 FavoriteTreeDeletePopupMenu.Visible := True;
6169 FavoriteTreeRenamePopupMenu.Visible := True;
6170 FavoriteTreeNewFolderPopupMenu.Visible := True;
6171 FavoriteTreeURLCopyPopupMenu.Visible := True;
6172 FavoriteTreeNameCopyPopupMenu.Visible := True;
6173 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6174 FavoriteTreeReloadPopupMenu.Visible := True;
6175 FavoriteTreeLogDeletePopupMenu.Visible := False;
6177 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6178 FavoriteTreeDeletePopupMenu.Visible := False;
6179 FavoriteTreeRenamePopupMenu.Visible := False;
6180 FavoriteTreeNewFolderPopupMenu.Visible := False;
6181 FavoriteTreeURLCopyPopupMenu.Visible := False;
6182 FavoriteTreeNameCopyPopupMenu.Visible := False;
6183 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6184 FavoriteTreeReloadPopupMenu.Visible := False;
6185 FavoriteTreeLogDeletePopupMenu.Visible := False;
6190 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6195 if not (TObject(node.Data) is TFavoriteFolder) then
6198 for i := 0 to node.Count - 1 do
6200 if TObject(node.Item[i].Data) is TFavoriteFolder then
6201 FavoriteBrowseFolder( node.Item[i] )
6202 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6203 FavoriteClick( node.Item[i], False );
6207 // *************************************************************************
6208 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6209 // *************************************************************************
6210 procedure TGikoForm.FavoriteTreeViewDblClick(Sender: TObject);
6215 //
\83N
\83\8a\83b
\83N
\8e\9e\82Ì
\91I
\91ð
\83C
\83x
\83\93\83g
\82Æ
\93¯
\82¶
\82È
\82ç
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\8eÀ
\8ds
6216 pos := FMouseDownPos;
6217 if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(pos.X, pos.Y)) then begin
6218 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6219 rect := FClickNode.DisplayRect(true);
6220 if ((rect.Left <= pos.X) and (rect.Right >= pos.X)) and
6221 ((rect.Bottom >= pos.Y) and (rect.Top <= pos.Y)) then begin
6222 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6228 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6234 for i := 0 to Node.Count - 1 do begin
6235 if Node.Item[i].Data = FindPointer then begin
6236 Result := Node.Item[i];
6238 end else if Node.Item[i].Count > 0 then begin
6239 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6240 if Found <> nil then begin
6251 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6255 SenderNode: TTreeNode;
6259 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6260 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6261 SenderNode := FavoriteTreeView.Items[i];
6265 SenderNode.Selected := False;
6267 FavoriteDragDrop( SenderNode, Source );
6272 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6273 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6275 if FDragWFirst <> true then begin
6276 FDragWFirst := false;
6278 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6279 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6283 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6284 if GikoSys.Setting.ListWidthState = glsMin then begin
6285 GikoDM.BrowserMaxAndFocusAction.Execute;
6288 if GikoSys.Setting.ListHeightState = glsMin then begin
6289 GikoDM.BrowserMaxAndFocusAction.Execute;
6295 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6296 Y: Integer; State: TDragState; var Accept: Boolean);
6299 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6303 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6307 if FDropSpaceNode <> nil then begin
6309 FDropSpaceNode.Delete;
6311 FDropSpaceNode := nil;
6318 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6319 MousePos: TPoint; var Handled: Boolean);
6322 FToolBarSettingSender := tssList;
6323 MousePos := ListCoolBar.ClientToScreen( MousePos );
6324 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6328 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6329 MousePos: TPoint; var Handled: Boolean);
6332 FToolBarSettingSender := tssMain;
6333 MousePos := MainCoolBar.ClientToScreen( MousePos );
6334 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6338 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6339 MousePos: TPoint; var Handled: Boolean);
6342 FToolBarSettingSender := tssBrowser;
6343 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6344 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6347 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6349 if FListViewBackGroundColor <> value then begin
6350 FListViewBackGroundColor := value;
6351 ListView.Color := FListViewBackGroundColor;
6354 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6356 threadItem : TThreadItem;
6360 if FClickNode = nil then Exit;
6362 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6364 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6365 if threadItem = nil then
6367 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6369 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6371 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6372 if boardItem = nil then
6374 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6380 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6381 MousePos: TPoint; var Handled: Boolean);
6385 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6386 if BrowserTab.TabIndex <> idx then begin
6387 BrowserTab.TabIndex := idx;
6388 BrowserTab.OnChange(nil);
6392 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6394 ThreadItem: TThreadItem;
6400 boardPlugIn : TBoardPlugIn;
6402 if Number = 0 then Exit;
6403 ThreadItem := GetActiveContent;
6405 if ThreadItem <> nil then begin
6406 //if ThreadItem.IsBoardPlugInAvailable then begin
6407 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6408 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6409 //boardPlugIn := ThreadItem.BoardPlugIn;
6410 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6412 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6413 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6414 //
\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
6415 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6417 FileName := ThreadItem.FilePath;
6418 tmp := GikoSys.ReadThreadFile(FileName, Number);
6420 if tmp <> '' then begin
6421 THTMLCreate.DivideStrLine(tmp, @Res);
6423 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6424 if ReplaceTag then begin
6425 Header := CustomStringReplace(Header, '</b>', '',true);
6426 Header := CustomStringReplace(Header, '<b>', '',true);
6427 Header := CustomStringReplace(Header, '<br>', '',true);
6428 Header := DeleteFontTag(Header);
6430 //if ThreadItem.IsBoardPlugInAvailable then begin
6431 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6432 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6433 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6435 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6436 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6437 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6438 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6441 Body := CustomStringReplace(Body, '</a>', '',true);
6443 Body := HTMLCreater.DeleteLink(Body);
6444 if ReplaceTag then begin
6445 Body := CustomStringReplace(Body, '<', '<');
6446 Body := CustomStringReplace(Body, '>', '>');
6447 Body := CustomStringReplace(Body, '"', '"');
6448 Body := CustomStringReplace(Body, '&', '&');
6449 //Body := CustomStringReplace(Body, ' ', ' ');
6452 Header := Header + Body;
6454 Clipboard.SetTextBuf( PChar(Header) );
6460 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6462 AddRoundNameMenu(dummy1);
6465 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6467 FavoriteDM.URLReplace(oldURLs, newURLs);
6470 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6472 RoundList.URLReplace(oldURLs, newURLs);
6475 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6477 Filename = 'tab.sav';
6478 bFilename = '~tab.sav';
6484 oldBoardName: string;
6486 newBoardName: string;
6487 TabList: TStringList;
6490 if oldURLs.Count <> newURLs.Count then begin
6493 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6494 TabList := TStringList.Create;
6496 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6498 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6499 //
\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
6500 for i := 0 to oldURLs.Count - 1 do begin
6501 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6502 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6503 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6504 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6505 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6506 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6508 for j := 0 to TabList.Count - 1 do begin
6509 tempString := TabList[j];
6510 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6511 tempString := StringReplace(tempString, oldHost, newHost,[]);
6512 TabList[j] := tempString;
6516 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6518 if FileExists( GikoSys.GetAppDir + Filename) then begin
6519 if FileExists( GikoSys.GetAppDir + bFilename) then
6520 DeleteFile(GikoSys.GetAppDir + bFilename);
6522 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6523 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6526 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6534 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6535 procedure TGikoForm.OnMinimize;
6537 if FActiveContent <> nil then begin
6538 FIsMinimize := mtMinimizing;
6539 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6543 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6544 procedure TGikoForm.OnMinimized;
6546 FIsMinimize := mtMinimized;
6550 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6552 CoolBarResized( Sender, BrowserCoolBar );
6555 // *************************************************************************
6556 // ExternalBoardPlugInMain
6557 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6558 // *************************************************************************
6559 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6562 boardPlugIn : TBoardPlugIn;
6565 if not (Sender is TMenuItem) then
6568 item := TMenuItem( Sender );
6569 if not Assigned( Pointer( item.Tag ) ) then
6572 //
\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·
6573 boardPlugIn := TBoardPlugIn( item.Tag );
6574 boardPlugIn.PlugInMenu( item.Handle );
6577 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6578 procedure TGikoForm.TreeClick( Node : TTreeNode );
6584 if FTreeType = gttHistory then begin
6586 if TObject( Node.Data ) is TFavoriteThreadItem then
6587 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6588 FavoriteClick( Node );
6591 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6592 if ActiveList = Node.Data then
6595 ActiveListColumnSave;
6597 if TObject(Node.Data) is TBBS then begin
6598 SetActiveList(Node.data);
6599 end else if TObject(Node.Data) is TCategory then begin
6600 SetActiveList(Node.data);
6601 end else if TObject(Node.Data) is TBoard then begin
6602 if not TBoard(Node.Data).IsThreadDatRead then begin
6603 Screen.Cursor := crHourGlass;
6605 if not TBoard(Node.Data).IsThreadDatRead then
6606 GikoSys.ReadSubjectFile(Node.Data);
6608 Screen.Cursor := crDefault;
6611 SetActiveList(Node.data);
6614 if TObject( Node.Data ) is TBoard then begin // not TCategory
6615 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6616 if GikoSys.Setting.ListWidthState = glsMax then begin
6617 GikoDM.BrowserMinAction.Execute;
6618 if GikoForm.Visible then
6622 if GikoSys.Setting.ListHeightState = glsMax then begin
6623 GikoDM.BrowserMinAction.Execute;
6624 if GikoForm.Visible then
6632 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6633 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6636 ThreadItem : TThreadItem;
6637 shiftDown : Boolean;
6640 if Node = nil then Exit;
6642 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6644 if FTreeType = gtt2ch then begin
6645 if not (TObject(Node.Data) is TBoard) then Exit;
6646 Board := TBoard(Node.Data);
6647 DownloadList(Board, shiftDown);
6648 end else if FTreeType = gttHistory then begin
6649 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6650 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6651 DownloadContent(ThreadItem, shiftDown);
6655 // *************************************************************************
6656 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6657 // *************************************************************************
6658 procedure TGikoForm.TreeViewClick(Sender: TObject);
6660 FClickNode := TreeView.Selected;
6661 FMouseDownPos := TreeView.ScreenToClient(Mouse.CursorPos);
6663 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6664 Shift: TShiftState);
6666 if Key = VK_BACK then begin
6667 // UpFolderButtonClick(Sender);
6668 end else if Key = VK_SPACE then begin
6669 TreeDoubleClick( TreeView.Selected );
6670 end else if Key = VK_RETURN then begin
6671 TreeClick( TreeView.Selected );
6672 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6676 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6677 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6679 favItem : TTreeNode;
6680 favThreadItem : TFavoriteThreadItem;
6686 FMouseDownPos.X := X;
6687 FMouseDownPos.Y := Y;
6691 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6692 if favItem = nil then Exit;
6694 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6695 favThreadItem := TFavoriteThreadItem( favItem.Data );
6696 if favThreadItem.Item <> nil then
6697 InsertBrowserTab( favThreadItem.Item, False );
6704 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6707 if FIsIgnoreResize <> rtNone then
6710 if GikoSys.Setting.ListOrientation = gloVertical then begin
6711 if GikoSys.Setting.ListHeightState = glsMin then begin
6712 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6713 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6719 procedure TGikoForm.OnResized;
6724 FOldFormWidth := Width;
6725 FIsIgnoreResize := rtNone;
6730 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6731 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6736 //
\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)
6737 if FActiveContent <> nil then begin
6738 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6739 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6741 FIsMinimize := mtNone;
6746 // *************************************************************************
6747 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6748 // *************************************************************************
6749 procedure TGikoForm.FavoriteTreeViewMouseUp(Sender: TObject;
6750 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6752 if (Button = mbLeft) and not (ssDouble in Shift) then begin
6753 if (FClickNode <> nil) and (FClickNode = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6754 FavoriteClick( TObject( FClickNode ) );
6759 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6764 stlist : TStringList;
6765 i, count, rc : Integer;
6771 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6772 FActiveContent.Browser.SetFocus;
6775 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6776 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6777 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6778 if (Assigned(e)) then begin
6779 if (e.className = 'date') or (e.id = 'date') then begin
6781 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6782 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6783 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6784 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6787 stlist := TStringList.Create;
6789 stList.DelimitedText := AID;
6791 for i := 0 to stList.Count - 1 do
6792 if Length(WideString(stList[i])) = 8 then begin
6793 if GikoSys.NotDateorTimeString(stList[i]) then begin
6802 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6804 if count > 20 then begin
6805 rc := GikoUtil.MsgBox(Handle,
6806 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6807 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6808 MB_YESNO or MB_ICONQUESTION);
6809 limited := rc <> ID_YES;
6811 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6812 FActiveContent.IDAnchorPopup(body);
6821 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6822 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6824 SelectTimer.Interval := 0;
6825 if not (ListView.Selected = nil) then
6826 if( FActiveContent = nil) or
6827 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6832 function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
6834 rec : TBrowserRecord;
6837 bound := BrowserTab.Tabs.Count -1;
6838 if bound = -1 then begin
6840 Exit; //for
\82É
\94ò
\82Î
\82È
\82¢
\82Å
\91\80\8dì
\82ð
\94²
\82¯
\82é
6843 for i := 0 to bound do begin
6844 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6845 if( rec <> nil) and (rec.Thread <> nil) then
6846 AStringList.Add( rec.Thread.URL );
6851 function TGikoForm.SaveTabURLs : Boolean;
6853 Filename = 'tab.sav';
6854 bFilename = '~tab.sav';
6856 SaveStringList: TStringList;
6860 SaveStringList := TStringList.Create;
6862 if GetTabURLs(SaveStringList) then begin
6863 if FileExists( GikoSys.GetAppDir + Filename) then begin
6864 if FileExists( GikoSys.GetAppDir + bFilename) then
6865 DeleteFile(GikoSys.GetAppDir + bFilename);
6867 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6868 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6870 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
6874 SaveStringList.Free;
6878 function TGikoForm.LoadTabURLs : Boolean;
6883 GikoTab : TGikoTabAppend;
6887 fileName := ExtractFilePath(Application.ExeName) + 'tab.sav';
6888 URLs := TStringList.Create();
6889 GikoTab := GikoSys.Setting.BrowserTabAppend;
6893 if FileExists(fileName) then begin
6894 URLs.LoadFromFile(fileName);
6895 bound := URLs.Count - 1;
6896 if bound > -1 then begin
6897 GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
6898 for i := 0 to bound do begin
6899 item := BBSsFindThreadFromURL( URLs[ i ] );
6901 InsertBrowserTab( item, false );
6908 on EFOpenError do begin
6909 ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
6913 GikoSys.Setting.BrowserTabAppend := GikoTab;
6920 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6921 procedure TGikoForm.ActiveListColumnSave;
6923 ActivListObj : TObject;
6924 i, id, idx : Integer;
6925 BBSOrder : TGikoBBSColumnList;
6926 CategoryOrder : TGikoCategoryColumnList;
6927 BoardOrder : TGikoBoardColumnList;
6930 ActivListObj := ActiveList;
6931 if ActivListObj is TBBS then begin
6932 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6933 BBSOrder := TGikoBBSColumnList.Create;
6935 for i := 0 to ListView.Columns.Count - 1 do begin
6936 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6937 idx := ListView.Column[ i ].Tag;
6938 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6939 BBSOrder.Add( TGikoBBSColumnID( id ) );
6940 //
\95\9d\82Ì
\95Û
\91¶
6941 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6943 for i := 0 to ListView.Columns.Count - 1 do
6944 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6945 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6949 end else if ActivListObj is TCategory then begin
6950 //=====
\94Â
\83\8a\83X
\83g =====
6951 CategoryOrder := TGikoCategoryColumnList.Create;
6953 for i := 0 to ListView.Columns.Count - 1 do begin
6954 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6955 idx := ListView.Column[ i ].Tag;
6956 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6957 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6958 //
\95\9d\82Ì
\95Û
\91¶
6959 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6961 for i := 0 to ListView.Columns.Count - 1 do
6962 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6963 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6967 end else if ActivListObj is TBoard then begin
6968 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6969 BoardOrder := TGikoBoardColumnList.Create;
6971 for i := 0 to ListView.Columns.Count - 1 do begin
6972 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6973 idx := ListView.Column[ i ].Tag;
6974 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6975 BoardOrder.Add( TGikoBoardColumnID( id ) );
6976 //
\95\9d\82Ì
\95Û
\91¶
6977 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6979 for i := 0 to ListView.Columns.Count - 1 do
6980 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6981 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6989 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6990 Column: TListColumn; Point: TPoint);
6996 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6997 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6998 ListColumnPopupMenu.Items.Items[ i ].Free;
7000 //
\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¢)
7001 if TObject( FActiveList ) is TBBS then begin
7003 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7004 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7005 item := TMenuItem.Create( ListColumnPopupMenu );
7006 item.Caption := GikoBBSColumnCaption[ i ];
7008 item.OnClick := ListColumnPopupMenuOnClick;
7009 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7010 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7011 item.Checked := True;
7015 ListColumnPopupMenu.Items.Add( item );
7018 end else if TObject( FActiveList ) is TCategory then begin
7020 //=====
\94Â
\83\8a\83X
\83g =====
7021 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7022 item := TMenuItem.Create( ListColumnPopupMenu );
7023 item.Caption := GikoCategoryColumnCaption[ i ];
7025 item.OnClick := ListColumnPopupMenuOnClick;
7026 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7027 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7028 item.Checked := True;
7032 ListColumnPopupMenu.Items.Add( item );
7035 end else if TObject( FActiveList ) is TBoard then begin
7037 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7038 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7039 item := TMenuItem.Create( ListColumnPopupMenu );
7040 item.Caption := GikoBoardColumnCaption[ i ];
7042 item.OnClick := ListColumnPopupMenuOnClick;
7043 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7044 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7045 item.Checked := True;
7049 ListColumnPopupMenu.Items.Add( item );
7054 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7055 Point := ListView.ClientToScreen( Point );
7056 if ListColumnPopupMenu.Items.Count > 0 then
7057 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7061 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7062 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7069 if not (Sender is TMenuItem) then
7072 ActiveListColumnSave;
7073 item := TMenuItem( Sender );
7075 if TObject( FActiveList ) is TBBS then
7076 orderList := GikoSys.Setting.BBSColumnOrder
7077 else if TObject( FActiveList ) is TCategory then
7078 orderList := GikoSys.Setting.CategoryColumnOrder
7079 else if TObject( FActiveList ) is TBoard then
7080 orderList := GikoSys.Setting.BoardColumnOrder
7084 if item.Checked then begin
7085 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7086 for i := orderList.Count - 1 downto 0 do begin
7087 if Integer( orderList[ i ] ) = item.Tag then begin
7088 orderList.Delete( i );
7093 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7094 orderList.Add( Pointer( item.Tag ) );
7097 SetActiveList( FActiveList );
7101 procedure TGikoForm.OnGestureStart(Sender: TObject);
7106 procedure TGikoForm.OnGestureMove(Sender: TObject);
7113 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7115 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7116 s := MouseGesture.GetGestureStr;
7118 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7119 if Action <> nil then
7120 ActStr := '
\81i' + Action.Caption + '
\81j';
7121 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7122 StatusBar.Panels[1].Text := s;
7125 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7130 s := MouseGesture.GetGestureStr;
7131 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7132 if Action <> nil then
7134 StatusBar.Panels[1].Text := '';
7137 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7138 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7140 ThreadItem: TThreadItem;
7142 DefaultDraw := true;
7143 if TObject(Item.Data) is TThreadItem then begin
7144 ThreadItem := TThreadItem(Item.Data);
7145 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7146 ListView.Canvas.Brush.Color := FOddColor;
7147 //
\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
7148 if (GikoSys.Setting.UnFocusedBold) and
7149 (Item.Selected) and (not ListView.Focused) then begin
7150 ListView.Canvas.Font.Style := [fsBold];
7153 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7156 if ThreadItem.UnRead then
7157 ListView.Canvas.Font.Style := [fsBold];
7162 procedure TGikoForm.FormActivate(Sender: TObject);
7164 if GikoSys.Setting.GestureEnabled then begin
7165 GikoSys.Setting.Gestures.ClearGesture;
7166 GikoSys.Setting.Gestures.LoadGesture(
7167 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7168 MouseGesture.UnHook;
7169 MouseGesture.OnGestureStart := OnGestureStart;
7170 MouseGesture.OnGestureMove := OnGestureMove;
7171 MouseGesture.OnGestureEnd := OnGestureEnd;
7172 MouseGesture.SetHook(Handle);
7174 //MouseGesture.UnHook;
7175 MouseGesture.OnGestureStart := nil;
7176 MouseGesture.OnGestureMove := nil;
7177 MouseGesture.OnGestureEnd := nil;
7181 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7183 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7184 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7188 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7193 affectedBand : TCoolBand;
7196 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7197 FIsIgnoreResize := rtResizing;
7198 PostMessage( Handle, USER_RESIZED, 0, 0 );
7200 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7201 if CoolBar = MainCoolBar then begin
7202 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7203 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7204 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7205 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7206 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7208 end else if CoolBar = ListCoolBar then begin
7209 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7210 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7211 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7212 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7213 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7215 end else if CoolBar = BrowserCoolBar then begin
7216 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7217 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7218 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7219 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7220 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7223 if not (Sender is TToolBar) or (CoolBar = nil) then
7225 toolbar := TToolBar( Sender );
7226 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7227 affectedBand := nil;
7228 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7229 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7230 band := CoolBar.Bands[ i ];
7231 if band.Break or (i = 0) then begin
7232 if i + 1 < CoolBar.Bands.Count then
7233 if not CoolBar.Bands[ i + 1 ].Break then
7234 affectedBand := CoolBar.Bands[ i + 1 ];
7237 affectedBand := CoolBar.Bands[ i - 1 ];
7242 //
\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·
7243 if CoolBar = MainCoolBar then begin
7244 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7245 coolSet.FCoolWidth := toolbar.Width + 25;
7246 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7247 if affectedBand <> nil then begin
7248 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7249 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7250 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7252 end else if CoolBar = ListCoolBar then begin
7253 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7254 coolSet.FCoolWidth := toolbar.Width + 25;
7255 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7256 if affectedBand <> nil then begin
7257 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7258 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7259 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7261 end else if CoolBar = BrowserCoolBar then begin
7262 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7263 coolSet.FCoolWidth := toolbar.Width + 25;
7264 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7265 if affectedBand <> nil then begin
7266 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7267 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7268 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7275 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7277 CoolBarResized( Sender, MainCoolBar );
7280 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7282 CoolBarResized( Sender, ListCoolBar );
7285 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7287 CoolBarResized( Sender, BrowserCoolBar );
7290 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7291 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7293 ThreadItem : TThreadItem;
7294 ReadList : TStringList;
7295 wordCount : TWordCount;
7297 ThreadItem := GetActiveContent;
7298 ReadList := TStringList.Create;
7299 wordCount := TWordCount.Create;
7301 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7302 {$IFDEF SPAM_FILTER_ENABLED}
7303 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7304 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7305 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7306 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7307 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7309 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7310 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7315 FActiveContent.Repaint := true;
7316 if ThreadItem <> nil then
7317 InsertBrowserTab( ThreadItem, True );
7320 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7321 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7323 ThreadItem : TThreadItem;
7326 ReadList : TStringList;
7327 wordCount : TWordCount;
7329 No := KokoPopupMenu.Tag;
7330 if No = 0 then Exit;
7331 ThreadItem := GetActiveContent;
7332 if ThreadItem = nil then Exit;
7333 body := TStringList.Create;
7335 GikoSys.GetSameIDRes(No, ThreadItem, body);
7337 ReadList := TStringList.Create;
7338 wordCount := TWordCount.Create;
7340 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7341 {$IFDEF SPAM_FILTER_ENABLED}
7342 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7343 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7345 for i := 0 to body.Count - 1 do begin
7346 {$IFDEF SPAM_FILTER_ENABLED}
7347 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7348 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7349 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7351 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7352 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7358 FActiveContent.Repaint := true;
7359 if ThreadItem <> nil then
7360 InsertBrowserTab( ThreadItem, True );
7367 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7369 firstElement: IHTMLElement;
7370 document: IHTMLDocument2;
7372 document := FActiveContent.Browser.Document as IHTMLDocument2;
7373 if Assigned(document) then
7374 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7375 if Assigned(firstElement) then
7376 if firstElement.style.visibility <> 'hidden' then
7377 firstElement.style.visibility := 'hidden';
7381 procedure TGikoForm.RepaintAllTabsBrowser();
7384 ThreadItem: TThreadItem;
7386 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7387 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7389 ThreadItem := GetActiveContent;
7390 if ThreadItem <> nil then
7391 InsertBrowserTab( ThreadItem, True );
7395 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7396 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7397 Shift: TShiftState);
7399 //
\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Ì
7400 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7401 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7402 SelectTimer.Interval := 0;
7403 if not (GikoSys.Setting.BrowserTabVisible) then begin
7404 if (GetActiveList is TBoard) then begin
7405 //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
7406 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7407 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7408 (Key = VK_UP) or (Key = VK_DOWN)) then
7409 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7413 // *************************************************************************
7414 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7415 // *************************************************************************
7416 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7417 Node: TTreeNode; var AllowEdit: Boolean);
7419 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7420 FOrigenCaption := Node.Text;
7422 // *************************************************************************
7423 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7424 // *************************************************************************
7425 function TGikoForm.GetMainForm(): TComponent;
7427 Result := Application.MainForm;
7429 // *************************************************************************
7430 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7431 // *************************************************************************
7432 function TGikoForm.GetScreenCursor(): TCursor;
7434 Result := Screen.Cursor;
7436 // *************************************************************************
7437 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7438 // *************************************************************************
7439 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7441 if (Screen.Cursor <> Cursor) then
7442 Screen.Cursor := Cursor;
7444 // *************************************************************************
7445 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
7446 // *************************************************************************
7447 function TGikoForm.EditorFormExists(): boolean;
7452 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\92T
\82·
7453 for i := 0 to Screen.CustomFormCount - 1 do begin
7454 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
7460 // *************************************************************************
7461 //!
\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é
7462 // *************************************************************************
7463 procedure TGikoForm.AllEditroFormNameTextClearClear();
7467 for i := 0 to Screen.CustomFormCount - 1 do begin
7468 if TObject(Screen.CustomForms[i]) is TEditorForm then
7469 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7472 // *************************************************************************
7473 //!
\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é
7474 // *************************************************************************
7475 procedure TGikoForm.AllEditroFormMailTextClearClear();
7479 for i := 0 to Screen.CustomFormCount - 1 do begin
7480 if TObject(Screen.CustomForms[i]) is TEditorForm then
7481 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7484 // *************************************************************************
7485 //!
\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
7486 // *************************************************************************
7487 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7489 //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Ì
7490 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7491 if GikoDM.CabinetVisibleAction.Enabled then begin
7492 GikoDM.CabinetVisibleAction.Execute;
7495 // *************************************************************************
7496 //!
\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
7497 // *************************************************************************
7498 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7500 if GikoDM.FavoriteArrangeAction.Enabled then begin
7501 GikoDM.FavoriteArrangeAction.Execute;
7504 // *************************************************************************
7505 //!
\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
7506 // *************************************************************************
7507 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7508 var Handled: Boolean);
7512 //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ß
7513 if Self.Active then begin
7515 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7516 WM_KEYFIRST..WM_KEYLAST :
7518 //
\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ç
7519 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7520 wmMsg.Msg := Msg.message;
7521 wmMsg.CharCode := Word(Msg.wParam);
7522 wmMsg.KeyData := Msg.lParam;
7523 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7524 Self.OnShortCut(wmMsg, Handled);
7530 // *************************************************************************
7531 //!
\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
7532 // *************************************************************************
7533 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7535 Application.ProcessMessages;
7536 if not Application.Terminated then begin
7537 if PreviewTimer.Enabled then
7538 PreviewTimer.Enabled := False;
7539 //
\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
7540 if FHint <> nil then begin
7541 FHint.ReleaseHandle;
7544 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7545 if FPreviewBrowser <> nil then
7546 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7550 // *************************************************************************
7551 //!
\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
7552 // *************************************************************************
7553 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7558 if (Sender <> nil) then begin
7559 s := ' [' + Sender.ClassName + ']' + #13#10;
7561 s := ' [ Sender is nil ] ' + #13#10;
7564 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7566 // *************************************************************************
7567 //!
\83A
\83N
\83V
\83\87\83\93\82Ì
\83`
\83F
\83b
\83N
\8fó
\91Ô
\82Ì
\8f\89\8aú
\89» Form
\82ÌCreate
\82Å
\8cÄ
\82Ñ
\8fo
\82µ
\82Ä
\82à
\94½
\89f
\82µ
\82È
\82¢
7568 // *************************************************************************
7569 procedure TGikoForm.InitActionChecked();
7571 //
\83\8d\83O
\83C
\83\93\8fó
\91Ô
\82ð
\8dÄ
\90Ý
\92è
7572 GikoDM.LoginAction.Checked := GikoDM.LoginAction.Checked;
7573 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
7574 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
7575 //
\89æ
\96Ê
\82Ì
\95ª
\8a\84\82Ì
\8fó
\91Ô
\82ð
\8dÄ
\90Ý
\92è
7576 GikoDM.ArrangeAction.Checked := GikoDM.ArrangeAction.Checked;
7578 //
\83X
\83\8c\91S
\95\94\95\
\8e¦
\83{
\83^
\83\93\82ð
\89\9f\82³
\82ê
\82½
\8fó
\91Ô
\82É
\82·
\82é
7579 GikoDM.AllItemAction.Checked := True;
7580 GikoDM.AllResAction.Checked := True;
7582 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
7583 FResRangeMenuSelect := GikoSys.ResRange;
7584 case GikoSys.ResRange of
7587 GikoDM.AllResAction.Execute;
7591 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
7592 GikoDM.SelectResAction.Checked := True;
7595 case FResRangeMenuSelect of
7596 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
7597 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
7598 100: GikoDM.OnlyAHundredResAction.Checked := True;
7602 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
7603 case GikoSys.Setting.ThreadRange of
7606 GikoDM.AllItemAction.Checked := True;
7611 GikoDM.LogItemAction.Checked := True;
7616 GikoDM.NewItemAction.Checked := True;
7621 // *************************************************************************
7622 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7623 // *************************************************************************
7624 procedure TGikoForm.FavoriteTreeViewClick(Sender: TObject);
7626 //
\8c»
\8dÝ
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\95Û
\91¶
7627 FClickNode := FavoriteTreeView.Selected;
7628 FMouseDownPos := FavoriteTreeView.ScreenToClient(Mouse.CursorPos);
7630 // *************************************************************************
7631 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8fk
\8f¬
\8e\9e\83C
\83x
\83\93\83g
7632 // *************************************************************************
7633 procedure TGikoForm.FavoriteTreeViewCollapsing(Sender: TObject;
7634 Node: TTreeNode; var AllowCollapse: Boolean);
7636 //
\8fk
\8f¬
\82³
\82ê
\82½
\82ç
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83N
\83\8a\83b
\83N
\8e\9e\91I
\91ð
\83A
\83C
\83e
\83\80\82ð
\83N
\83\8a\83A
7639 // *************************************************************************
7640 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\93W
\8aJ
\8e\9e\83C
\83x
\83\93\83g
7641 // *************************************************************************
7642 procedure TGikoForm.FavoriteTreeViewExpanding(Sender: TObject;
7643 Node: TTreeNode; var AllowExpansion: Boolean);
7645 //
\93W
\8aJ
\82³
\82ê
\82½
\82ç
\95Û
\91¶
\82³
\82ê
\82Ä
\82¢
\82é
\83N
\83\8a\83b
\83N
\8e\9e\91I
\91ð
\83A
\83C
\83e
\83\80\82ð
\83N
\83\8a\83A
7648 // *************************************************************************
7649 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8fk
\8f¬
\8e\9e\83C
\83x
\83\93\83g
7650 // *************************************************************************
7651 procedure TGikoForm.TreeViewCollapsing(Sender: TObject; Node: TTreeNode;
7652 var AllowCollapse: Boolean);
7656 // *************************************************************************
7657 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\93W
\8aJ
\8e\9e\83C
\83x
\83\93\83g
7658 // *************************************************************************
7659 procedure TGikoForm.TreeViewExpanding(Sender: TObject; Node: TTreeNode;
7660 var AllowExpansion: Boolean);
7664 // *************************************************************************
7665 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
7666 // *************************************************************************
7667 procedure TGikoForm.TreeViewMouseUp(Sender: TObject; Button: TMouseButton;
7668 Shift: TShiftState; X, Y: Integer);
7670 if (Button = mbLeft) and not (ssDouble in Shift) then begin
7671 if (FClickNode <> nil) and (FClickNode = TreeView.GetNodeAt(X, Y)) then begin
7672 TreeClick(FClickNode);
7676 // *************************************************************************
7677 //!
\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¬
7678 // *************************************************************************
7679 procedure TGikoForm.CreateControlThread();
7681 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7682 FControlThread := TThreadControl.Create(True);
7683 FControlThread.MaxThreadCount := 1;
7684 FControlThread.Resume;
7685 FControlThread.OnDownloadEnd := DownloadEnd;
7686 FControlThread.OnDownloadMsg := DownloadMsg;
7687 FControlThread.OnWork := Work;
7688 FControlThread.OnWorkBegin := WorkBegin;
7689 FControlThread.OnWorkEnd := WorkEnd;
7691 // *************************************************************************
7692 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7693 // *************************************************************************
7694 procedure TGikoForm.CreateBrowsers(count: Integer);
7697 newBrowser: TWebBrowser;
7699 BrowserNullTab := TBrowserRecord.Create;
7700 BrowserNullTab.Browser := Browser;
7701 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7702 FBrowsers := TList.Create;
7703 for i := 0 to count -1 do begin
7704 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7705 newBrowser := FBrowsers[FBrowsers.Count - 1];
7706 TOleControl(newBrowser).Parent := BrowserPanel;
7707 TOleControl(newBrowser).Align := alNone;
7708 TOleControl(newBrowser).Left := 0;
7709 TOleControl(newBrowser).Top := 0;
7710 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7711 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7712 newBrowser.OnEnter := BrowserEnter;
7713 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7714 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7715 newBrowser.Navigate(BLANK_HTML);
7716 ShowWindow(newBrowser.Handle, SW_HIDE);
7718 BrowserNullTab.Browser.BringToFront;
7719 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7720 //
\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Ì
7721 //
\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Å
7722 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7723 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7724 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7725 Application.ProcessMessages;
7728 // *************************************************************************
7729 //!
\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é
7730 // *************************************************************************
7731 procedure TGikoForm.SetSelectComboBox();
7733 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7736 ToolButton: TToolButton;
7738 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7739 SelectComboBoxPanel.Visible := False;
7741 for i := ListToolBar.ControlCount - 1 downto 0 do
7743 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7745 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7746 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7747 SelectComboBoxPanel.Parent := ListToolBar;
7748 SelectComboBoxPanel.Visible := True;
7750 SelectComboBox.Left := 0;
7751 SelectComboBox.Top := 0;
7752 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7753 SelectComboBox.Width := SelectComboBoxPanel.Width -
7754 SelectComboBoxSplitter.Width;
7756 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7757 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7758 if ToolButton = nil then begin
7759 ToolButton := TToolButton.Create(ListToolBar);
7760 ToolButton.Name := DUMMYCOMPNAME;
7762 ToolButton.Style := tbsSeparator;
7763 ToolButton.Width := 0;
7764 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7765 ListToolBar.InsertControl(ToolButton);
7766 ToolButton.Visible := False;
7768 //
\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·
7769 if (i + 1) < ListToolBar.ControlCount then
7770 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7771 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7772 ListToolBar.Controls[ i + 1 ].Visible := False;
7775 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7776 ListToolBar.Controls[ i ].Visible := False;