6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord;
28 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
29 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
30 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
31 TResizeType = (rtNone, rtResizing);
33 // TBrowserRecord = class;
35 TGikoForm = class(TForm)
36 StatusBar: TStatusBar;
39 TreeSplitter: TSplitter;
42 ThreadMainPanel: TPanel;
43 ListSplitter: TSplitter;
45 ListView: TGikoListView;
49 MessageHideButton: TSpeedButton;
50 MessageListView: TListView;
51 MessageSplitter: TSplitter;
53 CabinetCloseSpeedButton: TSpeedButton;
55 CabinetSelectToolButton: TToolButton;
56 HistoryToolBar: TToolBar;
57 HistoryShowToolButton: TToolButton;
58 HistoryAllClearToolButton: TToolButton;
59 ItemIcon16: TImageList;
60 ItemIcon32: TImageList;
61 HotToobarImageList: TImageList;
62 ItemImageList: TImageList;
65 DeleteMenu: TMenuItem;
67 KidokuMenu: TMenuItem;
68 MidokuMenu: TMenuItem;
69 AllSelectMenu: TMenuItem;
71 StdToolBarMenu: TMenuItem;
72 CabinetMenu: TMenuItem;
75 CabinetVisibleMenu: TMenuItem;
76 MessageMenu: TMenuItem;
77 StatusBarMenu: TMenuItem;
79 LargeIconMenu: TMenuItem;
80 SmallIconMenu: TMenuItem;
82 DetailMenu: TMenuItem;
87 OptionMenu: TMenuItem;
92 BrowserPopupMenu: TPopupMenu;
93 ShowThreadMenu: TMenuItem;
94 ShowBoardMenu: TMenuItem;
95 ListIconPopupMenu: TPopupMenu;
96 LargeIconPMenu: TMenuItem;
97 SmallIconPMenu: TMenuItem;
99 DetailPMenu: TMenuItem;
100 ClosePopupMenu: TPopupMenu;
101 CloseMenu: TMenuItem;
111 ListPopupMenu: TPopupMenu;
112 ListRoundPMenu: TMenuItem;
113 ListReservPMenu: TMenuItem;
115 ItemRoundPMenu: TMenuItem;
117 KidokuPMenu: TMenuItem;
118 MidokuPMenu: TMenuItem;
119 AllSelectPMenu: TMenuItem;
120 UrlCopyPMenu: TMenuItem;
122 DeletePMenu: TMenuItem;
124 ViewPMenu: TMenuItem;
125 LargeIconLPMenu: TMenuItem;
126 SmallIconLPMenu: TMenuItem;
127 ListLPMenu: TMenuItem;
128 DetailLPMenu: TMenuItem;
146 KokoPopupMenu: TPopupMenu;
147 KokomadePMenu: TMenuItem;
149 MenuItem1: TMenuItem;
150 MenuItem2: TMenuItem;
151 BrowserTabPopupMenu: TPopupMenu;
156 TreePopupMenu: TPopupMenu;
157 TreeSelectThreadPupupMenu: TMenuItem;
158 TreeSelectBoardPupupMenu: TMenuItem;
160 TreeSelectURLPupupMenu: TMenuItem;
164 BrowserBottomPanel: TGikoPanel;
165 CabinetSelectPopupMenu: TPopupMenu;
167 ItemReservPMenu: TMenuItem;
168 RoundNamePopupMenu: TPopupMenu;
180 MessageImageList: TImageList;
181 ProgressBar: TProgressBar;
183 NameUrlCopyPMenu: TMenuItem;
190 ListCoolBar: TGikoCoolBar;
191 ListToolBar: TToolBar;
192 BrowserCoolBar: TGikoCoolBar;
193 BrowserToolBar: TToolBar;
194 ToolButton3: TToolButton;
195 ToolButton9: TToolButton;
196 ToolButton11: TToolButton;
197 ToolButton5: TToolButton;
198 ListNameToolBar: TToolBar;
199 ListNameLabel: TLabel;
201 BrowserNameToolBar: TToolBar;
202 ItemBoardImage: TImage;
203 BrowserBoardNameLabel: TLabel;
205 BrowserNameLabel: TLabel;
212 TreeSelectNameURLPupupMenu: TMenuItem;
216 BrowserTabToolBar: TToolBar;
217 BrowserTab: TTabControl;
228 FavoriteMenu: TMenuItem;
230 BoardFavoriteAddMenu: TMenuItem;
231 ThreadFavoriteAddMenu: TMenuItem;
233 TreeSelectFavoriteAddPupupMenu: TMenuItem;
234 FavoriteTreeView: TTreeView;
235 StateIconImageList: TImageList;
237 TopRightPanel: TPanel;
240 TopCoolPanel: TPanel;
241 MainCoolBar: TGikoCoolBar;
242 MenuToolBar: TToolBar;
243 StdToolBar: TToolBar;
244 AddressToolBar: TToolBar;
245 AddressComboBox: TComboBox;
246 MoveToToolButton: TToolButton;
247 AddressImageList: TImageList;
248 AddressToolBarMenu: TMenuItem;
258 PreviewTimer: TTimer;
259 MonazillaWebPageAction1: TMenuItem;
266 ChevronPopupMenu: TPopupMenu;
270 LinkToolBar: TToolBar;
275 LinkBarPopupMenu: TPopupMenu;
277 ThreadPopupMenu: TPopupMenu;
278 MenuItem4: TMenuItem;
279 MenuItem5: TMenuItem;
280 MenuItem6: TMenuItem;
283 SelectItemNameCopyAction1: TMenuItem;
287 SelectComboBox: TComboBox;
288 MainCoolBarPopupMenu: TPopupMenu;
289 StdToolBarVisiblePMenu: TMenuItem;
290 AddressToolBarVisiblePMenu: TMenuItem;
291 LinkToolBarVisiblePMenu: TMenuItem;
312 ToolButton16: TToolButton;
319 IndividualAbon1: TMenuItem;
321 IndividualAbon2: TMenuItem;
322 AntiIndivAbonMenuItem: TMenuItem;
323 AntiIndividualAbon: TMenuItem;
327 SearchBoardName: TMenuItem;
328 TreeSelectLogDeleteSeparator: TMenuItem;
331 FavoriteTreePopupMenu: TPopupMenu;
332 FavoriteTreeRenamePopupMenu: TMenuItem;
333 FavoriteTreeNewFolderPopupMenu: TMenuItem;
335 FavoriteTreeDeletePopupMenu: TMenuItem;
336 FavoriteToolBar: TToolBar;
337 FavoriteAddToolButton: TToolButton;
338 FavoriteArrangeToolButton: TToolButton;
339 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
341 FavoriteTreeReloadPopupMenu: TMenuItem;
343 FavoriteTreeURLCopyPopupMenu: TMenuItem;
344 FavoriteTreeNameCopyPopupMenu: TMenuItem;
345 FavoriteTreeLogDeletePopupMenu: TMenuItem;
347 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
348 ToolButton20: TToolButton;
350 ExportFavoriteFileAction1: TMenuItem;
361 TreeSelectLogDeletePopupMenu: TMenuItem;
363 BBSSelectPopupMenu: TPopupMenu;
364 PlugInMenu: TMenuItem;
365 TreeSelectNamePupupMenu: TMenuItem;
366 BrowserPanel: TPanel;
368 SelectThreadSave: TMenuItem;
372 OpenLogFolder: TMenuItem;
373 Browser: TWebBrowser;
376 ResRangePopupMenu: TPopupMenu;
377 ResRangeHundPMenuItem: TMenuItem;
378 ResRangeKokoPMenuItem: TMenuItem;
379 ResRangeNewPMenuItem: TMenuItem;
380 ResRangeAllPMenuItem: TMenuItem;
381 BrowsBoradHeadAction1: TMenuItem;
382 ThreadRangePopupMenu: TPopupMenu;
389 ResRangeSelectPMenuItem: TMenuItem;
390 ListColumnPopupMenu: TPopupMenu;
399 SelectComboBoxPanel: TPanel;
400 SelectComboBoxSplitter: TImage;
401 ToolButton1: TToolButton;
404 GikoApplicationEvents: TApplicationEvents;
411 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
412 procedure FormCreate(Sender: TObject);
413 procedure FormDestroy(Sender: TObject);
414 procedure BrowserStatusTextChange(Sender: TObject;
415 const Text: WideString);
416 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
417 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
418 var AllowChange: Boolean);
419 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
421 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
422 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
423 Button: TToolButton; State: TCustomDrawState;
424 var DefaultDraw: Boolean);
425 procedure BrowserBeforeNavigate2(Sender: TObject;
426 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
427 Headers: OleVariant; var Cancel: WordBool);
428 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
429 const ARect: TRect; var DefaultDraw: Boolean);
430 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
431 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
432 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
433 procedure ListViewCustomDraw(Sender: TCustomListView;
434 const ARect: TRect; var DefaultDraw: Boolean);
435 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
436 Shift: TShiftState; X, Y: Integer);
437 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
438 procedure MessageListViewResize(Sender: TObject);
439 procedure CabinetVisible( isVisible : Boolean );
440 procedure FormResize(Sender: TObject);
441 procedure ListPopupMenuPopup(Sender: TObject);
442 procedure TreePopupMenuPopup(Sender: TObject);
443 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
444 var Cancel: WordBool);
445 procedure ListSplitterMoved(Sender: TObject);
446 procedure BrowserTabChange(Sender: TObject);
447 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
448 Shift: TShiftState; X, Y: Integer);
449 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
450 State: TDragState; var Accept: Boolean);
451 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
452 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
454 procedure BrowserDocumentComplete(Sender: TObject;
455 const pDisp: IDispatch; var URL: OleVariant);
456 procedure RoundNamePopupMenuPopup(Sender: TObject);
457 procedure FormShow(Sender: TObject);
458 procedure BrowserTabToolBarResize(Sender: TObject);
459 procedure FavoriteMenuClick(Sender: TObject);
460 procedure MainCoolBarResize(Sender: TObject);
461 procedure AddressToolBarResize(Sender: TObject);
462 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
464 procedure BrowserEnter(Sender: TObject);
465 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
466 procedure PreviewTimerTimer(Sender: TObject);
467 procedure MessageHideButtonClick(Sender: TObject);
468 procedure HistoryAllClearToolButtonClick(Sender: TObject);
469 procedure MainCoolBarBandInfo(Sender: TObject;
470 var BandInfo: PReBarBandInfoA);
471 procedure MainCoolBarChevronClick(Sender: TObject;
472 RebarChevron: PNMRebarChevron);
473 procedure ListCoolBarBandInfo(Sender: TObject;
474 var BandInfo: PReBarBandInfoA);
475 procedure ListCoolBarChevronClick(Sender: TObject;
476 RebarChevron: PNMRebarChevron);
477 procedure BrowserCoolBarBandInfo(Sender: TObject;
478 var BandInfo: PReBarBandInfoA);
479 procedure BrowserCoolBarChevronClick(Sender: TObject;
480 RebarChevron: PNMRebarChevron);
481 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
482 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
483 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
484 procedure SelectComboBoxChange(Sender: TObject);
485 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
487 procedure SelectComboBoxExit(Sender: TObject);
488 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
489 Shift: TShiftState; X, Y: Integer);
490 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
491 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
492 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
493 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
494 procedure StatusBarResize(Sender: TObject);
495 procedure SelectComboBoxEnter(Sender: TObject);
496 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
498 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
499 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
501 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
503 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
504 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
505 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
506 Shift: TShiftState; X, Y: Integer);
507 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
508 State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
511 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
512 var Handled: Boolean);
513 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
514 var Handled: Boolean);
515 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
516 var Handled: Boolean);
517 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
518 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
519 var Handled: Boolean);
520 procedure BrowserTabPopupMenuPopup(Sender: TObject);
521 procedure BrowserTabResize(Sender: TObject);
522 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
524 procedure FavoriteTreeViewMouseDown(Sender: TObject;
525 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
526 procedure MessagePanelResize(Sender: TObject);
528 procedure SelectTimerTimer(Sender: TObject);
529 procedure ListViewColumnRightClick(Sender: TObject;
530 Column: TListColumn; Point: TPoint);
531 procedure ListViewCustomDrawItem(Sender: TCustomListView;
532 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
533 procedure FormActivate(Sender: TObject);
534 procedure BrowserPanelResize(Sender: TObject);
535 procedure MenuToolBarResize(Sender: TObject);
536 procedure ListToolBarResize(Sender: TObject);
537 procedure BrowserToolBarResize(Sender: TObject);
538 procedure KokoPopupMenuPopup(Sender: TObject);
539 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
541 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
542 var AllowEdit: Boolean);
543 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
544 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
545 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
546 var Handled: Boolean);
547 procedure GikoApplicationEventsDeactivate(Sender: TObject);
548 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
549 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
550 Shift: TShiftState; X, Y: Integer);
551 procedure GetResURLMenuClick(Sender: TObject);
554 FEnabledCloseButton: Boolean;
555 FClickNode: TTreeNode;
558 FPreviewBrowser: TWebBrowser;
560 FBrowserSizeHeight: Integer;
561 FBrowserSizeWidth: Integer;
562 FTabHintIndex: Integer;
563 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
564 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
565 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
566 FActiveList: TObject;
567 FActiveContent: TBrowserRecord; //
569 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
570 FTreeType: TGikoTreeType;
574 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
575 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
576 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
577 IsDraggingSelectComboBox : Boolean;
578 DraggingSelectComboBoxPosition : TPoint;
579 FSearchDialog: TSearchDialog;
580 FDropSpaceNode: TTreeNode;
581 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
582 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
583 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
584 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
585 FUseOddResOddColor : Boolean; ///<
\8eæ
\93¾
\83\8c\83X
\90\94\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\83\8c\83X
\90\94\82ª
\88á
\82Á
\82½
\82Æ
\82«
\82É
\91¼
\82Ì
\90F
\82Å
\95\
\8e¦
586 FOddColor : TColor; ///<
\82»
\82Ì
\90F
587 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
588 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
589 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
590 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
591 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
592 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
594 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
596 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
597 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
598 FOrigenCaption: String; //
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\95Ò
\8fW
\8e\9e\82Ì
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
599 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
600 FActionListGroupIndexes: array of Integer; ///<GikoDM
\8fã
\82Ì
\83A
\83N
\83V
\83\87\83\93\83\8a\83X
\83g
\82Ì
\8ae
\83A
\83N
\83V
\83\87\83\93\82É
\90Ý
\92è
\82³
\82ê
\82½GroupIndex
\82ð
\95Û
\91¶
\82·
\82é
\94z
\97ñ
601 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
602 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
603 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
604 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
605 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
607 procedure ListDoubleClick(Shift: TShiftState);
608 function Hook(var Message: TMessage): Boolean;
609 procedure AddRoundNameMenu(MenuItem: TMenuItem);
610 procedure SetMenuFont;
611 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
612 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
613 procedure FavoriteClick(Sender: TObject); overload;
614 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
615 function OnDocumentContextMenu(Sender: TObject): WordBool;
616 procedure ShowTextPopup;
617 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
618 procedure MenuBarChevronMenu;
619 procedure LinkBarChevronMenu;
620 procedure ToolBarChevronMenu(ToolBar: TToolBar);
621 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
622 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
623 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
624 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
625 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
626 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
627 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
628 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
629 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
631 procedure SetListViewBackGroundColor(value: TColor);
632 procedure BBSMenuItemOnClick( Sender : TObject );
633 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
634 procedure SaveCoolBarSettings;
635 procedure SaveMainCoolBarSettings;
636 procedure SaveBoardCoolBarSettings;
637 procedure SaveBrowserCoolBarSettings;
638 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
639 procedure LoadCoolBarSettings;
640 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
641 procedure OnMinimize;
642 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
643 procedure OnMinimized;
644 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
645 procedure TreeClick( Node : TTreeNode );
646 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
647 procedure TreeDoubleClick( Node : TTreeNode );
648 ///
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
649 procedure SetBBSMenu;
651 function GetTabURLs(AStringList: TStringList) : Boolean;
652 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
653 procedure ListColumnPopupMenuOnClick( Sender : TObject );
654 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
655 procedure SetSelectWord( const text : string );
656 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
657 function GetScreenCursor(): TCursor;
658 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
659 procedure SetScreenCursor(Cursor : TCursor);
660 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
661 procedure CreateControlThread();
662 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
663 procedure CreateBrowsers(count: Integer);
664 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
665 procedure GetGroupIndex(ActionList: TActionList);
666 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
667 procedure SetGroupIndex(ActionList: TActionList);
668 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
669 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
670 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
671 procedure RefreshListView(Thread: TThreadItem);
672 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
673 procedure ClearThreadRengeAction;
675 procedure CreateParams(var Params: TCreateParams); override;
676 procedure WndProc(var Message: TMessage); override;
677 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
678 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
679 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
683 LastRoundTime: TDateTime;
684 BrowserNullTab: TBrowserRecord;
685 FControlThread: TThreadControl;
686 procedure MoveToURL(const inURL: string);
687 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
689 function GetHttpState: Boolean;
690 procedure SetEnabledCloseButton(Enabled: Boolean);
691 function GetTreeNode(Data: TObject): TTreeNode;
692 procedure ListViewAllSelect;
693 property ListStyle: TViewStyle read FListStyle write FListStyle;
694 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
695 property ViewType: TGikoViewType read FViewType write FViewType;
696 property NameCookie: string read FNameCookie write FNameCookie;
697 property MailCookie: string read FMailCookie write FMailCookie;
698 property ClickNode: TTreeNode read FClickNode write FClickNode;
699 property TreeType: TGikoTreeType read FTreeType write FTreeType;
700 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
701 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
702 property SelectResWord : string read FSelectResWord write FSelectResWord;
703 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
704 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
705 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
706 property ToolBarSettingSender : TToolBarSettingSenderType
707 read FToolBarSettingSender write FToolBarSettingSender;
708 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
709 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
710 property WorkCount: Integer read FWorkCount write FWorkCount;
711 procedure SetContent(inThread: TBrowserRecord);
712 function GetActiveContent: TThreadItem;
713 function GetActiveList: TObject;
715 procedure SetListViewType(AViewType: TGikoViewType); overload;
716 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
717 procedure PlaySound(SoundEventName: string);
718 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
719 procedure ClearHistory;
720 procedure SaveHistory;
721 procedure LoadHistory;
722 procedure ShowBBSTree( inBBS : TBBS );
723 procedure ShowBBSTreeOld( inBBS : TBBS );
724 procedure ShowHistoryTree;
725 procedure SetHistoryTreeNode;
726 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
727 procedure SetBrowserTabState;
728 procedure SetToolBarPopup;
729 procedure ShowFavoriteAddDialog( Item : TObject );
730 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
731 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
732 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
733 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
734 property OddColor : TColor read FOddColor write FOddColor;
735 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
736 procedure OnPlugInMenuItem( Sender : TObject );
737 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
738 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶ KuroutSetting
\82©
\82ç
\82æ
\82Ñ
\82¾
\82µ
\82½
\82¢
\82Ì
\82Å
739 procedure ActiveListColumnSave;
740 procedure SetActiveList(Obj: TObject);
741 property ActiveList: TObject read GetActiveList write SetActiveList;
742 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
743 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
744 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
745 procedure IndividualAbonID(Atype : Integer);
746 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
747 procedure IndividualAbon(Atag, Atype : Integer);
748 //
\83u
\83\89\83E
\83U
\82Ì
\8dÄ
\95`
\89æ true:
\91S
\82Ä
\82Ì
\83^
\83u false:
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Ì
\82Ý
749 procedure RepaintAllTabsBrowser();
750 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
751 procedure SetLinkBar;
752 procedure FavoriteBrowseFolder( node: TTreeNode );
753 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
754 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
755 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
756 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
757 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
758 procedure DeleteHistory( threadItem: TThreadItem );
759 //
\83^
\83u
\82ð
\8dí
\8f\9c
760 procedure DeleteTab(ThreadItem: TThreadItem); overload;
761 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
762 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
763 procedure BrowserMovement(const AName: string);
764 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
765 function GetMainForm(): TComponent;
766 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
767 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
768 procedure OnGestureStart(Sender: TObject);
769 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
770 procedure OnGestureMove(Sender: TObject);
771 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
772 procedure OnGestureEnd(Sender: TObject);
773 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
774 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
775 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
776 function EditorFormExists(): boolean;
777 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\96¼
\91O
\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
778 procedure AllEditroFormNameTextClearClear();
779 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82É
\82¢
\82é
\82·
\82×
\82Ä
\82ÌEditorForm
\82©
\82ç
\83\81\81[
\83\8b\97\9a\97ð
\82ð
\8dí
\8f\9c\82·
\82é
780 procedure AllEditroFormMailTextClearClear();
781 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
782 procedure SelectListItem(List: TList);
784 function SaveTabURLs : Boolean;
785 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
786 function LoadTabURLs : Boolean;
787 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
788 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
790 procedure ModifySelectList;
792 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
794 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
796 procedure SetSelectRoundName(Sender: TObject);
798 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
800 function WebBrowserClick(Sender: TObject): WordBool;
801 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
802 procedure SetSelectComboBox();
805 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
808 TFavoriteMenuItem = class(TMenuItem)
812 property Data: Pointer read FData write FData;
815 TBBSMenuItem = class(TMenuItem)
819 property Data: Pointer read FData write FData;
822 TLinkToolButton = class(TToolButton)
826 property Data: Pointer read FData write FData;
835 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
836 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
837 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
838 FavoriteArrange, AddressHistory, Preview, Gesture,
839 About, Option, Round, Splash, Sort, ListSelect, Imm,
840 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
841 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
842 InputAssistDataModule;
845 BLANK_HTML: string = 'about:blank';
846 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
848 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
849 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
850 HTML_FILE_NAME = 'temp_preview.html';
851 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
852 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
853 //
\83\81\83b
\83Z
\81[
\83WID
854 USER_TREECLICK = WM_USER + 2000;
855 USER_RESIZED = WM_USER + 2001;
856 USER_MINIMIZED = WM_USER + 2002;
857 USER_SETLINKBAR = WM_USER + 2003;
858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
861 procedure TGikoForm.CreateParams(var Params: TCreateParams);
864 if FormStyle in [fsNormal, fsStayOnTop] then begin
865 if BorderStyle in [bsSingle, bsSizeable] then begin
866 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
867 Params.WndParent := 0;
872 procedure TGikoForm.FormCreate(Sender: TObject);
874 TVS_NOTOOLTIPS = $0080;
880 wp: TWindowPlacement;
884 Writeln('============================================================');
885 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
887 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
888 Writeln('
\8fI
\97¹
\8e\9e\82Í
\81A
\83M
\83R
\83i
\83r
\83E
\83B
\83\93\83h
\83E
\82ð
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢');
889 Writeln('============================================================');
892 Sort.SetSortDate(Now());
894 FTreeType := gttNone;
895 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
897 Application.HookMainWindow(Hook);
898 FIsIgnoreResize := rtResizing;
899 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
900 //(
\8bN
\93®
\8e\9e\82É
\83c
\81[
\83\8b\83{
\83^
\83\93\82ÌDown
\83v
\83\8d\83p
\83e
\83B
\82ð
\94½
\89f
\82³
\82¹
\82é
\93s
\8d\87\8fãGroupIndex
\82Í
\90Ý
\92è
\82Å
\82«
\82È
\82¢)
901 //
\82±
\82ê
\88È
\8cãSet
\81`
\82Å
\8dÄ
\90Ý
\92è
\82·
\82é
\82Ü
\82Å
\81AAction
\82ÌChecked
\82ð
\82¢
\82¶
\82é
\82Æ
\82«
\82Í
\92\8d\88Ó
\81I
902 GetGroupIndex(GikoDM.GikoFormActionList);
903 FSearchDialog := nil;
904 CreateBrowsers(BROWSER_COUNT);
906 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
909 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
910 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
912 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
913 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
915 EnabledCloseButton := True;
917 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
918 ListView.ViewStyle := GikoSys.Setting.ListStyle;
920 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
922 AnimePanel.Left := 0;
924 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
926 //
\83L
\83\83\83r
\83l
\83b
\83g
927 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
929 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
930 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
931 GikoDM.MsgBarVisibleActionExecute(nil);
932 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
934 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
935 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
936 GikoDM.StatusBarVisibleActionExecute(nil);
938 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
939 TreeView.Items.BeginUpdate;
940 FavoriteTreeView.Items.BeginUpdate;
941 ListView.Items.BeginUpdate;
943 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
944 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
945 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
946 TreeView.Color := GikoSys.Setting.CabinetBackColor;
947 FavoriteTreeView.Font.Assign(TreeView.Font);
948 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
950 ListView.Font.Name := GikoSys.Setting.ListFontName;
951 ListView.Font.Size := GikoSys.Setting.ListFontSize;
952 ListView.Font.Color := GikoSys.Setting.ListFontColor;
953 ListView.Font.Style := [];
954 if GikoSys.Setting.ListFontBold then
955 ListView.Font.Style := [fsbold];
956 if GikoSys.Setting.ListFontItalic then
957 ListView.Font.Style := ListView.Font.Style + [fsitalic];
959 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
960 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
961 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
962 FOddColor := GikoSys.Setting.OddColor;
965 TreeView.Items.EndUpdate;
966 FavoriteTreeView.Items.EndUpdate;
967 ListView.Items.EndUpdate;
969 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
970 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
972 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
973 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
975 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
976 FResRangeMenuSelect := GikoSys.ResRange;
977 case GikoSys.ResRange of
980 GikoDM.AllResAction.Execute;
984 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
985 GikoDM.SelectResAction.Checked := True;
988 case FResRangeMenuSelect of
989 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
990 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
991 100: GikoDM.OnlyAHundredResAction.Checked := True;
995 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
996 case GikoSys.Setting.ThreadRange of
999 GikoDM.AllItemAction.Checked := True;
1004 GikoDM.LogItemAction.Checked := True;
1009 GikoDM.NewItemAction.Checked := True;
1014 GikoDM.LiveItemAction.Checked := True;
1015 ViewType := gvtLive;
1019 GikoDM.ArchiveItemAction.Checked := True;
1020 ViewType := gvtArch;
1025 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1026 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1027 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1028 BrowserTab.Font.Style := [];
1029 if GikoSys.Setting.BrowserTabFontBold then
1030 BrowserTab.Font.Style := [fsBold];
1031 if GikoSys.Setting.BrowserTabFontItalic then
1032 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1033 BrowserTab.DoubleBuffered := True;
1034 FDragWFirst := false;
1035 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1037 //
\83u
\83\89\83E
\83U
\83^
\83u
1038 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1040 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1041 GikoDM.BrowserTabTopAction.Checked := True;
1043 GikoDM.BrowserTabBottomAction.Checked := True;
1046 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1047 GikoDM.BrowserTabTabStyleAction.Checked := True;
1048 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1049 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1051 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1054 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1055 ProgressBar.Parent := StatusBar;
1056 ProgressBar.Top := 2;
1057 ProgressBar.Left := 0;
1058 ProgressBar.Width := StatusBar.Panels[0].Width;
1059 ProgressBar.Height := StatusBar.Height - 2;
1060 ProgressBar.Position := 0;
1062 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1063 InitializeBoardPlugIns;
1065 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1066 GikoSys.ListBoardFile;
1067 //
\81@
\98A
\91±
\8bN
\93®
\8e\9e\82É
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83\81\83\82\83\8a\82ª
\95s
\92è
\82É
1069 //
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\90Ý
\92è
1070 if (SplashWindow <> nil) then begin
1071 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1075 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1076 for i := Length(BBSs) - 1 downto 0 do begin
1077 if not BBSs[i].IsBoardFileRead then
1078 GikoSys.ReadBoardFile(BBSs[i]);
1080 if SplashWindow <> nil then begin
1081 SplashWindow.ProgressBar.StepBy(20);
1082 SplashWindow.Update;
1086 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1087 RoundList := TRoundList.Create;
1088 RoundList.LoadRoundBoardFile;
1089 RoundList.LoadRoundThreadFile;
1091 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1092 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1093 Style := Style or TVS_NOTOOLTIPS;
1094 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1096 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1097 TreeView.Align := alClient;
1098 FavoriteTreeView.Align := alClient;
1099 FavoriteTreeView.Visible := False;
1101 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1104 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1105 wp.length := sizeof(wp);
1106 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1107 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1108 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1109 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1110 wp.showCmd := SW_HIDE;
1111 SetWindowPlacement(Handle, @wp);
1114 if GikoSys.Setting.WindowMax then
1115 WindowState := wsMaximized;
1117 //
\83M
\83R
\83A
\83j
\83\81
1119 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1120 if FileExists(FileName) then
1121 Animate.FileName := FileName;
1129 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1130 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1131 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1134 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1135 FHistoryList := TList.Create;
1137 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1140 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1141 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1142 FavoriteDM.ReadFavorite;
1144 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1145 GikoDM.ArrangeAction.Execute;
1147 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1148 case GikoSys.Setting.ListWidthState of
1150 ViewPanel.Width := 1;
1151 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1152 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1155 ViewPanel.Width := GikoSys.Setting.ListWidth;
1156 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1157 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1160 ViewPanel.Width := GikoSys.Setting.ListWidth;
1161 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1162 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1166 case GikoSys.Setting.ListHeightState of
1168 ViewPanel.Height := 1;
1169 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1170 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1173 ViewPanel.Height := GikoSys.Setting.ListHeight;
1174 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1175 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1178 ViewPanel.Height := GikoSys.Setting.ListHeight;
1179 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1180 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1185 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1186 CreateControlThread();
1188 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1189 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1191 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1194 BrowserBoardNameLabel.Caption := '';
1195 BrowserNameLabel.Caption := '';
1198 FTabHintIndex := -1;
1200 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1201 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1202 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1204 MakeDefaultINIFile();
1205 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1206 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1207 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1208 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1211 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1212 SetSelectComboBox();
1214 //
\83A
\83h
\83\8c\83X
\83o
\81[
1215 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1217 //
\83\8a\83\93\83N
\83o
\81[
1219 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1221 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1222 if not FileExists(GikoSys.GetBoardFileName) then begin
1223 msg := '
\82±
\82Ì
\83\81\83b
\83Z
\81[
\83W
\82Í
\83M
\83R
\83i
\83r
\82ð
\8f\89\82ß
\82Ä
\8eg
\97p
\82·
\82é
\82Æ
\82«
\82É
\82P
\89ñ
\82¾
\82¯
\95\
\8e¦
\82³
\82ê
\82Ü
\82·' + #13#10#13#10
1224 + '
\82±
\82ê
\82©
\82ç
\81A
\81u
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\81v
\82Ì
\83A
\83h
\83\8c\83X
\88ê
\97\97\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ü
\82·' + #13#10
1225 + '
\8e\9f\82É
\8fo
\82Ä
\82
\82é
\89æ
\96Ê
\82Å
\81A
\81u
\8dX
\90V
\81v
\83{
\83^
\83\93\82ð
\89\9f\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1226 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1227 GikoDM.NewBoardAction.Execute;
1230 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1231 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1233 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1234 // FLastRoundTime := 0;
1237 FHint := TResPopup.Create(Self);
1239 ListView.OnData := TListViewUtils.ListViewData;
1241 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1242 CabinetVisible( False );
1243 if GikoSys.Setting.CabinetVisible then begin
1244 i := CabinetSelectPopupMenu.Items.Count - 1;
1245 if GikoSys.Setting.CabinetIndex = i - 1 then
1246 GikoDM.CabinetHistoryAction.Execute
1247 else if GikoSys.Setting.CabinetIndex = i then
1248 GikoDM.CabinetFavoriteAction.Execute
1250 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1251 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1252 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1253 FIsIgnoreResize := rtResizing;
1254 GikoDM.CabinetBBSAction.Execute;
1257 ShowBBSTreeOld( BBSs[ 0 ] );
1258 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1261 //
\88ø
\90\94\82ª
\82 \82Á
\82½
\82ç
\83X
\83\8c\82ð
\8aJ
\82
\81i
\96¢
\8eæ
\93¾
\82È
\82ç
\83_
\83E
\83\93\83\8d\81[
\83h
\81j
1262 for i := 1 to ParamCount do begin
1263 MoveToURL(ParamStr(i));
1266 GikoDM.RepaintStatusBar;
1267 StatusBarResize(Sender);
1269 dummy1.Caption := ItemReservPMenu.Caption;
1270 dummy1.Hint := ItemReservPMenu.Hint;
1272 //Samba24
\82Ì
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
1273 GikoSys.SambaFileExists();
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1280 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1291 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1292 GikoSys.SetGikoMessage;
1294 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1300 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1301 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1302 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1304 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1308 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1309 procedure TGikoForm.SaveCoolBarSettings;
1312 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1314 SaveMainCoolBarSettings;
1315 SaveBoardCoolBarSettings;
1316 SaveBrowserCoolBarSettings;
1319 procedure TGikoForm.SaveMainCoolBarSettings;
1324 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1325 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1326 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1327 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1328 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1329 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1332 procedure TGikoForm.SaveBoardCoolBarSettings;
1337 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1338 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1339 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1340 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1341 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1342 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1345 procedure TGikoForm.SaveBrowserCoolBarSettings;
1350 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1351 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1352 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1353 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1354 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1355 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1358 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1359 procedure TGikoForm.LoadCoolBarSettings;
1365 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1366 MainCoolBar.Bands.BeginUpdate;
1368 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1369 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1370 CoolSet := GikoSys.Setting.MainCoolSet[i];
1371 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1372 FIsIgnoreResize := rtNone;
1373 SaveCoolBarSettings;
1376 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1377 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1378 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1381 MainCoolBar.Bands.EndUpdate;
1384 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1385 ListCoolBar.Bands.BeginUpdate;
1387 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1388 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1389 CoolSet := GikoSys.Setting.ListCoolSet[i];
1390 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1391 FIsIgnoreResize := rtNone;
1392 SaveCoolBarSettings;
1395 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1396 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1397 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1400 ListCoolBar.Bands.EndUpdate;
1403 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1404 BrowserCoolBar.Bands.BeginUpdate;
1406 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1407 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1408 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1409 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1410 FIsIgnoreResize := rtNone;
1411 SaveCoolBarSettings;
1414 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1415 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1416 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1419 BrowserCoolBar.Bands.EndUpdate;
1424 procedure TGikoForm.FormShow(Sender: TObject);
1426 if FStartUp then begin
1427 ShowWindow(Application.Handle, SW_HIDE);
1429 //FormCreate
\82Å
\82â
\82é
\82Æ
\89Â
\8e\8b\90Ý
\92è
\82ª
\94½
\89f
\82³
\82ê
\82È
\82¢
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82ÅFormShow
\82Å
\82â
\82é
\82±
\82Æ
\82É
\82µ
\82½
1430 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1431 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1432 GikoDM.StdToolBarVisibleActionExecute( nil );
1433 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1434 GikoDM.AddressBarVisibleActionExecute( nil );
1435 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1436 GikoDM.LinkBarVisibleActionExecute( nil );
1437 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1438 GikoDM.ListToolBarVisibleActionExecute( nil );
1439 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1440 GikoDM.ListNameBarVisibleActionExecute( nil );
1441 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1442 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1443 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1444 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1446 // CoolBar
\95\9c\8c³
1447 LoadCoolBarSettings;
1449 //
\8fd
\97v
\81@
\82±
\82ê
\82ª
\82È
\82¢
\82Æ
\83c
\81[
\83\8b\83{
\83^
\83\93\82Ì
\8dX
\90V
\82ª
\82¨
\82©
\82µ
\82
\82È
\82é
1450 // ResetBandInfo( ListCoolBar, ListToolBar );
1451 FIsIgnoreResize := rtNone;
1453 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1454 if GikoSys.Setting.TabAutoLoadSave then begin
1455 GikoDM.TabAutoLoadAction.Execute;
1458 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1459 SetGroupIndex(GikoDM.GikoFormActionList);
1465 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1467 // if GikoForm.WindowState <> wsMinimized then
1468 // SaveCoolBarSettings;
1470 if ( GikoSys.Setting.ShowDialogForEnd ) and
1471 (MessageDlg('
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1476 if GikoSys.Setting.TabAutoLoadSave then begin
1477 GikoDM.TabAutoSaveAction.Execute;
1480 if (SearchDialog <> nil) then begin
1481 if (SearchDialog.Visible) then begin
1484 SearchDialog.Release;
1487 SearchDialog := nil;
1490 { //2ch
\8c¾
\8cȩ̂²ÙFree
1491 if GikoSys.Setting.Gengo <> nil then begin
1492 GikoSys.Setting.Gengo.Free;
1495 Application.UnhookMainWindow(Hook);
1496 Application.Terminate;
1499 procedure TGikoForm.FormDestroy(Sender: TObject);
1502 // CoolSet: TCoolSet;
1503 wp : TWindowPlacement;
1506 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1508 MouseGesture.UnHook;
1512 ActiveListColumnSave;
1516 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1517 wp.length := sizeof(wp);
1518 GetWindowPlacement(Handle, @wp);
1519 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1520 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1521 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1522 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1523 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1525 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1526 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1527 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1528 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1529 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1530 if GikoDM.ArrangeAction.Checked then
1531 GikoSys.Setting.ListOrientation := gloVertical
1533 GikoSys.Setting.ListOrientation := gloHorizontal;
1534 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1539 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1540 if not GikoSys.Setting.ResRangeHold then
1541 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1544 if WindowState <> wsNormal then
1545 WindowState := wsNormal;
1546 SaveCoolBarSettings;
1548 GikoSys.Setting.WriteWindowSettingFile;
1549 GikoSys.Setting.WriteNameMailSettingFile;
1552 //
\83\8a\83A
\83\8b\83^
\83C
\83\80\82É
\95Û
\91¶
\82³
\82ê
\82é
\82Ì
\82Å
\81A
\82Ü
\82½
\81A
\83E
\83B
\83\93\83h
\83E
\83T
\83C
\83Y
\82ª CoolBar
\82æ
\82è
1553 //
\8f¬
\82³
\82
\82È
\82Á
\82Ä
\82¢
\82é
\82Æ
\82«
\82É
\95Û
\91¶
\82·
\82é
\82Æ
\92l
\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\82±
\82±
\82Å
\82Í
\95Û
\91¶
\82µ
\82È
\82¢
1555 //
\81ªFormDestroy
\92\86\82É
\88Ú
\93®
\82µ
\82½
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\95Û
\91¶
\82µ
\82È
\82¢
\82Æ
\82¢
\82¯
\82È
\82¢
\82Æ
\8ev
\82¤
\81B
\81i
\82à
\82¶
\82ã
\81@2004/04/09
\81j
1557 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1559 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1560 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1562 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1564 //FavoriteDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
1565 FavoriteDM.WriteFavorite;
1569 LockWindowUpdate(Self.Handle);
1571 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1572 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1573 GikoSys.Setting.ShowDialogForAllTabClose := false;
1574 GikoDM.AllTabCloseAction.Execute;
1575 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1579 for i := FBrowsers.Count - 1 downto 0 do begin
1580 TWebBrowser(FBrowsers[i]).Free;
1583 FBrowsers.Capacity := 0;
1588 if BrowserNullTab <> nil then begin
1589 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1590 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1592 BrowserNullTab.Free;
1598 TreeView.Items.BeginUpdate;
1599 TreeView.Items.GetFirstNode.Free;
1600 TreeView.Items.Clear;
1601 TreeView.Items.EndUpdate;
1605 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1607 //AddressHistoryDM
\82Í
\8e©
\93®
\90¶
\90¬
\83t
\83H
\81[
\83\80\82È
\82Ì
\82Å
\81A
\89ð
\95ú
\82Í
\8e©
\93®
\93I
\82É
\82³
\82ê
\82é
\81B
1608 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1612 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1626 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1628 RoundList.SaveRoundFile;
1642 FControlThread.Terminate;
1643 FControlThread.WaitFor;
1647 FControlThread.Free;
1650 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1651 // TBoard, TThreadItem
\82Ì
\83f
\83X
\83g
\83\89\83N
\83^
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94j
\8aü
\82ð
\93`
\82¦
\82é
\82Ì
\82Å
1652 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1653 for i := Length(BoardGroups) - 1 downto 0 do begin
1654 //BoardGroups[i].Clear;
1655 BoardGroups[i].Free;
1659 for i := Length( BBSs ) - 1 downto 0 do begin
1660 if BBSs[ i ] <> nil then
1668 if FEvent <> nil then
1672 if FHint <> nil then begin
1673 FHint.ReleaseHandle;
1678 if TPreviewBrowser <> nil then begin
1679 FPreviewBrowser.Free;
1680 FPreviewBrowser := nil;
1684 LockWindowUpdate(0);
1687 //
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
1688 procedure TGikoForm.SetBBSMenu;
1691 item : TBBSMenuItem;
1694 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1695 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1697 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1698 CabinetSelectPopupMenu.Items[ i ].Free;
1699 CabinetMenu.Items[ i ].Free;
1700 BBSSelectPopupMenu.Items[ i ].Free;
1706 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1707 for i := Length( BBSs ) - 1 downto 0 do begin
1709 item := TBBSMenuItem.Create( PopupMenu );
1710 item.Caption := BBSs[ i ].Title;
1711 item.Data := BBSs[ i ];
1712 item.OnClick := BBSMenuItemOnClick;
1713 CabinetSelectPopupMenu.Items.Insert( 0, item );
1714 item := TBBSMenuItem.Create( PopupMenu );
1715 item.Caption := BBSs[ i ].Title;
1716 item.Data := BBSs[ i ];
1717 item.OnClick := BBSMenuItemOnClick;
1718 CabinetMenu.Insert( 0, item );
1719 item := TBBSMenuItem.Create( PopupMenu );
1720 item.Caption := BBSs[ i ].Title;
1721 item.Data := BBSs[ i ];
1722 item.OnClick := BBSMenuItemOnClick;
1723 BBSSelectPopupMenu.Items.Insert( 0, Item );
1730 procedure TGikoForm.ReloadBBS;
1735 LockWindowUpdate(Self.Handle);
1737 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1738 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1739 GikoSys.Setting.ShowDialogForAllTabClose := false;
1740 GikoDM.AllTabCloseAction.Execute;
1741 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1742 SetContent(BrowserNullTab);
1743 //TreeView
\83N
\83\8a\83A
\81iBBS2ch.Free
\82Ì
\8cã
\82É
\83N
\83\8a\83A
\82·
\82é
\82ÆXP
\83X
\83^
\83C
\83\8b\8e\9e\82É
\83G
\83\89\81[
\8fo
\82é
\81j
1744 TreeView.Items.Clear;
1746 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1748 RoundList.SaveRoundFile;
1751 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1757 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1764 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1766 FavoriteDM.WriteFavorite;
1771 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1772 for i := Length(BoardGroups) - 1 downto 0 do begin
1774 BoardGroups[i].Free;
1780 for i := Length( BBSs ) - 1 downto 0 do begin
1781 if BBSs[ i ] <> nil then
1790 FTreeType := gttNone;
1792 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1794 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1795 InitializeBoardPlugIns;
1797 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1799 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1800 for i := Length(BBSs) - 1 downto 0 do begin
1801 if not BBSs[i].IsBoardFileRead then
1802 GikoSys.ReadBoardFile(BBSs[i]);
1805 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1808 ShowBBSTree( BBSs[ 0 ] );
1810 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1813 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1814 FavoriteDM.ReadFavorite;
1818 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1819 RoundList.LoadRoundBoardFile;
1820 RoundList.LoadRoundThreadFile;
1822 LockWindowUpdate(0);
1824 GikoDM.TabsOpenAction.Execute;
1828 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1836 threadItem : TThreadItem;
1838 Protocol, Host, Path, Document, Port, Bookmark: string;
1843 ActiveFileName: string;
1848 if not( TObject(Sender) is TWebBrowser )then
1852 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1853 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1854 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1861 if PreviewTimer.Enabled then
1862 PreviewTimer.Enabled := False;
1863 Application.CancelHint;
1865 if GetActiveContent <> nil then
1866 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1868 ActiveFileName := '';
1870 FActiveContent := nil;
1874 StatusBar.Panels[1].Text := Text;
1876 if FHint <> nil then begin
1877 FHint.ReleaseHandle;
1880 if FPreviewBrowser <> nil then
1881 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1883 if not GikoSys.Setting.UnActivePopup then
1884 if not GikoForm.Active then
1887 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1888 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1891 Ext := AnsiLowerCase(ExtractFileExt(Text));
1892 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
1893 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1894 if FPreviewBrowser = nil then begin
1895 FPreviewBrowser := TPreviewBrowser.Create(Self);
1896 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1897 TOleControl(FPreviewBrowser).Parent := nil;
1899 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1900 FPreviewURL := Text;
1901 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1902 PreviewTimer.Enabled := True;
1903 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
1904 if Pos('mailto:', Text) = 1 then begin
1905 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
1906 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1908 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1909 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1910 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1911 if (Assigned(e)) then begin
1912 tmp2 := ZenToHan(e.Get_outerText);
1913 if (GikoSys.IsNumeric(tmp2)) then begin
1914 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1915 wkIntSt := StrToInt64(tmp2);
1916 wkIntTo := StrToInt64(tmp2);
1917 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1918 FHint.PopupType := gptThread;
1919 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1921 FHint.PopupType := gptRaw;
1926 threadItem := GetActiveContent;
1927 URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
1928 PathRec := Gikosys.Parse2chURL2(URL);
1929 if (PathRec.FNoParam) then begin
1933 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1935 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1937 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1939 URL := GikoSys.GetBrowsableThreadURL( URL );
1940 wkIntSt := PathRec.FSt;
1941 wkIntTo := PathRec.FTo;
1943 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1946 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1948 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1950 end else if wkIntSt > wkIntTo then begin
1955 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1960 threadItem := BBSsFindThreadFromURL( URL );
1962 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1963 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1964 if board <> nil then begin
1965 if not board.IsThreadDatRead then
1966 GikoSys.ReadSubjectFile( board );
1967 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1971 if threadItem <> nil then begin
1972 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1973 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1974 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1978 FHint.PopupType := gptThread;
1979 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1984 if FHint.PopupType = gptRaw then begin
1985 if FHint.Caption <> '' then
1988 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
1994 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
1998 FEnabledCloseButton := Enabled;
1999 SysMenu := GetSystemMenu(Handle, False);
2001 if Enabled then begin
2002 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2004 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2007 DrawMenuBar(Handle);
2010 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2011 var AllowChange: Boolean);
2013 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2014 // if FTreeType = gtt2ch then
2015 // FSortIndex := -1;
2018 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2019 Shift: TShiftState);
2023 if GetActiveList is TBoard then begin
2025 VK_BACK:; // UpFolderButtonClick(Sender);
2026 VK_SPACE: ListDoubleClick(Shift);
2027 VK_RETURN: ListClick;
2030 if ListView.Selected <> nil then begin
2031 pos.X := ListView.Column[ 0 ].Width;
2032 pos.Y := ListView.Selected.Top;
2034 pos.X := ListView.Left;
2035 pos.Y := ListView.Top;
2037 Windows.ClientToScreen( ListView.Handle, pos );
2038 ListPopupMenu.Popup( pos.X, pos.Y );
2041 end else begin // TBBS, TCategory
2043 VK_BACK:; // UpFolderButtonClick(Sender);
2044 VK_SPACE: ListClick;
2045 VK_RETURN: ListDoubleClick(Shift);
2048 if ListView.Selected <> nil then begin
2049 pos.X := ListView.Column[ 0 ].Width;
2050 pos.Y := ListView.Selected.Top;
2052 pos.X := ListView.Left;
2053 pos.Y := ListView.Top;
2055 Windows.ClientToScreen( ListView.Handle, pos );
2056 ListPopupMenu.Popup( pos.X, pos.Y );
2062 function TGikoForm.GetHttpState: Boolean;
2064 Result := FHttpState;
2067 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2068 Column: TListColumn);
2072 vSortIndex : Integer;
2073 vSortOrder : Boolean;
2075 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2076 if TObject( FActiveList ) is TBBS then begin
2077 orderList := GikoSys.Setting.BBSColumnOrder;
2078 vSortIndex := GikoSys.Setting.BBSSortIndex;
2079 vSortOrder := GikoSys.Setting.BBSSortOrder;
2080 end else if TObject( FActiveList ) is TCategory then begin
2081 orderList := GikoSys.Setting.CategoryColumnOrder;
2082 vSortIndex := GikoSys.Setting.CategorySortIndex;
2083 vSortOrder := GikoSys.Setting.CategorySortOrder;
2084 end else if TObject( FActiveList ) is TBoard then begin
2085 orderList := GikoSys.Setting.BoardColumnOrder;
2086 vSortIndex := GikoSys.Setting.BoardSortIndex;
2087 vSortOrder := GikoSys.Setting.BoardSortOrder;
2091 id := Integer( orderList[ idx ] );
2094 if vSortIndex = id then
2095 vSortOrder := not vSortOrder
2097 vSortOrder := id = 0;
2100 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2103 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2104 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2108 DefaultDraw := True;
2110 DefaultDraw := False;
2111 if (cdsSelected in State) or (cdsHot in State) then begin
2112 Sender.Canvas.Brush.Color := clHighlight;
2113 Sender.Canvas.Font.Color := clHighlightText;
2115 Sender.Canvas.Brush.Color := clBtnFace;
2116 Sender.Canvas.Font.Color := clBtnText;
2118 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2119 Sender.Canvas.FillRect(ARect);
2120 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2123 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2128 Nodes := TreeView.Items;
2130 for i := 0 to Nodes.Count - 1 do begin
2131 if Nodes.Item[i].Data = Data then begin
2132 Result := Nodes.Item[i];
2139 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2140 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2141 Headers: OleVariant; var Cancel: WordBool);
2146 kMenuName: string = 'menu:';
2149 if Pos(kMenuName, URL) <> 0 then begin
2150 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2152 if not GikoSys.IsNumeric(sNo) then Exit;
2156 KokoPopupMenu.Tag := StrToInt(sNo);
2157 KokoPopupMenu.Popup(p.x, p.y);
2158 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2159 Cancel := not GikoSys.Setting.OpenMailer;
2164 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2165 const ARect: TRect; var DefaultDraw: Boolean);
2169 IsBoardNode: Boolean;
2175 Category: TCategory;
2179 DefaultDraw := True;
2181 if FTreeType = gttHistory then Exit;
2183 TreeView.Canvas.Font.Color := clBlue;
2184 IsBoardNode := False;
2185 for i := 0 to TreeView.Items.Count - 1 do begin
2187 if not TreeView.Items[i].IsVisible then
2190 if TObject(TreeView.Items[i].Data) is TCategory then begin
2191 if TreeView.Items[i].Expanded then
2194 IsBoardNode := False;
2195 Category := TCategory(TreeView.Items[i].Data);
2196 for j := 0 to Category.Count - 1 do begin
2197 Board := Category.Items[j];
2198 if Board <> nil then begin
2199 if Board.UnRead > 0 then begin
2207 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2208 IsBoardNode := True;
2209 Board := TBoard(TreeView.Items[i].Data);
2211 Cnt := Board.UnRead;
2217 Bitmap := TBitmap.Create;
2219 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2220 Bitmap.Canvas.Font.Style := [fsBold];
2221 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2226 NodeRect := TreeView.Items[i].DisplayRect(True);
2229 CntText := '(' + IntToStr(Cnt) + ')'
2230 else if Cnt = 1 then
2234 TextWidth := TreeView.Canvas.TextWidth(CntText);
2236 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2238 NodeRect.Left + NodeWidth + TextWidth + 8,
2240 DrawText(TreeView.Canvas.Handle,
2244 DT_SINGLELINE or DT_VCENTER);
2246 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2249 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2250 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2253 Category: TCategory;
2256 DefaultDraw := True;
2258 if FTreeType = gttHistory then Exit;
2260 TreeView.Canvas.Font.Style := [];
2261 if Node <> nil then begin
2262 if TObject(Node.Data) is TCategory then begin
2263 Category := TCategory(Node.Data);
2264 for i := 0 to Category.Count - 1 do begin
2265 Board := Category.Items[i];
2266 if Board <> nil then begin
2267 if Board.UnRead > 0 then begin
2268 TreeView.Canvas.Font.Style := [fsBold];
2273 end else if TObject(Node.Data) is TBoard then begin
2274 Board := TBoard(Node.Data);
2275 if Board.UnRead > 0 then
2276 TreeView.Canvas.Font.Style := [fsBold];
2281 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2283 TreeView.Invalidate;
2285 if TObject(Node.Data) is TBBS then begin
2286 TBBS(Node.Data).NodeExpand := True;
2287 end else if TObject(Node.Data) is TCategory then begin
2288 TCategory(Node.Data).NodeExpand := True;
2289 end else if TObject(Node.Data) is TBoard then begin
2290 TBoard(Node.Data).NodeExpand := True;
2294 procedure TGikoForm.ListViewAllSelect;
2299 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2301 AddMessageList(Msg, nil, Icon);
2303 // *************************************************************************
2304 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82½
\82Æ
\82«
\82É
\94
\90¶
\82·
\82é
\83C
\83x
\83\93\83g
2305 // *************************************************************************
2306 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2310 boardPlugIn : TBoardPlugIn;
2315 if Item.DownType = gdtBoard then
2316 ATitle := Item.Board.Title
2318 ATitle := Item.ThreadItem.Title;
2320 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2322 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2324 if Item.DownType = gdtBoard then begin
2327 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2328 if GetActiveList = Item.Board then begin
2330 //
\8e©
\93®
\83\
\81[
\83g
\82Ì
\8fê
\8d\87\94Â
\88ê
\97\97\82Ì
\83\
\81[
\83g
\8f\87\82ð
\83N
\83\8a\83A
\82·
\82é
2331 if (GikoSys.Setting.AutoSortThreadList) then begin
2332 GikoSys.Setting.BoardSortIndex := 0;
2333 GikoSys.Setting.BoardSortOrder := True;
2335 Sort.SetSortDate(Now());
2336 SetActiveList(Item.Board);
2338 Item.Board.Modified := True;
2339 Item.Board.IsThreadDatRead := True;
2342 end else if Item.DownType = gdtThread then begin
2345 Item.ThreadItem.NewArrival := True;
2346 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2347 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2348 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2349 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2350 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2351 Item.ThreadItem.Title := Res.FTitle;
2352 ATitle := Item.ThreadItem.Title;
2353 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2354 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2355 ATitle := Res.FTitle;
2357 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2358 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2359 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2363 if GikoSys.Setting.BrowserTabVisible then begin
2364 if GetActiveContent = Item.ThreadItem then
2365 InsertBrowserTab(Item.ThreadItem)
2366 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2367 InsertBrowserTab(Item.ThreadItem, True)
2369 InsertBrowserTab(Item.ThreadItem, False);
2372 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2373 InsertBrowserTab(Item.ThreadItem);
2376 Application.ProcessMessages;
2378 if Item.State = gdsComplete then begin
2380 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2384 PlaySound('NewDiff');
2385 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2390 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2391 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2392 Item.ThreadItem.Round := False;
2393 //Item.ThreadItem.RoundName := '';
2394 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);
2397 //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
2398 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2399 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2400 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2401 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2402 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2403 case GikoForm.ViewType of
2404 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2405 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2406 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2407 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2408 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2409 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2412 RefreshListView(Item.ThreadItem);
2415 end else if Item.State = gdsNotModify then begin
2417 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2418 //SetContent(Item.ThreadItem);
2419 InsertBrowserTab(Item.ThreadItem);
2421 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2422 PlaySound('NoChange');
2423 Screen.Cursor := crDefault;
2424 end else if Item.State = gdsAbort then begin
2426 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2427 end else if Item.State = gdsError then begin
2432 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2433 // if Item.ResponseCode = 302 then
2434 // 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);
2440 if FWorkCount < 0 then FWorkCount := 0;
2441 if FWorkCount = 0 then begin
2443 Animate.Active := False;
2445 Screen.Cursor := crDefault;
2452 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2454 // SetProgressValue(Number, 0, AWorkCountMax);
2455 // ProgressBar.Visible := True;
2456 ProgressBar.Position := 0;
2457 ProgressBar.Max := AWorkCountMax;
2458 FDownloadTitle := AWorkTitle;
2459 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2460 FDownloadMax := AWorkCountMax;
2463 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2465 ProgressBar.Position := 0;
2466 if FDownloadMax <> 0 then
2467 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2470 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2472 ProgressBar.Position := AWorkCount;
2473 // SetProgressValue(Number, AWorkCount);
2474 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2477 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2479 ListItem: TListItem;
2481 MessageListView.Items.BeginUpdate;
2483 ListItem := MessageListView.Items.Add;
2484 ListItem.Caption := ACaption;
2485 ListItem.Data := AObject;
2486 ListItem.MakeVisible(False);
2488 gmiOK: ListItem.ImageIndex := 0;
2489 gmiSAD: ListItem.ImageIndex := 1;
2490 gmiNG: ListItem.ImageIndex := 2;
2491 gmiWhat: ListItem.ImageIndex := 3;
2494 MessageListView.Items.EndUpdate;
2499 function TGikoForm.InsertBrowserTab(
2500 ThreadItem : TThreadItem;
2501 ActiveTab : Boolean = True
2504 i, j, idx : Integer;
2505 favItem : TFavoriteThreadItem;
2506 newBrowser : TBrowserRecord;
2510 if Threaditem = nil then Exit;
2512 if ThreadItem.IsLogFile then begin
2513 //
\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é
2514 //
\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é
2515 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2516 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2517 j := FBrowsers.IndexOf(FActiveContent.Browser);
2518 if j = BROWSER_COUNT - 1 then
2519 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2521 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2522 if not AddHistory( favItem ) then
2525 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2526 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2527 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2528 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2529 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2530 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2531 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2532 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2536 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2537 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2538 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2540 if ActiveTab then begin
2541 BrowserTab.TabIndex := i;
2542 BrowserTab.OnChange(nil);
2549 idx := BrowserTab.TabIndex;
2550 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2551 newBrowser := TBrowserRecord.Create;
2552 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2553 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2554 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2558 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2559 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2560 //newBrowser.Browser.Navigate(BLANK_HTML);
2561 newBrowser.thread := ThreadItem;
2562 newBrowser.Repaint := true;
2563 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2565 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2566 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2567 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2571 if ActiveTab then begin
2572 BrowserTab.TabIndex := 0;
2576 newBrowser := TBrowserRecord.Create;
2577 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2578 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2579 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2583 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2584 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2585 //newBrowser.Browser.Navigate(BLANK_HTML);
2586 newBrowser.thread := ThreadItem;
2587 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2588 newBrowser.Repaint := true;
2590 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2591 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2592 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2596 if ActiveTab then begin
2597 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2598 BrowserTab.TabIndex := 0
2600 BrowserTab.TabIndex := i;
2603 Result := newBrowser;
2604 if(ActiveTab) or (idx = -1) then begin
2605 BrowserTab.OnChange(nil);
2608 if BrowserNullTab = nil then begin
2609 BrowserNullTab := TBrowserRecord.Create;
2610 BrowserNullTab.Browser := Browser;
2612 // if BrowserNullTab.thread <> ThreadItem then begin
2613 // BrowserNullTab.Movement := '';
2615 BrowserNullTab.thread := ThreadItem;
2616 Result := BrowserNullTab;
2617 BrowserTab.TabIndex := -1;
2618 SetContent(BrowserNullTab);
2621 if GikoSys.Setting.URLDisplay then
2622 AddressComboBox.Text := ThreadItem.URL;
2626 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2635 ThreadItem: TThreadItem;
2636 Thread: TBrowserRecord;
2637 ThreadTitle, ThreadPTitle: string;
2638 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2641 idx := BrowserTab.TabIndex;
2642 if (FActiveContent <> nil) and
2643 (FActiveContent.Thread <> Thread.Thread) and
2644 (FActiveContent.Browser <> nil) and
2645 (Assigned(FActiveContent.Browser.Document)) then begin
2648 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2651 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2656 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2657 Thread.Browser.Navigate(BLANK_HTML);
2658 BrowserBoardNameLabel.Caption := '';
2659 ItemBoardImage.Picture := nil;
2660 BrowserNameLabel.Caption := '';
2661 ItemImage.Picture := nil;
2662 BrowserNullTab.Thread := nil;
2663 //TOleControl(BrowserNullTab.Browser).Visible := true;
2664 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2665 FActiveContent := nil;
2667 end else if Thread.Browser = nil then begin
2668 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2669 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2670 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2671 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2672 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2676 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2677 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2680 ThreadTitle := Thread.Thread.Title;
2681 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2682 //ThreadScrollTop := Thread.Thread.ScrollTop;
2683 ThreadIsLog := Thread.Thread.IsLogFile;
2684 ThreadItem := Thread.Thread;
2685 ThreadNewArraical := Thread.Thread.NewArrival;
2686 //ThreadUnRead := Thread.Thread.UnRead;
2687 BBSID := ThreadItem.ParentBoard.BBSID;
2688 FileName := ThreadItem.FileName;
2690 if GetCapture = ListView.Handle then
2693 Screen.Cursor := crHourGlass;
2697 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2698 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2699 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2701 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2702 if (not Assigned(Thread.Browser.Document)) then begin
2703 Thread.Browser.Navigate('about:blank');
2705 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2706 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2707 Application.ProcessMessages;
2708 if idx <> BrowserTab.TabIndex then begin
2713 if (Thread <> nil) and (ThreadItem <>nil) then begin
2714 BrowserBoardNameLabel.Caption := ThreadPTitle;
2715 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2716 BrowserNameLabel.Caption := ThreadTitle;
2717 ItemImage.Picture := nil;
2719 if ThreadNewArraical then
2720 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2722 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2724 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2726 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2727 BrowserNameLabel.Left := ItemImage.Left + 20;
2730 //ActiveContent
\81@
\82Ì
\8dX
\90V
2731 FActiveContent := Thread;
2733 if not ThreadIsLog then begin
2734 Self.Caption := GikoDataModule.CAPTION_NAME ;
2735 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2736 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2738 Thread.Browser.BringToFront;
2739 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2740 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2742 doc.charset := 'Shift_JIS';
2749 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2750 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2751 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2752 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2753 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2754 //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«
2755 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2756 if Thread.Repaint then begin
2757 Thread.Repaint := false;
2759 Thread.Browser.OnStatusTextChange := nil;
2760 LockWindowUpdate(Thread.Browser.ParentWindow);
2761 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2762 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2763 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2767 RefreshListView(ThreadItem);
2769 Screen.Cursor := crDefault;
2773 function TGikoForm.GetActiveContent: TThreadItem;
2776 if FActiveContent <> nil then
2777 Result := FActiveContent.Thread
2786 procedure TGikoForm.SetActiveList(Obj: TObject);
2790 // if FActiveList <> Obj then begin
2793 if ListView.Selected <> nil then
2794 idx := ListView.Selected.Index
2800 ListView.Items.Count := 0;
2801 ListView.Items.Clear;
2802 ListView.Selected := nil;
2803 // ListView.Columns.Clear;
2804 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2805 and (FActiveContent.Thread.IsLogFile) then begin
2807 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2809 on E: Exception do begin
2810 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2811 //
\8dí
\8f\9c\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82ª
\82 \82é
\82Ì
\82Å
\82±
\82±
\82Ä
\8f\88\97\9d\82·
\82é
2812 ReleaseBrowser(FActiveContent);
2813 FActiveContent.Thread := nil;
2814 Self.Caption := GikoDataModule.CAPTION_NAME;
2818 Self.Caption := GikoDataModule.CAPTION_NAME;
2819 //Application.Title := CAPTION_NAME;
2821 // ActiveListColumnSave;
2823 Screen.Cursor := crHourGlass;
2825 if Obj is TBBS then begin
2826 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2827 end else if Obj is TCategory then begin
2828 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2829 end else if Obj is TBoard then begin
2830 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2833 Screen.Cursor := crDefault;
2836 if idx >= 0 then begin
2837 if idx >= ListView.Items.Count then
2838 idx := ListView.Items.Count - 1;
2839 ListView.ItemIndex := idx;
2840 ListView.ItemFocused := ListView.Items.Item[ idx ];
2846 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2847 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2848 function TGikoForm.GetActiveList: TObject;
2850 Result := FActiveList;
2853 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2855 SetListViewType(AViewType, '', False);
2858 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2863 for i := Length( BBSs ) - 1 downto 0 do begin
2864 BBSs[i].SelectText := SelectText;
2865 BBSs[i].KubetsuChk := KubetsuChk;
2867 ViewType := AViewType;
2868 if ActiveList is TBoard then begin
2869 Board := TBoard(ActiveList);
2871 //gvtAll: ListView.Items.Count := Board.Count;
2872 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2873 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2874 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2875 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2876 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2880 SetActiveList(Board);
2884 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2885 const ARect: TRect; var DefaultDraw: Boolean);
2891 if ListView.Items.Count = 0 then begin
2892 DefaultDraw := true;
2893 ListView.Canvas.Brush.Color := ListView.Color;
2894 ListView.Canvas.FillRect(ARect);
2898 ListView.Canvas.Font.Color := clWindowText;
2899 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2902 ListView.Canvas.Font.Color := clBlue;
2903 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';
2906 ListView.Canvas.Font.Color := clGreen;
2907 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2910 ListView.Canvas.Font.Color := clFuchsia;
2911 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82ÍDAT
\97\8e\82¿
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2914 ListView.Canvas.Font.Color := clMaroon;
2915 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2918 ListView.Canvas.Font.Color := clNavy;
2919 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';
2920 if GetActiveList is TBoard then
2921 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2929 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2930 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2931 ListView.Canvas.TextOut(p.X, p.Y, s);
2933 DefaultDraw := True;
2937 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2939 Item: TDownloadItem;
2941 if not Board.IsThreadDatRead then
2942 GikoSys.ReadSubjectFile(Board);
2943 Item := TDownloadItem.Create;
2945 Item.Board := Board;
2946 Item.DownType := gdtBoard;
2947 Item.ForceDownload := ForceDownload;
2948 FControlThread.AddItem(Item);
2949 if FWorkCount = 0 then begin
2951 Animate.Active := True;
2954 Screen.Cursor := crAppStart;
2962 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2964 Item: TDownloadItem;
2966 Item := TDownloadItem.Create;
2968 Item.ThreadItem := ThreadItem;
2969 Item.DownType := gdtThread;
2970 Item.ForceDownload := ForceDownload;
2971 FControlThread.AddItem(Item);
2972 if FWorkCount = 0 then begin
2974 Animate.Active := True;
2977 Screen.Cursor := crAppStart;
2985 procedure TGikoForm.PlaySound(SoundEventName: string);
2989 if not GikoSys.Setting.Mute then begin
2990 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
2991 if FileExists(FileName) then begin
2992 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
2993 sndPlaySound(nil, SND_SYNC);
2994 Application.ProcessMessages;
2996 sndPlaySound(PChar(FileName), SND_ASYNC);
3002 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3005 Item: TFavoriteThreadItem;
3009 // if (GetActiveContent = ThreadItem) and
3010 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3012 // if GetActiveContent = ThreadItem then
3016 if FTreeType = gttHistory then
3017 TreeView.Selected := nil;
3019 for i := 0 to FHistoryList.Count - 1 do begin
3020 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3021 Item := TFavoriteThreadItem(FHistoryList[i]);
3022 if Item.URL = favItem.URL then begin
3023 // SetContent(ThreadItem);
3024 FHistoryList.Move(i, 0);
3025 if FTreeType = gttHistory then
3026 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3027 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3034 if FHistoryList.Count > 0 then
3035 FHistoryList.Insert( 0, favItem )
3037 FHistoryList.Add( favItem );
3038 // SetContent(ThreadItem);
3039 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3040 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3041 i := FHistoryList.Count - 1;
3042 TObject( FHistoryList.Items[ i ] ).Free;
3043 FHistoryList.Delete( i );
3046 if FTreeType = gttHistory then begin
3047 Node := TreeView.Items.Add( nil, favItem.Title );
3048 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3050 if favItem.NewArrival then begin
3051 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3052 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3054 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3055 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3058 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3059 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3060 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3061 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3062 Node.Data := favItem;
3063 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3064 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3065 i := TreeView.Items.Count - 1;
3066 TreeView.Items.Item[ i ].Delete;
3071 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3075 for i := 0 to FHistoryList.Count - 1 do begin
3076 if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
3077 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3078 FHistoryList.Delete(i);
3079 FHistoryList.Capacity := FHistoryList.Count;
3085 procedure TGikoForm.ClearHistory;
3089 //FHistoryList.Clear;
3092 for i := FHistoryList.Count - 1 downto 0 do begin
3093 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3094 TFavoriteThreadItem(FHistoryList[ i ]).Free
3095 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3096 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3098 //FHistoryList.Delete(i);
3104 FHistoryList.Capacity := FHistoryList.Count;
3108 procedure TGikoForm.SaveHistory;
3111 saveList : TstringList;
3114 saveList := TStringList.Create;
3117 FHistoryList.Capacity := FHistoryList.Count;
3118 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3119 saveList.Add('<address>');
3120 bound := FHistoryList.Count - 1;
3121 for i := bound downto 0 do begin
3122 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3124 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3125 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3127 saveList.Add('</address>');
3128 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3135 procedure TGikoForm.LoadHistory;
3139 XMLDoc : IXMLDocument;
3141 HistoryNode : IXMLNode;
3143 favItem : TFavoriteThreadItem;
3152 fileName := GikoSys.GetConfigDir + 'History.xml';
3154 if FileExists( fileName ) then begin
3156 XMLDoc := IXMLDocument.Create;
3157 //XMLDoc := LoadXMLDocument(FileName);
3158 LoadXMLDocument(FileName, XMLDoc);
3160 XMLNode := XMLDoc.DocumentElement;
3162 if XMLNode.NodeName = 'address' then begin
3163 bound := XMLNode.ChildNodes.Count - 1;
3164 for i := 0 to bound do begin
3165 HistoryNode := XMLNode.ChildNodes[i];
3166 if HistoryNode.NodeName = 'history' then begin
3167 //if FReadCount >= sl.Count then begin
3168 s := Trim(HistoryNode.Attributes['url']);
3169 if s <> '' then begin
3170 favItem := TFavoriteThreadItem.Create(
3171 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3172 if not AddHistory( favItem ) then
3186 rt := GetTickCount - st;
3187 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3192 procedure TGikoForm.ShowBBSTreeOld(
3200 FavoriteTreeView.Visible := False;
3201 FavoriteToolBar.Hide;
3202 TreeView.Visible := True;
3204 b := CabinetSelectPopupMenu.Items.Count - 1;
3205 for i := 0 to b do begin
3206 item := CabinetSelectPopupMenu.Items[ i ];
3207 if item is TBBSMenuItem then begin
3208 if TBBSMenuItem( item ).Data = inBBS then begin
3209 item.Checked := True;
3210 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3211 CabinetMenu.Items[ i ].Checked := True;
3212 GikoSys.Setting.CabinetIndex := i;
3216 item.Checked := False;
3217 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3218 CabinetMenu.Items[ i ].Checked := False;
3220 CabinetSelectToolButton.Caption := inBBS.Title;
3222 GikoDM.CabinetHistoryAction.Checked := False;
3223 GikoDM.CabinetFavoriteAction.Checked := False;
3225 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3226 FTreeType := gtt2ch;
3227 HistoryToolBar.Hide;
3228 FActiveBBS := inBBS;
3229 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3230 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3231 //?c???[??g?b?v?????I????
3232 if GetActiveList = nil then
3233 TreeView.Selected := TreeView.Items[0]
3235 for i := 0 to TreeView.Items.Count - 1 do begin
3236 if TreeView.Items[i].Data = GetActiveList then begin
3237 TreeView.Selected := TreeView.Items[i];
3241 TreeView.Selected := TreeView.Items[0]
3249 procedure TGikoForm.ShowBBSTree(
3258 FavoriteTreeView.Visible := False;
3259 FavoriteToolBar.Hide;
3260 TreeView.Visible := True;
3262 b := CabinetSelectPopupMenu.Items.Count - 1;
3263 for i := 0 to b do begin
3264 item := CabinetSelectPopupMenu.Items[ i ];
3265 if item is TBBSMenuItem then begin
3266 if TBBSMenuItem( item ).Data = inBBS then begin
3267 item.Checked := True;
3268 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3269 CabinetMenu.Items[ i ].Checked := True;
3270 GikoSys.Setting.CabinetIndex := i;
3274 item.Checked := False;
3275 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3276 CabinetMenu.Items[ i ].Checked := False;
3278 CabinetSelectToolButton.Caption := inBBS.Title;
3280 GikoDM.CabinetHistoryAction.Checked := False;
3281 GikoDM.CabinetFavoriteAction.Checked := False;
3283 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3284 or (not (CabinetPanel.Visible)) then begin
3285 FTreeType := gtt2ch;
3286 HistoryToolBar.Hide;
3287 FActiveBBS := inBBS;
3288 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3289 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3290 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3291 if GetActiveList = nil then begin
3293 TreeClick( TreeView.Items[0] );
3297 for i := 0 to TreeView.Items.Count - 1 do begin
3298 if TreeView.Items[i].Data = GetActiveList then begin
3299 TreeClick( TreeView.Items[i] );
3303 TreeClick( TreeView.Items[0] );
3311 procedure TGikoForm.ShowHistoryTree;
3316 if CabinetPanel.Visible then begin
3317 if FTreeType = gttHistory then begin
3318 CabinetVisible( False );
3319 GikoDM.CabinetHistoryAction.Checked := False;
3321 GikoDM.CabinetHistoryAction.Checked := True;
3324 CabinetVisible( True );
3325 GikoDM.CabinetHistoryAction.Checked := True;
3328 // BBS...BBS, History, Favorite
3329 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3331 FavoriteTreeView.Visible := False;
3332 TreeView.Visible := True;
3334 GikoDM.CabinetBBSAction.Checked := False;
3335 GikoDM.CabinetFavoriteAction.Checked := False;
3337 if FTreeType <> gttHistory then begin
3338 b := CabinetSelectPopupMenu.Items.Count - 1;
3339 for i := 0 to b do begin
3340 item := CabinetSelectPopupMenu.Items[ i ];
3341 if item is TBBSMenuItem then begin
3342 item.Checked := False;
3343 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3344 CabinetMenu.Items[ i ].Checked := False;
3348 FTreeType := gttHistory;
3349 HistoryToolBar.Show;
3350 FavoriteToolBar.Hide;
3352 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3356 procedure TGikoForm.SetHistoryTreeNode;
3360 Item: TFavoriteThreadItem;
3362 TreeView.Items.BeginUpdate;
3364 TreeView.Items.Clear;
3365 for i := 0 to FHistoryList.Count - 1 do begin
3366 Item := TFavoriteThreadItem(FHistoryList[i]);
3367 Node := TreeView.Items.Add(nil, Item.Title);
3369 if Item.Item.NewArrival then begin
3370 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3371 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3373 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3374 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3377 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3378 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3379 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3380 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3384 TreeView.Items.EndUpdate;
3388 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3390 ChangeEvent: TTVChangedEvent;
3391 ChangingEvent: TTVChangingEvent;
3395 if Item is TCategory then
3396 bbs := TCategory( Item ).ParenTBBS
3397 else if Item is TBoard then
3398 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3402 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3403 if Item <> FActiveList then begin
3405 ChangingEvent := nil;
3407 if not CallEvent then begin
3408 ChangeEvent := TreeView.OnChange;
3409 ChangingEvent := TreeView.OnChanging;
3412 if not CallEvent then begin
3413 TreeView.OnChange := nil;
3414 TreeView.OnChanging := nil;
3416 //Application.ProcessMessages;
3417 for i := 0 to TreeView.Items.Count - 1 do begin
3418 if TreeView.Items[i].Data = Item then begin
3419 TreeView.Items[i].Selected := True;
3421 TreeClick(TreeView.Items[i]);
3425 //Application.ProcessMessages;
3427 if not CallEvent then begin
3428 TreeView.OnChange := ChangeEvent;
3429 TreeView.OnChanging := ChangingEvent;
3434 if Item <> FActiveList then begin
3435 ActiveListColumnSave;
3436 if (Item is TBBS) or (Item is TCategory) then begin
3437 ListView.Columns.Clear;
3438 SetActiveList( Item );
3439 end else if Item is TBoard then begin
3440 if not TBoard( Item ).IsThreadDatRead then begin
3441 Screen.Cursor := crHourGlass;
3443 if not TBoard( Item ).IsThreadDatRead then
3444 GikoSys.ReadSubjectFile(TBoard( Item ));
3446 Screen.Cursor := crDefault;
3449 Sort.SetSortDate(Now());
3450 SetActiveList( Item );
3455 if Item is TBoard then begin // not TCategory
3456 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3457 if GikoSys.Setting.ListWidthState = glsMax then begin
3458 GikoDM.BrowserMinAction.Execute;
3459 if GikoForm.Visible then
3463 if GikoSys.Setting.ListHeightState = glsMax then begin
3464 GikoDM.BrowserMinAction.Execute;
3465 if GikoForm.Visible then
3472 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3473 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3475 listItem : TListItem;
3476 threadItem : TThreadItem;
3483 if not (GetActiveList is TBoard) then Exit;
3484 listItem := ListView.GetItemAt( X, Y );
3485 if listItem = nil then Exit;
3486 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3488 threadItem := TThreadItem(ListItem.Data);
3489 InsertBrowserTab(threadItem, False);
3490 if threadItem.IsLogFile then
3491 ListView.UpdateItems(listItem.Index, listItem.Index);
3495 //
\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Å
3496 if (ssDouble in Shift) then
3497 ListDoubleClick(Shift)
3505 Windows.ClientToScreen( ListView.Handle, pos );
3506 ListPopupMenu.Popup( pos.X, pos.Y );
3512 procedure TGikoForm.ListClick;
3514 ListItem: TListItem;
3515 ThreadItem: TThreadItem;
3517 if ListView.SelCount <> 1 then Exit;
3518 ListItem := ListView.Selected;
3519 if ListItem = nil then Exit;
3520 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3522 ThreadItem := TThreadItem(ListItem.Data);
3523 if ThreadItem.IsLogFile then begin
3524 InsertBrowserTab(ThreadItem);
3525 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3527 InsertBrowserTab(ThreadItem);
3530 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3531 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3532 if GikoSys.Setting.ListWidthState = glsMin then begin
3533 GikoDM.BrowserMaxAndFocusAction.Execute;
3536 if GikoSys.Setting.ListHeightState = glsMin then begin
3537 GikoDM.BrowserMaxAndFocusAction.Execute;
3543 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3545 ThreadItem: TThreadItem;
3548 shiftDown := (ssShift in Shift);
3550 if ListView.Selected = nil then Exit;
3552 if TObject(ListView.Selected.Data) is TCategory then begin
3553 SelectTreeNode(ListView.Selected.Data, True);
3554 end else if TObject(ListView.Selected.Data) is TBoard then begin
3555 SelectTreeNode(ListView.Selected.Data, True)
3556 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3557 Application.ProcessMessages;
3558 ThreadItem := TThreadItem(ListView.Selected.Data);
3559 DownloadContent(ThreadItem, shiftDown);
3561 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3562 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3563 if GikoSys.Setting.ListWidthState = glsMin then begin
3564 GikoDM.BrowserMaxAction.Execute;
3565 GikoDM.SetFocusForBrowserAction.Execute;
3568 if GikoSys.Setting.ListHeightState = glsMin then begin
3569 GikoDM.BrowserMaxAction.Execute;
3570 GikoDM.SetFocusForBrowserAction.Execute;
3577 procedure TGikoForm.BrowserMovement(const AName: string);
3579 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3580 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3581 and (FActiveContent <> nil) then begin
3582 FActiveContent.Move(AName);
3586 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3588 if TObject(Node.Data) is TBBS then begin
3589 TBBS(Node.Data).NodeExpand := False;
3590 end else if TObject(Node.Data) is TCategory then begin
3591 TCategory(Node.Data).NodeExpand := False;
3592 end else if TObject(Node.Data) is TBoard then begin
3593 TBoard(Node.Data).NodeExpand := False;
3595 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3596 TreeClick(TreeView.Selected);
3600 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3602 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3604 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3606 TreeSplitter.Visible := isVisible;
3607 CabinetPanel.Visible := isVisible;
3608 GikoDM.CabinetVisibleAction.Checked := isVisible;
3611 procedure TGikoForm.SelectListItem(List: TList);
3613 TmpListItem: TListItem;
3617 TmpListItem := ListView.Selected;
3618 while TmpListItem <> nil do begin
3619 List.Add(TmpListItem.Data);
3620 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3625 procedure TGikoForm.FormResize(Sender: TObject);
3628 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3629 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3631 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3632 if GikoSys.Setting.ListWidthState = glsMin then begin
3633 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3634 ViewPanel.Width := ThreadMainPanel.Width - 80;
3637 if GikoSys.Setting.ListHeightState = glsMin then begin
3638 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3639 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3643 FIsIgnoreResize := rtResizing;
3644 PostMessage( Handle, USER_RESIZED, 0, 0 );
3649 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3654 idx := BrowserTab.TabIndex;
3655 FTabHintIndex := -1;
3656 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3657 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3659 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3660 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3661 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3664 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3666 if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
3667 FActiveContent := nil;
3668 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3669 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3671 FBrowsers.Move(j, BROWSER_COUNT - 1);
3673 BrowserTab.Tabs.BeginUpdate;
3675 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3676 if ( BrowserTab.Tabs.Count - 1 = i ) and
3677 ( BrowserTab.TabRect(i).Left
3678 <= BrowserTab.DisplayRect.Left ) then begin
3679 BrowserTab.ScrollTabs(-1);
3681 BrowserTab.Tabs.Delete(i);
3682 if idx > i then begin
3683 BrowserTab.TabIndex := idx - 1;
3685 if BrowserTab.Tabs.Count -1 >= idx then
3686 BrowserTab.TabIndex := idx
3688 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3691 BrowserTab.Tabs.EndUpdate;
3693 if BrowserTab.Tabs.Count = 0 then begin
3694 BrowserNullTab.Thread := nil;
3696 if(BrowserTab.TabIndex <> -1) and
3697 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3698 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3699 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3700 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3702 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3706 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3707 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3708 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3709 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3711 if( FActiveContent = nil) then
3712 BrowserTab.OnChange(nil);
3717 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3722 idx := BrowserTab.TabIndex;
3723 FTabHintIndex := -1;
3724 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3725 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3727 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3728 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3729 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3733 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3735 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
3736 FActiveContent := nil;
3737 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3738 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3740 FBrowsers.Move(j, BROWSER_COUNT - 1);
3742 BrowserTab.Tabs.BeginUpdate;
3744 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3745 if ( BrowserTab.Tabs.Count - 1 = i ) and
3746 ( BrowserTab.TabRect(i).Left
3747 <= BrowserTab.DisplayRect.Left ) then begin
3748 BrowserTab.ScrollTabs(-1);
3750 BrowserTab.Tabs.Delete(i);
3751 if idx > i then begin
3752 BrowserTab.TabIndex := idx - 1;
3754 if BrowserTab.Tabs.Count -1 >= idx then
3755 BrowserTab.TabIndex := idx
3757 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3760 BrowserTab.Tabs.EndUpdate;
3762 if(BrowserTab.TabIndex <> -1) and
3763 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3764 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3765 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3766 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3768 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3772 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3773 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3774 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3775 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3778 if( FActiveContent = nil) then
3779 BrowserTab.OnChange(nil);
3784 function TGikoForm.Hook(var Message: TMessage): Boolean;
3786 //
\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Ì
3787 //
\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ð
3791 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3793 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3797 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3799 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
3800 ItemReservPMenu.Visible := (GetActiveList is TBoard);
3801 LPMSep01.Visible := (GetActiveList is TBoard);
3802 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3803 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3804 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3805 KidokuPMenu.Visible := (GetActiveList is TBoard);
3806 MidokuPMenu.Visible := (GetActiveList is TBoard);
3807 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3808 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3809 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3810 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3811 DeletePMenu.Visible := (GetActiveList is TBoard);
3812 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3813 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
3814 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
3816 AddRoundNameMenu(ItemReservPMenu);
3817 AddRoundNameMenu(ListReservPMenu);
3820 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3822 FClickNode := TreeView.Selected;
3823 if FClickNode = nil then begin
3824 TreeSelectThreadPupupMenu.Visible := False;
3825 TreeSelectBoardPupupMenu.Visible := False;
3826 TPMSep01.Visible := False;
3827 TreeSelectURLPupupMenu.Visible := False;
3828 TreeSelectNamePupupMenu.Visible := False;
3829 TreeSelectNameURLPupupMenu.Visible := False;
3830 TreeSelectFavoriteAddPupupMenu.Visible := False;
3831 TreeSelectLogDeleteSeparator.Visible := False;
3832 TreeSelectLogDeletePopupMenu.Visible := False;
3833 end else if TObject(FClickNode.Data) is TBoard then begin
3834 TreeSelectThreadPupupMenu.Visible := False;
3835 TreeSelectBoardPupupMenu.Visible := True;
3836 TPMSep01.Visible := True;
3837 TreeSelectURLPupupMenu.Visible := True;
3838 TreeSelectNamePupupMenu.Visible := True;
3839 TreeSelectNameURLPupupMenu.Visible := True;
3840 TreeSelectFavoriteAddPupupMenu.Visible := True;
3841 TreeSelectLogDeleteSeparator.Visible := False;
3842 TreeSelectLogDeletePopupMenu.Visible := False;
3843 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3844 TreeSelectThreadPupupMenu.Visible := False;
3845 TreeSelectBoardPupupMenu.Visible := True;
3846 TPMSep01.Visible := True;
3847 TreeSelectURLPupupMenu.Visible := True;
3848 TreeSelectNamePupupMenu.Visible := True;
3849 TreeSelectNameURLPupupMenu.Visible := True;
3850 TreeSelectFavoriteAddPupupMenu.Visible := True;
3851 TreeSelectLogDeleteSeparator.Visible := False;
3852 TreeSelectLogDeletePopupMenu.Visible := False;
3853 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3854 TreeSelectThreadPupupMenu.Visible := True;
3855 TreeSelectBoardPupupMenu.Visible := False;
3856 TPMSep01.Visible := True;
3857 TreeSelectURLPupupMenu.Visible := True;
3858 TreeSelectNamePupupMenu.Visible := True;
3859 TreeSelectNameURLPupupMenu.Visible := True;
3860 TreeSelectFavoriteAddPupupMenu.Visible := True;
3861 TreeSelectLogDeleteSeparator.Visible := True;
3862 TreeSelectLogDeletePopupMenu.Visible := True;
3863 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3864 TreeSelectThreadPupupMenu.Visible := True;
3865 TreeSelectBoardPupupMenu.Visible := False;
3866 TPMSep01.Visible := True;
3867 TreeSelectURLPupupMenu.Visible := True;
3868 TreeSelectNamePupupMenu.Visible := True;
3869 TreeSelectNameURLPupupMenu.Visible := True;
3870 TreeSelectFavoriteAddPupupMenu.Visible := True;
3871 TreeSelectLogDeleteSeparator.Visible := True;
3872 TreeSelectLogDeletePopupMenu.Visible := True;
3873 end else if (TObject(FClickNode.Data) is TCategory) then begin
3874 TreeSelectThreadPupupMenu.Visible := False;
3875 TreeSelectBoardPupupMenu.Visible := False;
3876 TPMSep01.Visible := False;
3877 TreeSelectURLPupupMenu.Visible := False;
3878 TreeSelectNamePupupMenu.Visible := True;
3879 TreeSelectNameURLPupupMenu.Visible := False;
3880 TreeSelectFavoriteAddPupupMenu.Visible := False;
3881 TreeSelectLogDeleteSeparator.Visible := False;
3882 TreeSelectLogDeletePopupMenu.Visible := False;
3883 end else if FClickNode.IsFirstNode then begin
3884 TreeSelectThreadPupupMenu.Visible := False;
3885 TreeSelectBoardPupupMenu.Visible := False;
3886 TPMSep01.Visible := False;
3887 TreeSelectURLPupupMenu.Visible := False;
3888 TreeSelectNamePupupMenu.Visible := True;
3889 TreeSelectNameURLPupupMenu.Visible := False;
3890 TreeSelectFavoriteAddPupupMenu.Visible := False;
3891 TreeSelectLogDeleteSeparator.Visible := False;
3892 TreeSelectLogDeletePopupMenu.Visible := False;
3894 TreeSelectThreadPupupMenu.Visible := False;
3895 TreeSelectBoardPupupMenu.Visible := False;
3896 TPMSep01.Visible := False;
3897 TreeSelectURLPupupMenu.Visible := False;
3898 TreeSelectNamePupupMenu.Visible := False;
3899 TreeSelectNameURLPupupMenu.Visible := False;
3900 TreeSelectFavoriteAddPupupMenu.Visible := False;
3901 TreeSelectLogDeleteSeparator.Visible := False;
3902 TreeSelectLogDeletePopupMenu.Visible := False;
3906 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3907 var ppDisp: IDispatch; var Cancel: WordBool);
3916 threadItem: TThreadItem;
3920 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3921 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3922 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3923 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3924 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3925 if GikoSys.Setting.ResAnchorJamp then begin
3926 Text := ZenToHan(Trim(Text));
3928 if(AnsiPos('>>', Text) = 1) then begin
3929 //Text := Copy(Text, 3, Length(Text) - 2);
3932 //Text := Copy(Text, 2, Length(Text) - 1);
3936 if AnsiPos('-', Text) <> 0 then begin
3937 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3938 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3939 wkIntTo := StrToIntDef(Text, 0);
3940 if wkIntTo < wkIntSt then
3943 wkIntSt := StrToIntDef(Text, 0);
3946 if wkIntSt <> 0 then begin
3947 FActiveContent.IDAnchorPopup('');
3948 BrowserMovement(IntToStr(wkIntSt));
3954 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3956 URL := GikoSys.GetHRefText(Html);
3957 URL := GikoSys.HTMLDecode(URL);
3958 if AnsiPos('BE:', URL) = 1 then begin
3959 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3960 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3961 threadItem := FActiveContent.Thread;
3962 if threadItem = nil then Exit;
3963 URL := BE_PHP_URL + BNum + '&u=d'
3964 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3967 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3968 ( AnsiPos('ftp://', URL) = 1) then begin
3969 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3970 if GikoSys.Setting.LinkAddAddressBar then begin
3971 idx := AddressComboBox.Items.IndexOf(URL);
3972 if idx = -1 then begin
3973 AddressComboBox.Items.Insert(0, URL);
3974 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3975 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3977 AddressComboBox.Items.Delete(idx);
3978 AddressComboBox.Items.Insert(0, URL);
3988 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3990 if Mouse.Capture <> 0 then
3992 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3993 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3994 FBrowserSizeWidth := ViewPanel.Width;
3996 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3997 FBrowserSizeHeight := ViewPanel.Height;
3999 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4000 if ViewPanel.Width < 2 then begin
4001 ViewPanel.Width := 1;
4002 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4003 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4004 GikoSys.Setting.ListWidthState := glsMax;
4005 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4006 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4007 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4008 GikoSys.Setting.ListWidthState := glsMin;
4010 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4011 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4012 GikoSys.Setting.ListWidthState := glsNormal;
4015 if ViewPanel.Height < 2 then begin
4016 ViewPanel.Height := 1;
4017 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4018 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4019 GikoSys.Setting.ListHeightState := glsMax;
4020 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4021 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4022 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4023 GikoSys.Setting.ListHeightState := glsMin;
4025 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4026 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4027 GikoSys.Setting.ListHeightState := glsNormal;
4030 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4031 FBrowserSizeHeight := ViewPanel.Height
4032 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4033 FBrowserSizeWidth := ViewPanel.Width;}
4036 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4041 BrowserTab.Tabs.BeginUpdate;
4043 if not BrowserTab.Dragging then begin
4044 FTabHintIndex := -1;
4045 BrowserTab.Hint := '';
4046 idx := BrowserTab.TabIndex;
4047 if idx = -1 then begin
4048 SetContent(BrowserNullTab);
4050 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4051 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4052 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4054 FBrowsers.Move(j ,0);
4056 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4057 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4058 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4059 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4061 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4062 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4063 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4067 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4068 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4069 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4071 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4072 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4073 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4075 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4076 AddressComboBox.Text := GetActiveContent.URL;
4078 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4079 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4082 GikoDM.SetFocusForBrowserAction.Execute;
4086 BrowserTab.Tabs.EndUpdate;
4091 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4092 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4098 if Button = mbMiddle then begin
4099 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4102 p := BrowserTab.ScreenToClient(p);
4103 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4105 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4106 end else if Button = mbLeft then begin
4107 FDragWFirst := true;
4108 FMouseDownPos.X := X;
4109 FMouseDownPos.Y := Y;
4114 procedure TGikoForm.SetBrowserTabState;
4116 CoolBand: TCoolBand;
4118 BrowserBottomPanel.AutoSize := False;
4119 if GikoSys.Setting.BrowserTabVisible then begin
4121 BrowserTab.Tabs.BeginUpdate;
4123 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4124 BrowserTab.Style := tsTabs;
4125 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4126 BrowserTab.TabPosition := tpTop
4128 BrowserTab.TabPosition := tpBottom;
4129 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4130 BrowserTab.TabPosition := tpTop;
4131 BrowserTab.Style := tsButtons;
4133 BrowserTab.TabPosition := tpTop;
4134 BrowserTab.Style := tsFlatButtons
4137 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4138 BrowserTab.Parent := BrowserTabToolBar;
4139 BrowserBottomPanel.Hide;
4140 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4141 if CoolBand <> nil then
4142 CoolBand.Visible := True;
4144 BrowserTab.Parent := BrowserBottomPanel;
4145 BrowserTab.Top := 0;
4146 BrowserTab.Left := 0;
4147 BrowserBottomPanel.Show;
4148 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4149 if CoolBand <> nil then
4150 CoolBand.Visible := False;
4153 BrowserTab.Tabs.EndUpdate;
4157 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4158 if CoolBand <> nil then
4159 CoolBand.Visible := False;
4160 BrowserBottomPanel.Visible := False;
4161 GikoDM.AllTabCloseAction.Execute;
4165 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4166 Y: Integer; State: TDragState; var Accept: Boolean);
4170 idx := BrowserTab.IndexOfTabAt(X, Y);
4171 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4174 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4179 idx := BrowserTab.IndexOfTabAt(X, Y);
4181 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4184 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4185 Shift: TShiftState; X, Y: Integer);
4188 ThreadItem: TThreadItem;
4191 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4193 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4194 if FDragWFirst = false then begin
4195 FDragWFirst := true;
4197 BrowserTab.EndDrag(false);
4198 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4199 FDragWFirst := false;
4202 BrowserTab.EndDrag(false);
4203 FDragWFirst := false;
4206 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4207 Application.CancelHint;
4208 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4209 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4210 BrowserTab.Hint := ThreadItem.Title;
4211 Application.ShowHint := True;
4213 BrowserTab.Hint := '';
4214 Application.ShowHint := True;
4216 FTabHintIndex := TabIdx;
4221 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4222 const pDisp: IDispatch; var URL: OleVariant);
4224 FDispHtmlDocument: DispHTMLDocument;
4225 BrowserRecord :TBrowserRecord;
4228 threadItem : TThreadItem;
4230 if TObject(Sender) is TWebBrowser then begin
4231 BrowserRecord := nil;
4232 if TWebBrowser(Sender) <> Browser then begin
4233 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4234 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4235 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4239 if BrowserRecord <> nil then begin
4240 if BrowserRecord.Event <> nil then
4241 BrowserRecord.Event.Free;
4242 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4243 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4244 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4245 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4248 if GetActiveContent <> nil then begin
4249 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4250 if FEvent <> nil then
4252 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4253 FEvent.OnContextMenu := OnDocumentContextMenu;
4254 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4256 if FEvent <> nil then begin
4264 if (BrowserRecord <> nil) and
4265 Assigned( BrowserRecord.Thread ) then begin
4266 threadItem := BrowserRecord.Thread;
4268 if (threadItem.JumpAddress > 0) then begin
4269 if threadItem.UnRead then begin
4270 threadItem.UnRead := False;
4272 RefreshListView(threadItem);
4274 //
\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®
4275 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4276 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4277 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4278 threadItem.JumpAddress := 0;
4280 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4283 end else if threadItem.UnRead then begin
4284 threadItem.UnRead := False;
4286 BrowserRecord.Move('new');
4287 RefreshListView(threadItem);
4288 end else if threadItem.ScrollTop <> 0 then begin
4290 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4291 doc.Body.ScrollTop := threadItem.ScrollTop;
4294 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4299 LockWindowUpdate(0);
4302 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4304 AddRoundNameMenu(RoundNamePopupMenu.Items);
4307 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4313 Item := TMenuItem.Create(Self);
4314 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4315 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4317 Item := TMenuItem.Create(Self);
4318 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4319 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4321 Item := TMenuItem.Create(Self);
4322 Item.Caption := '-';
4324 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4325 Item := TMenuItem.Create(Self);
4326 Item.Caption := RoundList.RoundNameList[i];
4327 Item.OnClick := SetSelectRoundName;
4332 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4334 threadItem : TThreadItem;
4336 if ParentName <> 'dummy1' then begin
4337 SetSelectItemRound(RoundFlag, RoundName);
4339 threadItem := GetActiveContent;
4340 if threadItem <> nil then begin
4341 threadItem.RoundName := RoundName;
4343 RoundList.RoundNameList.Add(RoundName);
4344 threadItem.Round := RoundFlag;
4349 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4354 List := TList.Create;
4356 SelectListItem(List);
4357 for i := 0 to List.Count - 1 do begin
4358 if TObject(List[i]) is TBoard then begin
4359 TBoard(List[i]).RoundName := RoundName;
4361 RoundList.RoundNameList.Add(RoundName);
4362 TBoard(List[i]).Round := RoundFlag;
4363 end else if TObject(List[i]) is TThreadItem then begin
4364 if TThreadItem(List[i]).IsLogFile then begin
4365 TThreadItem(List[i]).RoundName := RoundName;
4367 RoundList.RoundNameList.Add(RoundName);
4368 TThreadItem(List[i]).Round := RoundFlag;
4377 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4379 MenuItem: TMenuItem;
4381 if Sender is TMenuItem then begin
4382 MenuItem := TMenuItem(Sender);
4383 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4388 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4393 if CoolBar = nil then
4395 for i := 0 to CoolBar.Bands.Count - 1 do begin
4396 if CoolBar.Bands[i].Control = Control then begin
4397 Result := CoolBar.Bands[i];
4403 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4405 if BrowserTab.Parent = BrowserTabToolBar then
4406 BrowserTab.Width := BrowserTabToolBar.Width;
4409 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4414 procedure TGikoForm.SetMenuFont;
4416 // GikoSys.MenuFont(MenuToolBar.Font);
4417 // MenuToolBar.Buttons[0].AutoSize := False;
4418 // MenuToolBar.Buttons[0].AutoSize := True;
4419 // MenuToolBar.Font.Color := clMenuText;
4420 GikoSys.MenuFont(MainCoolBar.Font);
4421 MenuToolBar.Buttons[0].AutoSize := False;
4422 MenuToolBar.Buttons[0].AutoSize := True;
4423 MainCoolBar.AutoSize := False;
4424 MainCoolBar.AutoSize := True;
4426 GikoSys.MenuFont(ListCoolBar.Font);
4427 GikoSys.MenuFont(BrowserCoolBar.Font);
4428 // MenuToolBar.Font.Color := clMenuText;
4431 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4435 if FavoriteDM.Modified then begin
4438 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4439 NewMenu := TMenuItem.Create(MainMenu);
4440 NewMenu.Action := GikoDM.FavoriteAddAction;
4441 FavoriteMenu.Add(NewMenu);
4442 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4443 NewMenu := TMenuItem.Create(FavoriteMenu);
4444 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4445 FavoriteMenu.Add(NewMenu);
4446 //
\83Z
\83p
\83\8c\81[
\83^
4447 FavoriteMenu.InsertNewLineAfter(NewMenu);
4448 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4449 FavoriteDM.Modified := false;
4453 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4456 NewMenu: array of TMenuItem;
4458 SetLength(NewMenu, Node.Count);
4459 Node := Node.getFirstChild;
4461 while ( Node <> nil ) do begin
4462 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4463 NewMenu[i].AutoHotkeys := maAutomatic;
4464 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4465 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4467 if TObject(Node.Data) is TFavoriteFolder then begin
4468 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4469 CreateFavMenu(Node, NewMenu[i]);
4470 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4471 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4472 NewMenu[i].OnClick := FavoriteClick;
4473 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4474 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4475 NewMenu[i].OnClick := FavoriteClick;
4478 Node := Node.getNextSibling;
4480 MenuItem.Add(NewMenu);
4483 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4485 Dlg : TFavoriteAddDialog;
4491 if Item is TFavoriteBoardItem then
4492 Item := TFavoriteBoardItem( Item ).Item
4493 else if Item is TFavoriteThreadItem then
4494 Item := TFavoriteThreadItem( Item ).Item;
4496 Node := FavoriteTreeView.Items.GetFirstNode;
4497 if Item is TBoard then begin
4498 ItemURL := TBoard( Item ).URL;
4499 while Node <> nil do begin
4501 if TObject( Data ) is TFavoriteBoardItem then begin
4502 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4503 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
4508 Node := Node.GetNext;
4510 Dlg := TFavoriteAddDialog.Create(Self);
4512 Dlg.SetBoard( TBoard( Item ) );
4517 end else if Item is TThreadItem then begin
4518 ItemURL := TThreadItem( Item ).URL;
4519 while Node <> nil do begin
4521 if TObject( Data ) is TFavoriteThreadItem then begin
4522 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4523 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
4528 Node := Node.GetNext;
4530 Dlg := TFavoriteAddDialog.Create(Self);
4532 Dlg.SetThreadItem( TThreadItem( Item ) );
4542 procedure TGikoForm.FavoriteClick(Sender: TObject);
4544 FavoriteClick( Sender, True );
4547 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4550 ThreadItem: TThreadItem;
4551 FavBoard: TFavoriteBoardItem;
4552 FavThread: TFavoriteThreadItem;
4556 if Sender is TFavoriteMenuItem then
4557 Item := TFavoriteMenuItem(Sender).Data
4558 else if Sender is TLinkToolButton then
4559 Item := TLinkToolButton(Sender).Data
4560 else if Sender is TTreeNode then
4561 Item := TTreeNode( Sender ).Data
4565 if TObject(Item) is TFavoriteBoardItem then begin
4566 FavBoard := TFavoriteBoardItem(Item);
4567 Board := FavBoard.Item;
4568 if Board <> nil then begin
4569 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4570 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4571 SelectTreeNode(Board, True);
4573 end else if TObject(Item) is TFavoriteThreadItem then begin
4574 FavThread := TFavoriteThreadItem(Item);
4575 ThreadItem := FavThread.Item;
4576 if ThreadItem = nil then
4579 InsertBrowserTab(ThreadItem, ActiveTab);
4581 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4582 if GikoSys.Setting.ListWidthState = glsMin then begin
4583 GikoDM.BrowserMaxAndFocusAction.Execute;
4586 if GikoSys.Setting.ListHeightState = glsMin then begin
4587 GikoDM.BrowserMaxAndFocusAction.Execute;
4593 procedure TGikoForm.BBSMenuItemOnClick(
4598 if Sender is TBBSMenuItem then
4599 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4603 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4605 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4608 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
4609 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4611 stRes, edRes : Int64;
4612 browserRec : TBrowserRecord;
4613 threadNumber : String;
4618 Thread.JumpAddress := 0;
4619 //
\83^
\83u
\82ð
\90¶
\90¬
4620 browserRec := InsertBrowserTab(Thread);
4621 if (browserRec <> nil) then begin
4622 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4623 threadNumber := ChangeFileExt(Thread.FileName, '');
4624 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4625 //
\83X
\83\8c\82Ì
\94Ô
\8d\86\82ð
\83\8c\83X
\94Ô
\82Æ
\8cë
\82Á
\82Ä
\94F
\8e¯
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\83N
\83\8a\83A
4626 if (StrToInt64(threadNumber) = stRes) then begin
4627 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4628 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4632 if ( stRes > 0 ) then begin
4633 Thread.JumpAddress := stRes;
4635 //
\83\8d\83O
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82È
\82¢
\82© JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82Ü
\82Å
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é
4636 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4637 DownloadContent(Thread);
4638 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4639 browserRec.Move(IntToStr(stRes));
4640 Thread.JumpAddress := 0;
4642 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4643 Thread.ScrollTop := doc.Body.ScrollTop;
4650 procedure TGikoForm.MoveToURL(const inURL: string);
4652 protocol, host, path, document, port, bookmark : string;
4653 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4655 BBSID, BBSKey: string;
4656 {tmpBoard,} Board: TBoard;
4657 ThreadItem: TThreadItem;
4660 tmpThread : TThreadItem;
4661 shiftDown : Boolean;
4665 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4666 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4669 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4670 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4671 if shiftDown then begin
4672 GikoSys.OpenBrowser(inURL, gbtUserApp);
4674 end else if ctrlDown then begin
4675 GikoSys.OpenBrowser(inURL, gbtIE);
4679 //=====
\83v
\83\89\83O
\83C
\83\93
4682 bi := Length(BoardGroups) - 1;
4683 for i := 1 to bi do begin
4684 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4685 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4688 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4689 Board := BBSsFindBoardFromURL( boardURL );
4692 if Board = nil then begin
4694 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4695 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4698 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4699 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4700 ShowBBSTree( BBSs[ 1 ] );
4703 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4704 if not Board.IsThreadDatRead then begin
4705 GikoSys.ReadSubjectFile( Board );
4709 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4710 if ThreadItem = nil then begin
4711 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4712 ThreadItem := tmpThread;
4713 Board.Insert( 0, ThreadItem );
4714 if ActiveList is TBoard then begin
4715 if TBoard(ActiveList) = Board then
4716 ListView.Items.Count := ListView.Items.Count + 1;
4721 OpenThreadItem(ThreadItem, inURL);
4728 Board := BBSsFindBoardFromURL(
4729 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4731 if Board <> nil then begin
4732 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4733 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4734 SelectTreeNode( Board, True );
4742 // 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¢
4746 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4747 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4748 Board := BBSsFindBoardFromURL( boardURL );
4749 if Board = nil then begin
4750 //
\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
4751 GikoSys.OpenBrowser(inURL, gbtUserApp);
4754 //
\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é
4756 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4757 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4758 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4759 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4760 GikoSys.OpenBrowser(inURL, gbtUserApp);
4765 if not Board.IsThreadDatRead then
4766 GikoSys.ReadSubjectFile(Board);
4767 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4768 ThreadItem := Board.FindThreadFromURL( URL );
4769 //
\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)
4770 if ThreadItem = nil then begin
4771 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4774 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4775 if ThreadItem = nil then begin
4776 ThreadItem := TThreadItem.Create( nil, Board, URL );
4777 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4778 Board.Insert(0, ThreadItem);
4779 if ActiveList is TBoard then begin
4780 if TBoard(ActiveList) = Board then
4781 ListView.Items.Count := ListView.Items.Count + 1;
4784 //
\83\8d\83O
\82È
\82µ
\83X
\83\8c\83b
\83h
\82Ì
\82Æ
\82«
\82Í
\81A
\83z
\83X
\83g
\96¼
\82Ì
\83`
\83F
\83b
\83N
\82ð
\82·
\82é
4785 if (not ThreadItem.IsLogFile) then begin
4786 if AnsiPos(Host, Board.URL) = 0 then
4787 ThreadItem.DownloadHost := Host
4789 ThreadItem.DownloadHost := '';
4791 OpenThreadItem(ThreadItem, inURL);
4795 Board := BBSsFindBoardFromURL( inURL );
4796 if Board = nil then begin
4797 GikoSys.OpenBrowser(inURL, gbtAuto);
4799 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4800 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4801 SelectTreeNode( Board, True );
4806 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4808 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4809 CoolBarResized( Sender, MainCoolBar );
4812 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4813 Shift: TShiftState);
4815 if Key = VK_RETURN then
4816 GikoDM.MoveToAction.Execute;
4819 procedure TGikoForm.BrowserEnter(Sender: TObject);
4821 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4824 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4826 CDS:PCopyDataStruct;
4830 CDS := Message.CopyDataStruct;
4831 GetMem(PC, CDS^.cbData);
4833 lstrcpy(PC,CDS^.lpData);
4834 SetString(sURL, PC,lstrlen(PC));
4839 Message.Result := 1;
4842 procedure TGikoForm.WndProc(var Message: TMessage);
4844 senderBrowser : TWebBrowser;
4850 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4853 if Message.WParam = SC_MINIMIZE then
4856 TreeClick( TreeView.Selected );
4863 USER_DOCUMENTCOMPLETE:
4864 if (Message.WParam <> 0) and
4865 (TObject(Message.WParam) is TWebBrowser) then begin
4866 senderBrowser := TWebBrowser( Message.WParam );
4867 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4876 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4881 //
\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Í
4882 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4883 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4884 if Msg.CharCode in [VK_BACK] then begin
4885 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4886 if Msg.KeyData > 0 then begin
4889 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4893 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4894 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4897 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4900 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4901 if Msg.CharCode in [VK_BACK] then begin
4902 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4903 if Msg.KeyData > 0 then begin
4906 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4909 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4912 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4916 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4920 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4926 HtmlFileName: string;
4930 TargetFrameName: OleVariant;
4931 PostData: OleVariant;
4932 Headers: OleVariant;
4933 WindowHeight: Integer;
4934 WindowWidth: Integer;
4938 Protocol, Host, Path, Document, Port, Bookmark: string;
4940 PreviewTimer.Enabled := False;
4944 case GikoSys.Setting.PreviewSize of
4951 WindowHeight := 192;
4955 WindowHeight := 384;
4959 WindowHeight := 480;
4961 else begin //gpsMedium
4963 WindowHeight := 288;
4967 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4969 case GikoSys.Setting.PopupPosition of
4970 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4971 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4972 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4973 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4974 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4975 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4976 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4977 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4978 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Ó
4981 html := '<html><head>'#13#10
4983 + 'function init() {'#13#10
4984 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4986 + ' var dh, ih;'#13#10
4987 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4988 + ' ih = Image1.width / Image1.height;'#13#10
4989 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4990 + ' if (ih > dh)'#13#10
4991 + ' Image1.width = document.body.clientWidth;'#13#10
4993 + ' Image1.height = document.body.clientHeight;'#13#10
4995 + ' if (ih < dh)'#13#10
4996 + ' Image1.height = document.body.clientHeight;'#13#10
4998 + ' Image1.width = document.body.clientWidth;'#13#10
5001 + ' Message.style.display = "none";'#13#10
5005 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
5006 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
5007 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
5009 sl := TStringList.Create;
5012 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
5013 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
5014 sl.SaveToFile(HtmlFileName);
5021 NavURL := HtmlFileName;
5023 TargetFrameName := '';
5026 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5027 Referer := Protocol + '://' + Host;
5029 Referer := Referer + ':' + Port;
5030 Referer := Referer + Path;
5031 Headers := 'Referer: ' + Referer;
5032 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5033 if ARect.Top + WindowHeight > Screen.DesktopHeight then
5034 ARect.Top := Screen.DesktopHeight - WindowHeight;
5035 if ARect.Left + WindowWidth > Screen.DesktopWidth then
5036 ARect.Left := Screen.DesktopWidth - WindowWidth;
5037 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5038 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5040 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
5041 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5042 FPreviewBrowserRect := ARect;
5043 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5044 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5048 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5053 if PreviewTimer.Enabled then
5054 PreviewTimer.Enabled := False;
5055 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
5056 FHint.ReleaseHandle;
5060 if (FPreviewBrowser <> nil)
5061 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5062 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5063 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5064 Pos := Mouse.CursorPos;
5065 Pos.X := Pos.X + Left;
5066 Pos.Y := Pos.Y + Top;
5067 if (FPreviewBrowserRect.Left > Pos.X) or
5068 (FPreviewBrowserRect.Right < Pos.X) or
5069 (FPreviewBrowserRect.Top > Pos.Y) or
5070 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5071 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5075 Message.Result := 1;
5078 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5080 GikoDM.MsgBarCloseAction.Execute;
5083 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5085 Doc: IHtmlDocument2;
5086 Range: IHTMLTxtRange;
5089 ThreadItem: TThreadItem;
5092 FactiveContent.IDAnchorPopup('');
5093 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5094 if Assigned(Doc) then begin
5095 Range := Doc.selection.createRange as IHTMLTxtRange;
5096 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5097 s := ZenToHan(Trim(s));
5098 if GikoSys.IsNumeric(s) then begin
5100 ThreadItem := GetActiveContent;
5101 if ThreadItem <> nil then begin
5102 Num := StrToInt64(s);
5103 FHint.PopupType := gptThread;
5104 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5105 if FHint.ResCount <> 0 then
5116 procedure TGikoForm.ShowTextPopup;
5121 // if Trim(s) = '' then
5124 FHint.Font.Name := GikoSys.Setting.HintFontName;
5125 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5126 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5127 FHint.Color := GikoSys.Setting.HintBackColor;
5128 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5130 if FHint.PopupType = gptRaw then
5131 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5133 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5134 case GikoSys.Setting.PopupPosition of
5135 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5136 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5137 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5138 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5139 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5140 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5141 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5142 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5143 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Ó
5145 //FHint.ActivateHint(ARect, s);
5146 if FHint.PopupType = gptRaw then
5147 FHint.ActivateHint(ARect, FHint.Caption)
5149 FHint.ActivateHint(ARect, '');
5151 FHint.ReleaseHandle;
5156 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5158 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5159 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5161 if FTreeType = gttHistory then begin
5162 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5163 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5167 TreeView.Items.Clear;
5171 procedure TGikoForm.SetLinkBar;
5175 ToolButton: TLinkToolButton;
5176 MenuItem: TMenuItem;
5177 oldIgnoreResize : TResizeType;
5179 oldIgnoreResize := FIsIgnoreResize;
5180 FIsIgnoreResize := rtResizing;
5181 MainCoolBar.Bands.BeginUpdate;
5183 LinkBarPopupMenu.Items.Clear;
5184 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5185 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5186 LinkToolBar.Buttons[i].Free;
5187 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5188 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5189 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5190 ToolButton := TLinkToolButton.Create(LinkToolBar);
5191 // ToolButton.Parent := LinkToolBar;
5192 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5193 MenuItem := TMenuItem.Create(Self);
5194 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5195 LinkBarPopupMenu.Items.Add(MenuItem);
5196 ToolButton.MenuItem := MenuItem;
5197 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5198 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5199 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5200 ToolButton.OnClick := FavoriteClick;
5201 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5202 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5203 ToolButton.OnClick := FavoriteClick;
5205 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5206 ToolButton.Left := 10000;
5207 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5208 ToolButton.AutoSize := True;
5209 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5210 ToolButton.OnDragOver := FavoriteDragOver;
5211 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5212 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5213 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5214 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5215 //ToolButton.DragMode := dmAutomatic;
5216 ToolButton.DragMode := dmManual;
5217 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5219 LinkToolBar.InsertControl(ToolButton);
5224 { if LinkToolBar.ButtonCount = 0 then begin
5225 ToolButton := TLinkToolButton.Create(LinkToolBar);
5226 ToolButton.Style := tbsButton;
5227 ToolButton.ImageIndex := -1;
5228 ToolButton.Caption := '';
5229 LinkToolBar.InsertControl(ToolButton);
5232 MainCoolBar.Bands.EndUpdate;
5233 LoadCoolBarSettings;
5234 FIsIgnoreResize := oldIgnoreResize;
5238 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5246 if Sender = FavoriteTreeView then begin
5247 Node := FavoriteTreeView.GetNodeAt(X, Y);
5252 bound := Node.DisplayRect( False );
5253 height := bound.Bottom - bound.Top;
5254 if (bound.Top + height / 2) <= Y then
5255 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5260 if Node.IsFirstNode then
5265 if FDropSpaceNode <> nil then
5266 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5269 if Change then begin
5270 if FDropSpaceNode <> nil then
5271 FDropSpaceNode.Free;
5273 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5274 FDropSpaceNode.MoveTo( Node, naInsert );
5275 FDropSpaceNode.ImageIndex := -1;
5276 FDropSpaceNode.SelectedIndex := -1;
5280 if Source = FavoriteTreeView then begin
5281 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5286 end else if Source = BrowserTab then
5288 else if Source = ListView then
5290 else if Source is TLinkToolButton then
5292 else if Source = TreeView then
5298 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5301 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5304 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5306 // FDragging := true;
5309 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5311 SenderNode: TTreeNode;
5312 LinkToolButton: TLinkToolButton;
5315 LinkToolButton := TLinkToolButton( Sender );
5316 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5317 SenderNode.Selected := False;
5318 FavoriteDragDrop( SenderNode, Source );
5324 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5326 favButton : TLinkToolButton;
5327 favThreadItem : TFavoriteThreadItem;
5333 if Sender is TLinkToolButton then begin
5334 favButton := TLinkToolButton( Sender );
5335 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5336 favThreadItem := TFavoriteThreadItem( favButton.Data );
5337 if favThreadItem.Item <> nil then
5338 InsertBrowserTab( favThreadItem.Item, False );
5346 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5350 TToolButton( Sender ).DragMode := dmManual;
5351 if ssLeft in Shift then begin
5352 // 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)
5353 if FDragTime = 0 then begin
5354 FDragTime := GetTickCount();
5356 Now := GetTickCount();
5357 if (Now - FDragTime) > 500 then begin
5358 if FDragButton <> TToolButton( Sender ) then begin
5360 FDragButton := TToolButton( Sender );
5361 TToolButton(Sender).BeginDrag(false ,5);
5364 {$IF Defined(debug)}
5365 ShowMessage('Error');
5376 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5381 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5386 for i := 0 to ToolBar.ButtonCount - 1 do
5387 if ToolBar.Buttons[i].Visible then
5388 Result := Result + ToolBar.Buttons[i].Width;
5391 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5393 Control : TWinControl;
5396 Control := FindControl(BandInfo^.hwndChild);
5397 if Control = nil then
5400 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5401 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5402 idx := MainCoolBar.Bands[ i ].ID;
5406 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5407 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5408 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5409 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5410 BandInfo^.cxMinChild := 0;
5411 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5412 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5413 end else if Control = LinkToolBar then begin
5414 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5415 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5416 BandInfo^.cxMinChild := 0;
5417 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5418 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5419 end else begin // AddressToolBar
5420 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5421 BandInfo^.cxMinChild := 0;
5422 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5426 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5432 ChevronPopupMenu.Items.Clear;
5434 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5435 if MainCoolBar.Bands[ i ].Visible then begin
5436 if Idx = Int64(RebarChevron^.uBand) then begin
5443 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5444 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5446 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5447 ToolBarChevronMenu(StdToolBar);
5448 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5452 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5453 ChevronPopupMenu.Popup(p.x, p.y);
5457 procedure TGikoForm.MenuBarChevronMenu;
5458 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5464 for i := 0 to MenuItem.Count - 1 do begin
5466 if MenuItem[i] is TFavoriteMenuItem then begin
5467 Item := TFavoriteMenuItem.Create(Self);
5468 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5470 Item := TMenuItem.Create(Self);
5471 Item.Caption := MenuItem[i].Caption;
5472 Item.Action := MenuItem[i].Action;
5473 Item.ImageIndex := MenuItem[i].ImageIndex;
5474 Item.OnClick := MenuItem[i].OnClick;
5475 PopupItem.Add(Item);
5476 if MenuItem[i].Count > 0 then
5477 SetSubMenu(MenuItem[i], Item);
5486 ChevronPopupMenu.Items.Clear;
5487 ChevronPopupMenu.Images := MainMenu.Images;
5488 bw := GetWidthAllToolButton(MenuToolBar);
5489 if MenuToolBar.Width < bw then begin
5491 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5492 w := w + MenuToolBar.Buttons[i].Width;
5493 if MenuToolBar.Width <= w then begin
5494 Item := TMenuItem.Create(Self);
5495 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5496 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5497 ChevronPopupMenu.Items.Add(Item);
5498 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5504 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5505 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5510 if Assigned(PopupMenu.OnPopup) then
5511 PopupMenu.OnPopup(nil);
5512 for i := 0 to PopupMenu.Items.Count - 1 do begin
5514 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5515 Item := TFavoriteMenuItem.Create(Self);
5516 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5518 Item := TMenuItem.Create(Self);
5519 Item.Caption := PopupMenu.Items[i].Caption;
5520 Item.Action := PopupMenu.Items[i].Action;
5521 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5522 Item.OnClick := PopupMenu.Items[i].OnClick;
5523 PopupItem.Add(Item);
5532 ChevronPopupMenu.Items.Clear;
5533 ChevronPopupMenu.Images := ToolBar.HotImages;
5534 bw := GetWidthAllToolButton(ToolBar);
5535 if ToolBar.Width < bw then begin
5537 for i := 0 to ToolBar.ButtonCount - 1 do begin
5538 if ToolBar.Buttons[i].Visible then
5539 w := w + ToolBar.Buttons[i].Width;
5540 if ToolBar.Width <= w then begin
5541 if ToolBar.Buttons[i].Tag = 0 then begin
5542 Item := TMenuItem.Create(Self);
5543 if ToolBar.Buttons[i].Style = tbsSeparator then
5546 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5547 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5550 Item.Caption := ToolBar.Buttons[i].Caption;
5551 Item.Action := ToolBar.Buttons[i].Action;
5553 //Item.Visible := True;
5555 ChevronPopupMenu.Items.Add(Item);
5556 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5558 Item.OnClick := nil;
5559 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5567 procedure TGikoForm.LinkBarChevronMenu;
5572 Item: TFavoriteMenuItem;
5574 Button: TLinkToolButton;
5576 ChevronPopupMenu.Items.Clear;
5577 ChevronPopupMenu.Images := LinkToolBar.Images;
5578 bw := GetWidthAllToolButton(LinkToolBar);
5579 if LinkToolBar.Width < bw then begin
5581 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5582 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5583 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5584 w := w + LinkToolBar.Buttons[j].Width;
5585 if LinkToolBar.Width <= w then begin
5586 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5587 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5588 Item := TFavoriteMenuItem.Create(Self);
5589 if TObject(Button.Data) is TFavoriteFolder then begin
5590 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5591 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5592 Item.OnClick := FavoriteClick;
5593 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5594 Item.OnClick := FavoriteClick;
5596 Item.Data := Button.Data;
5597 Item.Caption := LinkToolBar.Buttons[j].Caption;
5598 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5599 ChevronPopupMenu.Items.Add(Item);
5610 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5611 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5612 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5614 \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É
5615 \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
5617 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5619 bandInfo : tagREBARBANDINFOA;
5620 pBandInfo : PReBarBandInfoA;
5627 pBandInfo := @bandInfo;
5628 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5629 bandInfo.cbSize := sizeof( bandInfo );
5630 bandInfo.hwndChild := h;
5631 bandInfo.cyMinChild := bar.Height;
5632 bar.OnBandInfo( nil, pBandInfo );
5633 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5635 for i := bar.Bands.Count - 1 downto 0 do begin
5636 if bar.Bands[ i ].Control.Handle = h then begin
5642 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5646 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5648 Control: TWinControl;
5651 Control := FindControl(BandInfo^.hwndChild);
5652 if Control = nil then
5655 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5656 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5657 idx := ListCoolBar.Bands[ i ].ID;
5661 if Control = ListToolBar then begin
5662 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5663 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5664 BandInfo^.cxMinChild := 0;
5665 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5666 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5668 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5669 BandInfo^.cxMinChild := 0;
5670 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5674 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5679 ChevronPopupMenu.Items.Clear;
5680 Idx := RebarChevron^.uBand;
5681 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5682 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5683 ToolBarChevronMenu(ListToolBar);
5686 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5687 ChevronPopupMenu.Popup(p.x, p.y);
5691 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5693 Control: TWinControl;
5696 Control := FindControl(BandInfo^.hwndChild);
5697 if Control = nil then
5700 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5701 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5702 idx := BrowserCoolBar.Bands[ i ].ID;
5706 if Control = BrowserToolBar then begin
5707 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5708 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5709 BandInfo^.cxMinChild := 0;
5710 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5711 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5713 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5714 BandInfo^.cxMinChild := 0;
5715 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5719 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5724 ChevronPopupMenu.Items.Clear;
5725 Idx := RebarChevron^.uBand;
5726 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5727 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5728 ToolBarChevronMenu(BrowserToolBar)
5731 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5732 ChevronPopupMenu.Popup(p.x, p.y);
5736 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5738 if Column^.iImage = -1 then begin
5739 Column^.mask := Column^.mask or LVCF_FMT;
5741 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5742 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5746 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5751 for i := bar.ButtonCount - 1 downto 0 do begin
5752 if bar.Buttons[ i ].Action = action then begin
5753 Result := bar.Buttons[ i ];
5759 procedure TGikoForm.SetToolBarPopup;
5762 aIEButton : TToolButton;
5763 aCabinetBBSButton : TToolButton;
5764 aResRangeButton : TToolButton;
5765 aThreadRangeButton: TToolButton;
5767 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5769 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5770 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5771 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5772 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5773 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5775 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5776 if aIEButton <> nil then
5777 aIEButton.DropdownMenu := BrowserPopupMenu;
5778 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5779 if aCabinetBBSButton <> nil then
5780 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5781 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5782 if aResRangeButton <> nil then
5783 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5784 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5785 if aThreadRangeButton <> nil then
5786 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5789 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5790 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5794 // browserPos : TPoint;
5798 Wnd := WindowFromPoint(Mouse.CursorPos);
5800 if WheelDelta > 0 then
5805 if (Wnd = BrowserTab.Handle) or
5806 (Wnd = BrowserTab.Parent.Handle) then begin
5807 BrowserTab.ScrollTabs(Delta);
5809 if FIsHandledWheel then begin
5810 FIsHandledWheel := False;
5813 FIsHandledWheel := True;
5814 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5815 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5817 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5825 procedure TGikoForm.SetSelectWord( const text : string );
5827 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5828 ClearThreadRengeAction;
5830 if Length( text ) = 0 then
5832 GikoDM.AllItemAction.Checked := True;
5833 SetListViewType( gvtAll )
5835 SetListViewType( gvtUser, text, false );
5839 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5842 SetSelectWord( SelectComboBox.Text );
5846 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5847 Shift: TShiftState);
5855 if Key = VK_Return then
5858 end else if Key = 229 then begin
5859 if GikoSys.Setting.UseUndecided then begin
5860 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5861 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5862 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5863 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5864 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5865 SetLength(Str, Len);
5866 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5867 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5868 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5870 Str := SelectComboBox.Text + Str;
5872 if (Length(Str) > 0) then begin
5876 end else if Length( SelectComboBox.Text ) = 0 then
5878 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5879 *
\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
5880 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5883 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5884 ClearThreadRengeAction;
5888 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5889 procedure TGikoForm.ClearThreadRengeAction;
5891 //
\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é
5892 if GikoDM.AllItemAction.Checked then
5893 GikoDM.AllItemAction.Checked := False;
5894 if GikoDM.LogItemAction.Checked then
5895 GikoDM.LogItemAction.Checked := False;
5896 if GikoDM.NewItemAction.Checked then
5897 GikoDM.NewItemaction.Checked := False;
5898 if GikoDM.LiveItemAction.Checked then
5899 GikoDM.LiveItemAction.Checked := False;
5900 if GikoDM.ArchiveItemAction.Checked then
5901 GikoDM.ArchiveItemAction.Checked := False;
5905 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5910 if Length( SelectComboBox.Text ) = 0 then
5912 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5913 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5918 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5919 procedure TGikoForm.ModifySelectList;
5926 if not SelectComboBoxPanel.Visible then
5929 if Length( SelectComboBox.Text ) > 0 then
5931 oldText := SelectComboBox.Text;
5932 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5934 GikoSys.Setting.SelectTextList.Delete( idx );
5935 idx := SelectComboBox.Items.IndexOf( oldText );
5937 SelectComboBox.Items.Delete( idx );
5938 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5939 SelectComboBox.Items.Insert( 0, oldText );
5940 SelectComboBox.Text := oldText;
5948 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5949 Shift: TShiftState; X, Y: Integer);
5954 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5957 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5958 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5959 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5961 If w <= 50 Then Begin
5962 //
\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
5963 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5964 pos.X := pos.X + (50 - w);
5966 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5970 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5971 //If SelectComboBox.Width <> w Then Begin
5972 If SelectComboBoxPanel.Width <> w Then Begin
5973 SelectComboBoxPanel.Width := w;
5974 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5975 GikoSys.Setting.SelectComboBoxWidth := w;
5976 DraggingSelectComboBoxPosition := pos;
5978 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5979 ResetBandInfo( ListCoolBar, ListToolBar );
5985 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5986 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5990 IsDraggingSelectComboBox := True;
5993 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5997 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5998 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6000 IsDraggingSelectComboBox := False;
6004 procedure TGikoForm.StatusBarResize(Sender: TObject);
6006 StatusBar.Panels[1].Width := StatusBar.Width -
6007 StatusBar.Panels[0].Width -
6008 StatusBar.Panels[THREADSIZE_PANEL].Width -
6009 StatusBar.Panels[NGWORDNAME_PANEL].Width;
6011 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
6014 if (Length( SelectComboBox.Text ) = 0) or
6015 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6017 SelectComboBox.Text := '';
6018 SelectComboBox.Color := clWindow;
6023 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6026 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6029 if TObject(SenderNode.Data) is TFavoriteFolder then
6030 SourceNode.MoveTo(SenderNode, naAddChild)
6032 SourceNode.MoveTo(SenderNode, naInsert);
6036 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6040 FavoBoardItem: TFavoriteBoardItem;
6041 FavoThreadItem: TFavoriteThreadItem;
6043 ThreadItem: TThreadItem;
6046 if (SenderNode = nil) or (Source = nil) then
6049 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6050 FavNode := SenderNode.Parent
6052 FavNode := SenderNode;
6056 if Source is TBoard then begin
6057 Board := TBoard( Source );
6058 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6059 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6060 Node.ImageIndex := 15;
6061 Node.SelectedIndex := 15;
6062 end else if Source is TFavoriteBoardItem then begin
6063 FavoBoardItem := TFavoriteBoardItem( Source );
6064 Board := FavoBoardItem.Item;
6065 if Board <> nil then
6066 if not Board.IsThreadDatRead then
6067 GikoSys.ReadSubjectFile(Board);
6068 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6069 Node.ImageIndex := 15;
6070 Node.SelectedIndex := 15;
6071 end else if Source is TThreadItem then begin
6072 ThreadItem := TThreadItem( Source );
6073 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6074 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6075 Node.ImageIndex := 16;
6076 Node.SelectedIndex := 16;
6077 end else if Source is TBrowserRecord then begin
6078 ThreadItem := TBrowserRecord( Source ).Thread;
6079 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6080 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6081 Node.ImageIndex := 16;
6082 Node.SelectedIndex := 16;
6083 end else if Source is TFavoriteThreadItem then begin
6084 FavoThreadItem := TFavoriteThreadItem( Source );
6085 ThreadItem := FavoThreadItem.Item;
6086 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6087 Node.ImageIndex := 16;
6088 Node.SelectedIndex := 16;
6091 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6093 FavoriteMoveTo( SenderNode, Node );
6097 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6100 SourceNode: TTreeNode;
6101 LinkToolButton: TLinkToolButton;
6104 if SenderNode = nil then
6107 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6108 if FDropSpaceNode <> nil then
6109 SenderNode := FDropSpaceNode;
6111 if Source = FavoriteTreeView then begin
6112 SourceNode := FavoriteTreeView.Selected;
6113 FavoriteMoveTo( SenderNode, SourceNode );
6114 end else if Source is TLinkToolButton then begin
6115 LinkToolButton := TLinkToolButton( Source );
6116 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6117 FavoriteMoveTo( SenderNode, SourceNode );
6118 end else if Source = BrowserTab then begin
6119 idx := BrowserTab.TabIndex;
6120 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6121 end else if Source = ListView then begin
6122 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6123 end else if Source = TreeView then begin
6124 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6128 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6131 SenderNode: TTreeNode;
6134 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6135 if SenderNode <> nil then begin
6136 FavoriteDragDrop( SenderNode, Source );
6139 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6140 if FDropSpaceNode <> nil then begin
6142 FDropSpaceNode.Delete;
6144 FDropSpaceNode := nil;
6147 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6148 FavoriteDM.Modified := true;
6154 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6155 Node: TTreeNode; var S: String);
6157 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6158 FavoriteDM.Modified := true;
6160 FavoriteTreeView.ReadOnly := True;
6165 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6166 Shift: TShiftState);
6168 if not TTreeView(Sender).IsEditing then begin
6172 FClickNode := FavoriteTreeView.Selected;
6173 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6177 FClickNode := FavoriteTreeView.Selected;
6178 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6182 FavoriteClick( FavoriteTreeView.Selected );
6183 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6187 FClickNode := FavoriteTreeView.Selected;
6188 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6192 //
\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·
6193 if Key = VK_ESCAPE then begin
6194 if (TTreeView(Sender).Selected <> nil) then begin
6195 TTreeView(Sender).Selected.Text := FOrigenCaption;
6197 TTreeView(Sender).Selected.Focused := False;
6203 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6206 LinkToolButton: TLinkToolButton;
6209 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6211 FClickNode := FavoriteTreeView.Selected;
6213 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6215 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6216 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6217 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6218 FClickNode := FavoriteTreeView.Items[i];
6222 for i := 0 to FClickNode.Count - 1 do begin
6223 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6224 FClickNode := FClickNode.Item[i];
6231 if FClickNode = nil then begin
6232 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6233 FavoriteTreeDeletePopupMenu.Visible := False;
6234 FavoriteTreeRenamePopupMenu.Visible := False;
6235 FavoriteTreeNewFolderPopupMenu.Visible := False;
6236 FavoriteTreeURLCopyPopupMenu.Visible := False;
6237 FavoriteTreeNameCopyPopupMenu.Visible := False;
6238 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6239 FavoriteTreeReloadPopupMenu.Visible := False;
6240 FavoriteTreeLogDeletePopupMenu.Visible := False;
6241 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6242 end else if FClickNode.IsFirstNode then begin
6243 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6244 FavoriteTreeDeletePopupMenu.Visible := False;
6245 FavoriteTreeRenamePopupMenu.Visible := False;
6246 FavoriteTreeNewFolderPopupMenu.Visible := True;
6247 FavoriteTreeURLCopyPopupMenu.Visible := False;
6248 FavoriteTreeNameCopyPopupMenu.Visible := False;
6249 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6250 FavoriteTreeReloadPopupMenu.Visible := False;
6251 FavoriteTreeLogDeletePopupMenu.Visible := False;
6252 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6253 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6254 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6255 FavoriteTreeDeletePopupMenu.Visible := True;
6256 FavoriteTreeRenamePopupMenu.Visible := False;
6257 FavoriteTreeNewFolderPopupMenu.Visible := True;
6258 FavoriteTreeURLCopyPopupMenu.Visible := False;
6259 FavoriteTreeNameCopyPopupMenu.Visible := False;
6260 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6261 FavoriteTreeReloadPopupMenu.Visible := False;
6262 FavoriteTreeLogDeletePopupMenu.Visible := False;
6263 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6264 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6265 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6266 FavoriteTreeDeletePopupMenu.Visible := True;
6267 FavoriteTreeRenamePopupMenu.Visible := True;
6268 FavoriteTreeNewFolderPopupMenu.Visible := True;
6269 FavoriteTreeURLCopyPopupMenu.Visible := False;
6270 FavoriteTreeNameCopyPopupMenu.Visible := True;
6271 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6272 FavoriteTreeReloadPopupMenu.Visible := False;
6273 FavoriteTreeLogDeletePopupMenu.Visible := False;
6274 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6275 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6276 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6277 FavoriteTreeDeletePopupMenu.Visible := True;
6278 FavoriteTreeRenamePopupMenu.Visible := True;
6279 FavoriteTreeNewFolderPopupMenu.Visible := True;
6280 FavoriteTreeURLCopyPopupMenu.Visible := True;
6281 FavoriteTreeNameCopyPopupMenu.Visible := True;
6282 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6283 FavoriteTreeReloadPopupMenu.Visible := True;
6284 FavoriteTreeLogDeletePopupMenu.Visible := True;
6285 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6286 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6287 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6288 FavoriteTreeDeletePopupMenu.Visible := True;
6289 FavoriteTreeRenamePopupMenu.Visible := True;
6290 FavoriteTreeNewFolderPopupMenu.Visible := True;
6291 FavoriteTreeURLCopyPopupMenu.Visible := True;
6292 FavoriteTreeNameCopyPopupMenu.Visible := True;
6293 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6294 FavoriteTreeReloadPopupMenu.Visible := True;
6295 FavoriteTreeLogDeletePopupMenu.Visible := False;
6296 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6298 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6299 FavoriteTreeDeletePopupMenu.Visible := False;
6300 FavoriteTreeRenamePopupMenu.Visible := False;
6301 FavoriteTreeNewFolderPopupMenu.Visible := False;
6302 FavoriteTreeURLCopyPopupMenu.Visible := False;
6303 FavoriteTreeNameCopyPopupMenu.Visible := False;
6304 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6305 FavoriteTreeReloadPopupMenu.Visible := False;
6306 FavoriteTreeLogDeletePopupMenu.Visible := False;
6307 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6312 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6317 if not (TObject(node.Data) is TFavoriteFolder) then
6320 for i := 0 to node.Count - 1 do
6322 if TObject(node.Item[i].Data) is TFavoriteFolder then
6323 FavoriteBrowseFolder( node.Item[i] )
6324 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6325 FavoriteClick( node.Item[i], False );
6329 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6335 for i := 0 to Node.Count - 1 do begin
6336 if Node.Item[i].Data = FindPointer then begin
6337 Result := Node.Item[i];
6339 end else if Node.Item[i].Count > 0 then begin
6340 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6341 if Found <> nil then begin
6352 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6356 SenderNode: TTreeNode;
6360 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6361 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6362 SenderNode := FavoriteTreeView.Items[i];
6366 SenderNode.Selected := False;
6368 FavoriteDragDrop( SenderNode, Source );
6373 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6374 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6376 if FDragWFirst <> true then begin
6377 FDragWFirst := false;
6379 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6380 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6384 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6385 if GikoSys.Setting.ListWidthState = glsMin then begin
6386 GikoDM.BrowserMaxAndFocusAction.Execute;
6389 if GikoSys.Setting.ListHeightState = glsMin then begin
6390 GikoDM.BrowserMaxAndFocusAction.Execute;
6396 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6397 Y: Integer; State: TDragState; var Accept: Boolean);
6400 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6404 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6408 if FDropSpaceNode <> nil then begin
6410 FDropSpaceNode.Delete;
6412 FDropSpaceNode := nil;
6414 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6415 FavoriteDM.Modified := true;
6421 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6422 MousePos: TPoint; var Handled: Boolean);
6425 FToolBarSettingSender := tssList;
6426 MousePos := ListCoolBar.ClientToScreen( MousePos );
6427 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6431 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6432 MousePos: TPoint; var Handled: Boolean);
6435 FToolBarSettingSender := tssMain;
6436 MousePos := MainCoolBar.ClientToScreen( MousePos );
6437 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6441 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6442 MousePos: TPoint; var Handled: Boolean);
6445 FToolBarSettingSender := tssBrowser;
6446 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6447 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6450 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6452 if FListViewBackGroundColor <> value then begin
6453 FListViewBackGroundColor := value;
6454 ListView.Color := FListViewBackGroundColor;
6457 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6459 threadItem : TThreadItem;
6463 if FClickNode = nil then Exit;
6465 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6467 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6468 if threadItem = nil then
6470 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6472 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6474 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6475 if boardItem = nil then
6477 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6483 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6484 MousePos: TPoint; var Handled: Boolean);
6488 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6489 if BrowserTab.TabIndex <> idx then begin
6490 BrowserTab.TabIndex := idx;
6491 BrowserTab.OnChange(nil);
6495 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6497 ThreadItem: TThreadItem;
6503 boardPlugIn : TBoardPlugIn;
6505 if Number = 0 then Exit;
6506 ThreadItem := GetActiveContent;
6508 if ThreadItem <> nil then begin
6509 //if ThreadItem.IsBoardPlugInAvailable then begin
6510 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6511 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6512 //boardPlugIn := ThreadItem.BoardPlugIn;
6513 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6515 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6516 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6517 //
\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
6518 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6520 FileName := ThreadItem.FilePath;
6521 tmp := GikoSys.ReadThreadFile(FileName, Number);
6523 if tmp <> '' then begin
6524 THTMLCreate.DivideStrLine(tmp, @Res);
6526 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6527 if ReplaceTag then begin
6528 Header := CustomStringReplace(Header, '</b>', '',true);
6529 Header := CustomStringReplace(Header, '<b>', '',true);
6530 Header := CustomStringReplace(Header, '<br>', '',true);
6531 Header := DeleteFontTag(Header);
6533 //if ThreadItem.IsBoardPlugInAvailable then begin
6534 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6535 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6536 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6538 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6539 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6540 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6541 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6544 Body := CustomStringReplace(Body, '</a>', '',true);
6546 Body := HTMLCreater.DeleteLink(Body);
6547 if ReplaceTag then begin
6548 Body := CustomStringReplace(Body, '<', '<');
6549 Body := CustomStringReplace(Body, '>', '>');
6550 Body := CustomStringReplace(Body, '"', '"');
6551 Body := CustomStringReplace(Body, '&', '&');
6552 //Body := CustomStringReplace(Body, ' ', ' ');
6555 Header := Header + Body;
6557 Clipboard.SetTextBuf( PChar(Header) );
6563 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6565 AddRoundNameMenu(dummy1);
6568 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6570 FavoriteDM.URLReplace(oldURLs, newURLs);
6573 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6575 RoundList.URLReplace(oldURLs, newURLs);
6578 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6580 Filename = 'tab.sav';
6581 bFilename = '~tab.sav';
6587 oldBoardName: string;
6589 newBoardName: string;
6590 TabList: TStringList;
6593 if oldURLs.Count <> newURLs.Count then begin
6596 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6597 TabList := TStringList.Create;
6599 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6601 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6602 //
\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
6603 for i := 0 to oldURLs.Count - 1 do begin
6604 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6605 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6606 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6607 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6608 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6609 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6611 for j := 0 to TabList.Count - 1 do begin
6612 tempString := TabList[j];
6613 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6614 tempString := StringReplace(tempString, oldHost, newHost,[]);
6615 TabList[j] := tempString;
6619 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6621 if FileExists( GikoSys.GetAppDir + Filename) then begin
6622 if FileExists( GikoSys.GetAppDir + bFilename) then
6623 DeleteFile(GikoSys.GetAppDir + bFilename);
6625 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6626 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6629 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6637 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6638 procedure TGikoForm.OnMinimize;
6640 if FActiveContent <> nil then begin
6641 FIsMinimize := mtMinimizing;
6642 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6646 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6647 procedure TGikoForm.OnMinimized;
6649 FIsMinimize := mtMinimized;
6653 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6655 CoolBarResized( Sender, BrowserCoolBar );
6658 // *************************************************************************
6659 // ExternalBoardPlugInMain
6660 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6661 // *************************************************************************
6662 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6665 boardPlugIn : TBoardPlugIn;
6668 if not (Sender is TMenuItem) then
6671 item := TMenuItem( Sender );
6672 if not Assigned( Pointer( item.Tag ) ) then
6675 //
\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·
6676 boardPlugIn := TBoardPlugIn( item.Tag );
6677 boardPlugIn.PlugInMenu( item.Handle );
6680 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6681 procedure TGikoForm.TreeClick( Node : TTreeNode );
6687 if FTreeType = gttHistory then begin
6689 if TObject( Node.Data ) is TFavoriteThreadItem then
6690 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6691 FavoriteClick( Node );
6694 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6695 if ActiveList = Node.Data then
6698 ActiveListColumnSave;
6700 if TObject(Node.Data) is TBBS then begin
6701 SetActiveList(Node.data);
6702 end else if TObject(Node.Data) is TCategory then begin
6703 SetActiveList(Node.data);
6704 end else if TObject(Node.Data) is TBoard then begin
6705 if not TBoard(Node.Data).IsThreadDatRead then begin
6706 Screen.Cursor := crHourGlass;
6708 if not TBoard(Node.Data).IsThreadDatRead then
6709 GikoSys.ReadSubjectFile(Node.Data);
6711 Screen.Cursor := crDefault;
6714 Sort.SetSortDate(Now());
6715 SetActiveList(Node.data);
6718 if TObject( Node.Data ) is TBoard then begin // not TCategory
6719 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6720 if GikoSys.Setting.ListWidthState = glsMax then begin
6721 GikoDM.BrowserMinAction.Execute;
6722 if GikoForm.Visible then
6726 if GikoSys.Setting.ListHeightState = glsMax then begin
6727 GikoDM.BrowserMinAction.Execute;
6728 if GikoForm.Visible then
6736 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6737 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6740 ThreadItem : TThreadItem;
6741 shiftDown : Boolean;
6744 if Node = nil then Exit;
6746 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6748 if FTreeType = gtt2ch then begin
6749 if not (TObject(Node.Data) is TBoard) then Exit;
6750 Board := TBoard(Node.Data);
6751 DownloadList(Board, shiftDown);
6752 end else if FTreeType = gttHistory then begin
6753 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6754 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6755 DownloadContent(ThreadItem, shiftDown);
6759 // *************************************************************************
6760 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6761 // *************************************************************************
6762 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6763 Shift: TShiftState);
6765 if Key = VK_BACK then begin
6766 // UpFolderButtonClick(Sender);
6767 end else if Key = VK_SPACE then begin
6768 TreeDoubleClick( TreeView.Selected );
6769 end else if Key = VK_RETURN then begin
6770 TreeClick( TreeView.Selected );
6771 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6774 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6775 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6776 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6778 favItem : TTreeNode;
6779 favThreadItem : TFavoriteThreadItem;
6785 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6786 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6787 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6788 rect := FavoriteTreeView.Selected.DisplayRect(true);
6789 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6790 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6791 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6792 if ssDouble in Shift then begin
6793 FClickNode := FavoriteTreeView.Selected;
6794 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6798 TObject(FavoriteTreeView.Selected));
6805 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6806 if favItem = nil then Exit;
6808 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6809 favThreadItem := TFavoriteThreadItem( favItem.Data );
6810 if favThreadItem.Item <> nil then
6811 InsertBrowserTab( favThreadItem.Item, False );
6818 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6821 if FIsIgnoreResize <> rtNone then
6824 if GikoSys.Setting.ListOrientation = gloVertical then begin
6825 if GikoSys.Setting.ListHeightState = glsMin then begin
6826 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6827 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6833 procedure TGikoForm.OnResized;
6838 FOldFormWidth := Width;
6839 FIsIgnoreResize := rtNone;
6844 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6845 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6850 //
\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)
6851 if FActiveContent <> nil then begin
6852 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6853 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6855 FIsMinimize := mtNone;
6860 // *************************************************************************
6861 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6862 // *************************************************************************
6863 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6868 stlist : TStringList;
6869 i, count, rc : Integer;
6875 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6876 FActiveContent.Browser.SetFocus;
6879 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6880 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6881 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6882 if (Assigned(e)) then begin
6883 if (e.className = 'date') or (e.id = 'date') then begin
6885 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6886 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6887 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6888 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6891 stlist := TStringList.Create;
6893 stList.DelimitedText := AID;
6895 for i := 0 to stList.Count - 1 do
6896 if Length(WideString(stList[i])) = 8 then begin
6897 if GikoSys.NotDateorTimeString(stList[i]) then begin
6906 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6908 if count > 20 then begin
6909 rc := GikoUtil.MsgBox(Handle,
6910 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6911 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6912 MB_YESNO or MB_ICONQUESTION);
6913 limited := rc <> ID_YES;
6915 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6916 FActiveContent.IDAnchorPopup(body);
6925 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6926 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6928 SelectTimer.Interval := 0;
6929 if not (ListView.Selected = nil) then
6930 if( FActiveContent = nil) or
6931 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6936 function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
6938 rec : TBrowserRecord;
6941 bound := BrowserTab.Tabs.Count -1;
6942 if bound = -1 then begin
6944 Exit; //for
\82É
\94ò
\82Î
\82È
\82¢
\82Å
\91\80\8dì
\82ð
\94²
\82¯
\82é
6947 for i := 0 to bound do begin
6949 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6950 if( rec <> nil) and (rec.Thread <> nil) then
6951 AStringList.Add( rec.Thread.URL );
6958 function TGikoForm.SaveTabURLs : Boolean;
6960 Filename = 'tab.sav';
6961 bFilename = '~tab.sav';
6963 SaveStringList: TStringList;
6967 SaveStringList := TStringList.Create;
6969 if GetTabURLs(SaveStringList) then begin
6971 if FileExists( GikoSys.GetAppDir + Filename) then begin
6972 if FileExists( GikoSys.GetAppDir + bFilename) then
6973 DeleteFile(GikoSys.GetAppDir + bFilename);
6975 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6976 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6980 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
6984 SaveStringList.Free;
6988 function TGikoForm.LoadTabURLs : Boolean;
6990 TABFILE = 'tab.sav';
6995 GikoTab : TGikoTabAppend;
6999 fileName := ExtractFilePath(Application.ExeName) + TABFILE;
7000 URLs := TStringList.Create();
7001 GikoTab := GikoSys.Setting.BrowserTabAppend;
7005 if FileExists(fileName) then begin
7006 URLs.LoadFromFile(fileName);
7007 bound := URLs.Count - 1;
7008 if bound > -1 then begin
7009 GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
7010 for i := 0 to bound do begin
7011 item := BBSsFindThreadFromURL( URLs[ i ] );
7013 InsertBrowserTab( item, false );
7015 //
\8dÅ
\8f\89\82Ì
\82P
\96\87\82É
\90Ý
\92è
\83A
\83h
\83\8c\83X
\82Ì
\90Ý
\92è
\82Ì
\82½
\82ß
\82Ì
\83J
\83\89\8cÄ
\82Ñ
7016 if BrowserTab.Tabs.Count > 0 then begin
7017 BrowserTab.OnChange(nil);
7024 on EFOpenError do begin
7025 ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
7029 GikoSys.Setting.BrowserTabAppend := GikoTab;
7036 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7037 procedure TGikoForm.ActiveListColumnSave;
7039 ActivListObj : TObject;
7040 i, id, idx : Integer;
7041 BBSOrder : TGikoBBSColumnList;
7042 CategoryOrder : TGikoCategoryColumnList;
7043 BoardOrder : TGikoBoardColumnList;
7046 ActivListObj := ActiveList;
7047 if ActivListObj is TBBS then begin
7048 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7049 BBSOrder := TGikoBBSColumnList.Create;
7051 for i := 0 to ListView.Columns.Count - 1 do begin
7052 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7053 idx := ListView.Column[ i ].Tag;
7054 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7055 BBSOrder.Add( TGikoBBSColumnID( id ) );
7056 //
\95\9d\82Ì
\95Û
\91¶
7057 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7059 for i := 0 to ListView.Columns.Count - 1 do
7060 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7061 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7065 end else if ActivListObj is TCategory then begin
7066 //=====
\94Â
\83\8a\83X
\83g =====
7067 CategoryOrder := TGikoCategoryColumnList.Create;
7069 for i := 0 to ListView.Columns.Count - 1 do begin
7070 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7071 idx := ListView.Column[ i ].Tag;
7072 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7073 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7074 //
\95\9d\82Ì
\95Û
\91¶
7075 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7077 for i := 0 to ListView.Columns.Count - 1 do
7078 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7079 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7083 end else if ActivListObj is TBoard then begin
7084 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7085 BoardOrder := TGikoBoardColumnList.Create;
7087 for i := 0 to ListView.Columns.Count - 1 do begin
7088 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7089 idx := ListView.Column[ i ].Tag;
7090 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7091 BoardOrder.Add( TGikoBoardColumnID( id ) );
7092 //
\95\9d\82Ì
\95Û
\91¶
7093 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7095 for i := 0 to ListView.Columns.Count - 1 do
7096 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7097 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7105 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7106 Column: TListColumn; Point: TPoint);
7112 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7113 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7114 ListColumnPopupMenu.Items.Items[ i ].Free;
7116 //
\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¢)
7117 if TObject( FActiveList ) is TBBS then begin
7119 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7120 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7121 item := TMenuItem.Create( ListColumnPopupMenu );
7122 item.Caption := GikoBBSColumnCaption[ i ];
7124 item.OnClick := ListColumnPopupMenuOnClick;
7125 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7126 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7127 item.Checked := True;
7131 ListColumnPopupMenu.Items.Add( item );
7134 end else if TObject( FActiveList ) is TCategory then begin
7136 //=====
\94Â
\83\8a\83X
\83g =====
7137 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7138 item := TMenuItem.Create( ListColumnPopupMenu );
7139 item.Caption := GikoCategoryColumnCaption[ i ];
7141 item.OnClick := ListColumnPopupMenuOnClick;
7142 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7143 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7144 item.Checked := True;
7148 ListColumnPopupMenu.Items.Add( item );
7151 end else if TObject( FActiveList ) is TBoard then begin
7153 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7154 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7155 item := TMenuItem.Create( ListColumnPopupMenu );
7156 item.Caption := GikoBoardColumnCaption[ i ];
7158 item.OnClick := ListColumnPopupMenuOnClick;
7159 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7160 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7161 item.Checked := True;
7165 ListColumnPopupMenu.Items.Add( item );
7170 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7171 Point := ListView.ClientToScreen( Point );
7172 if ListColumnPopupMenu.Items.Count > 0 then
7173 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7177 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7178 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7185 if not (Sender is TMenuItem) then
7188 ActiveListColumnSave;
7189 item := TMenuItem( Sender );
7191 if TObject( FActiveList ) is TBBS then
7192 orderList := GikoSys.Setting.BBSColumnOrder
7193 else if TObject( FActiveList ) is TCategory then
7194 orderList := GikoSys.Setting.CategoryColumnOrder
7195 else if TObject( FActiveList ) is TBoard then
7196 orderList := GikoSys.Setting.BoardColumnOrder
7200 if item.Checked then begin
7201 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7202 for i := orderList.Count - 1 downto 0 do begin
7203 if Integer( orderList[ i ] ) = item.Tag then begin
7204 orderList.Delete( i );
7209 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7210 orderList.Add( Pointer( item.Tag ) );
7213 SetActiveList( FActiveList );
7217 procedure TGikoForm.OnGestureStart(Sender: TObject);
7222 procedure TGikoForm.OnGestureMove(Sender: TObject);
7229 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7231 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7232 s := MouseGesture.GetGestureStr;
7234 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7235 if Action <> nil then
7236 ActStr := '
\81i' + Action.Caption + '
\81j';
7237 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7238 StatusBar.Panels[1].Text := s;
7241 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7246 s := MouseGesture.GetGestureStr;
7247 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7248 if Action <> nil then
7250 StatusBar.Panels[1].Text := '';
7253 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7254 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7256 ThreadItem: TThreadItem;
7258 DefaultDraw := true;
7259 if TObject(Item.Data) is TThreadItem then begin
7260 ThreadItem := TThreadItem(Item.Data);
7261 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7262 ListView.Canvas.Brush.Color := FOddColor;
7263 //
\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
7264 if (GikoSys.Setting.UnFocusedBold) and
7265 (Item.Selected) and (not ListView.Focused) then begin
7266 ListView.Canvas.Font.Style := [fsBold];
7269 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7272 if ThreadItem.UnRead then
7273 ListView.Canvas.Font.Style := [fsBold];
7278 procedure TGikoForm.FormActivate(Sender: TObject);
7280 if GikoSys.Setting.GestureEnabled then begin
7281 GikoSys.Setting.Gestures.ClearGesture;
7282 GikoSys.Setting.Gestures.LoadGesture(
7283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7284 MouseGesture.UnHook;
7285 MouseGesture.OnGestureStart := OnGestureStart;
7286 MouseGesture.OnGestureMove := OnGestureMove;
7287 MouseGesture.OnGestureEnd := OnGestureEnd;
7288 MouseGesture.SetHook(Handle);
7290 //MouseGesture.UnHook;
7291 MouseGesture.OnGestureStart := nil;
7292 MouseGesture.OnGestureMove := nil;
7293 MouseGesture.OnGestureEnd := nil;
7297 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7299 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7300 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7304 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7309 affectedBand : TCoolBand;
7312 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7313 FIsIgnoreResize := rtResizing;
7314 PostMessage( Handle, USER_RESIZED, 0, 0 );
7316 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7317 if CoolBar = MainCoolBar then begin
7318 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7319 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7320 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7321 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7322 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7324 end else if CoolBar = ListCoolBar then begin
7325 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7326 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7327 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7328 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7329 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7331 end else if CoolBar = BrowserCoolBar then begin
7332 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7333 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7334 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7335 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7336 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7339 if not (Sender is TToolBar) or (CoolBar = nil) then
7341 toolbar := TToolBar( Sender );
7342 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7343 affectedBand := nil;
7344 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7345 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7346 band := CoolBar.Bands[ i ];
7347 if band.Break or (i = 0) then begin
7348 if i + 1 < CoolBar.Bands.Count then
7349 if not CoolBar.Bands[ i + 1 ].Break then
7350 affectedBand := CoolBar.Bands[ i + 1 ];
7353 affectedBand := CoolBar.Bands[ i - 1 ];
7358 //
\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·
7359 if CoolBar = MainCoolBar then begin
7360 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7361 coolSet.FCoolWidth := toolbar.Width + 25;
7362 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7363 if affectedBand <> nil then begin
7364 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7365 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7366 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7368 end else if CoolBar = ListCoolBar then begin
7369 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7370 coolSet.FCoolWidth := toolbar.Width + 25;
7371 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7372 if affectedBand <> nil then begin
7373 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7374 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7375 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7377 end else if CoolBar = BrowserCoolBar then begin
7378 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7379 coolSet.FCoolWidth := toolbar.Width + 25;
7380 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7381 if affectedBand <> nil then begin
7382 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7383 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7384 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7391 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7393 CoolBarResized( Sender, MainCoolBar );
7396 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7398 CoolBarResized( Sender, ListCoolBar );
7401 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7403 CoolBarResized( Sender, BrowserCoolBar );
7406 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7407 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7409 ThreadItem : TThreadItem;
7410 ReadList : TStringList;
7411 wordCount : TWordCount;
7413 ThreadItem := GetActiveContent;
7414 ReadList := TStringList.Create;
7415 wordCount := TWordCount.Create;
7417 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7418 {$IFDEF SPAM_FILTER_ENABLED}
7419 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7420 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7421 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7422 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7423 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7425 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7426 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7431 FActiveContent.Repaint := true;
7432 if ThreadItem <> nil then
7433 InsertBrowserTab( ThreadItem, True );
7436 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7437 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7439 ThreadItem : TThreadItem;
7442 ReadList : TStringList;
7443 wordCount : TWordCount;
7445 No := KokoPopupMenu.Tag;
7446 if No = 0 then Exit;
7447 ThreadItem := GetActiveContent;
7448 if ThreadItem = nil then Exit;
7449 body := TStringList.Create;
7451 GikoSys.GetSameIDRes(No, ThreadItem, body);
7453 ReadList := TStringList.Create;
7454 wordCount := TWordCount.Create;
7456 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7457 {$IFDEF SPAM_FILTER_ENABLED}
7458 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7459 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7461 for i := 0 to body.Count - 1 do begin
7462 {$IFDEF SPAM_FILTER_ENABLED}
7463 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7464 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7465 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7467 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7468 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7474 FActiveContent.Repaint := true;
7475 if ThreadItem <> nil then
7476 InsertBrowserTab( ThreadItem, True );
7483 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7485 firstElement: IHTMLElement;
7486 document: IHTMLDocument2;
7488 document := FActiveContent.Browser.Document as IHTMLDocument2;
7489 if Assigned(document) then
7490 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7491 if Assigned(firstElement) then
7492 if firstElement.style.visibility <> 'hidden' then
7493 firstElement.style.visibility := 'hidden';
7497 procedure TGikoForm.RepaintAllTabsBrowser();
7500 ThreadItem: TThreadItem;
7502 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7503 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7505 ThreadItem := GetActiveContent;
7506 if ThreadItem <> nil then
7507 InsertBrowserTab( ThreadItem, True );
7511 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7512 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7513 Shift: TShiftState);
7515 //
\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Ì
7516 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7517 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7518 SelectTimer.Interval := 0;
7519 if not (GikoSys.Setting.BrowserTabVisible) then begin
7520 if (GetActiveList is TBoard) then begin
7521 //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
7522 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7523 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7524 (Key = VK_UP) or (Key = VK_DOWN)) then
7525 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7529 // *************************************************************************
7530 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7531 // *************************************************************************
7532 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7533 Node: TTreeNode; var AllowEdit: Boolean);
7535 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7536 FOrigenCaption := Node.Text;
7538 // *************************************************************************
7539 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7540 // *************************************************************************
7541 function TGikoForm.GetMainForm(): TComponent;
7543 Result := Application.MainForm;
7545 // *************************************************************************
7546 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7547 // *************************************************************************
7548 function TGikoForm.GetScreenCursor(): TCursor;
7550 Result := Screen.Cursor;
7552 // *************************************************************************
7553 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7554 // *************************************************************************
7555 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7557 if (Screen.Cursor <> Cursor) then
7558 Screen.Cursor := Cursor;
7560 // *************************************************************************
7561 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
7562 // *************************************************************************
7563 function TGikoForm.EditorFormExists(): boolean;
7568 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\92T
\82·
7569 for i := 0 to Screen.CustomFormCount - 1 do begin
7570 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
7576 // *************************************************************************
7577 //!
\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é
7578 // *************************************************************************
7579 procedure TGikoForm.AllEditroFormNameTextClearClear();
7583 for i := 0 to Screen.CustomFormCount - 1 do begin
7584 if TObject(Screen.CustomForms[i]) is TEditorForm then
7585 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7588 // *************************************************************************
7589 //!
\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é
7590 // *************************************************************************
7591 procedure TGikoForm.AllEditroFormMailTextClearClear();
7595 for i := 0 to Screen.CustomFormCount - 1 do begin
7596 if TObject(Screen.CustomForms[i]) is TEditorForm then
7597 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7600 // *************************************************************************
7601 //!
\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
7602 // *************************************************************************
7603 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7605 //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Ì
7606 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7607 if GikoDM.CabinetVisibleAction.Enabled then begin
7608 GikoDM.CabinetVisibleAction.Execute;
7611 // *************************************************************************
7612 //!
\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
7613 // *************************************************************************
7614 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7616 if GikoDM.FavoriteArrangeAction.Enabled then begin
7617 GikoDM.FavoriteArrangeAction.Execute;
7620 // *************************************************************************
7621 //!
\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
7622 // *************************************************************************
7623 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7624 var Handled: Boolean);
7628 //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ß
7629 if Self.Active then begin
7631 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7632 WM_KEYFIRST..WM_KEYLAST :
7634 //
\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ç
7635 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7636 wmMsg.Msg := Msg.message;
7637 wmMsg.CharCode := Word(Msg.wParam);
7638 wmMsg.KeyData := Msg.lParam;
7639 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7640 Self.OnShortCut(wmMsg, Handled);
7646 // *************************************************************************
7647 //!
\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
7648 // *************************************************************************
7649 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7651 Application.ProcessMessages;
7652 if not Application.Terminated then begin
7653 if PreviewTimer.Enabled then
7654 PreviewTimer.Enabled := False;
7655 //
\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
7656 if FHint <> nil then begin
7657 FHint.ReleaseHandle;
7660 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7661 if FPreviewBrowser <> nil then
7662 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7666 // *************************************************************************
7667 //!
\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
7668 // *************************************************************************
7669 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7674 if (Sender <> nil) then begin
7675 s := ' [' + Sender.ClassName + ']' + #13#10;
7677 s := ' [ Sender is nil ] ' + #13#10;
7680 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7682 // *************************************************************************
7683 //!
\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¬
7684 // *************************************************************************
7685 procedure TGikoForm.CreateControlThread();
7687 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7688 FControlThread := TThreadControl.Create(True);
7689 FControlThread.MaxThreadCount := 1;
7690 FControlThread.Resume;
7691 FControlThread.OnDownloadEnd := DownloadEnd;
7692 FControlThread.OnDownloadMsg := DownloadMsg;
7693 FControlThread.OnWork := Work;
7694 FControlThread.OnWorkBegin := WorkBegin;
7695 FControlThread.OnWorkEnd := WorkEnd;
7697 // *************************************************************************
7698 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7699 // *************************************************************************
7700 procedure TGikoForm.CreateBrowsers(count: Integer);
7703 newBrowser: TWebBrowser;
7705 BrowserNullTab := TBrowserRecord.Create;
7706 BrowserNullTab.Browser := Browser;
7707 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7708 FBrowsers := TList.Create;
7709 for i := 0 to count -1 do begin
7710 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7711 newBrowser := FBrowsers[FBrowsers.Count - 1];
7712 TOleControl(newBrowser).Parent := BrowserPanel;
7713 TOleControl(newBrowser).Align := alNone;
7714 TOleControl(newBrowser).Left := 0;
7715 TOleControl(newBrowser).Top := 0;
7716 newBrowser.RegisterAsDropTarget := False;
7717 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7718 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7719 newBrowser.OnEnter := BrowserEnter;
7720 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7721 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7722 newBrowser.Navigate(BLANK_HTML);
7723 ShowWindow(newBrowser.Handle, SW_HIDE);
7725 BrowserNullTab.Browser.BringToFront;
7726 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7727 //
\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Ì
7728 //
\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Å
7729 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7730 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7731 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7732 Application.ProcessMessages;
7735 // *************************************************************************
7736 //!
\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é
7737 // *************************************************************************
7738 procedure TGikoForm.SetSelectComboBox();
7740 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7743 ToolButton: TToolButton;
7745 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7746 SelectComboBoxPanel.Visible := False;
7748 for i := ListToolBar.ControlCount - 1 downto 0 do
7750 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7752 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7753 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7754 SelectComboBoxPanel.Parent := ListToolBar;
7755 SelectComboBoxPanel.Visible := True;
7757 SelectComboBox.Left := 0;
7758 SelectComboBox.Top := 0;
7759 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7760 SelectComboBox.Width := SelectComboBoxPanel.Width -
7761 SelectComboBoxSplitter.Width;
7763 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7764 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7765 if ToolButton = nil then begin
7766 ToolButton := TToolButton.Create(ListToolBar);
7767 ToolButton.Name := DUMMYCOMPNAME;
7769 ToolButton.Style := tbsSeparator;
7770 ToolButton.Width := 0;
7771 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7772 ListToolBar.InsertControl(ToolButton);
7773 ToolButton.Visible := False;
7775 //
\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·
7776 if (i + 1) < ListToolBar.ControlCount then
7777 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7778 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7779 ListToolBar.Controls[ i + 1 ].Visible := False;
7782 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7783 ListToolBar.Controls[ i ].Visible := False;
7791 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7792 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7793 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7800 if (TreeView.Selected <> nil) and
7801 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7802 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7803 rect := TreeView.Selected.DisplayRect(true);
7804 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7805 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7806 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7807 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7808 if ssDouble in Shift then begin
7809 TreeDoubleClick( TreeView.Selected );
7811 TreeClick(TreeView.Selected);
7818 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7819 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7823 if ActionList <> nil then begin
7824 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7826 for i := 0 to ActionList.ActionCount - 1 do begin
7828 FActionListGroupIndexes[i] :=
7829 TCustomAction(ActionList.Actions[i]).GroupIndex;
7830 TCustomAction(ActionList.Actions[i]).GroupIndex
7833 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7839 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7840 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7844 if ActionList <> nil then begin
7845 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7846 for i := 0 to ActionList.ActionCount - 1 do begin
7848 TCustomAction(ActionList.Actions[i]).GroupIndex
7849 := FActionListGroupIndexes[i];
7851 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7857 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7858 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7862 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7863 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7865 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7866 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin