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 procedure FormCreate(Sender: TObject);
412 procedure FormDestroy(Sender: TObject);
413 procedure BrowserStatusTextChange(Sender: TObject;
414 const Text: WideString);
415 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
416 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
417 var AllowChange: Boolean);
418 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
420 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
421 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
422 Button: TToolButton; State: TCustomDrawState;
423 var DefaultDraw: Boolean);
424 procedure BrowserBeforeNavigate2(Sender: TObject;
425 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
426 Headers: OleVariant; var Cancel: WordBool);
427 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
428 const ARect: TRect; var DefaultDraw: Boolean);
429 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
430 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
431 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
432 procedure ListViewCustomDraw(Sender: TCustomListView;
433 const ARect: TRect; var DefaultDraw: Boolean);
434 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
435 Shift: TShiftState; X, Y: Integer);
436 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
437 procedure MessageListViewResize(Sender: TObject);
438 procedure CabinetVisible( isVisible : Boolean );
439 procedure FormResize(Sender: TObject);
440 procedure ListPopupMenuPopup(Sender: TObject);
441 procedure TreePopupMenuPopup(Sender: TObject);
442 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
443 var Cancel: WordBool);
444 procedure ListSplitterMoved(Sender: TObject);
445 procedure BrowserTabChange(Sender: TObject);
446 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
447 Shift: TShiftState; X, Y: Integer);
448 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
449 State: TDragState; var Accept: Boolean);
450 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
451 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
453 procedure BrowserDocumentComplete(Sender: TObject;
454 const pDisp: IDispatch; var URL: OleVariant);
455 procedure RoundNamePopupMenuPopup(Sender: TObject);
456 procedure FormShow(Sender: TObject);
457 procedure BrowserTabToolBarResize(Sender: TObject);
458 procedure FavoriteMenuClick(Sender: TObject);
459 procedure MainCoolBarResize(Sender: TObject);
460 procedure AddressToolBarResize(Sender: TObject);
461 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
463 procedure BrowserEnter(Sender: TObject);
464 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
465 procedure PreviewTimerTimer(Sender: TObject);
466 procedure MessageHideButtonClick(Sender: TObject);
467 procedure HistoryAllClearToolButtonClick(Sender: TObject);
468 procedure MainCoolBarBandInfo(Sender: TObject;
469 var BandInfo: PReBarBandInfoA);
470 procedure MainCoolBarChevronClick(Sender: TObject;
471 RebarChevron: PNMRebarChevron);
472 procedure ListCoolBarBandInfo(Sender: TObject;
473 var BandInfo: PReBarBandInfoA);
474 procedure ListCoolBarChevronClick(Sender: TObject;
475 RebarChevron: PNMRebarChevron);
476 procedure BrowserCoolBarBandInfo(Sender: TObject;
477 var BandInfo: PReBarBandInfoA);
478 procedure BrowserCoolBarChevronClick(Sender: TObject;
479 RebarChevron: PNMRebarChevron);
480 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
481 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
482 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
483 procedure SelectComboBoxChange(Sender: TObject);
484 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
486 procedure SelectComboBoxExit(Sender: TObject);
487 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
488 Shift: TShiftState; X, Y: Integer);
489 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
490 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
491 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
492 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
493 procedure StatusBarResize(Sender: TObject);
494 procedure SelectComboBoxEnter(Sender: TObject);
495 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
497 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
498 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
500 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
502 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
503 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
504 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
505 Shift: TShiftState; X, Y: Integer);
506 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
507 State: TDragState; var Accept: Boolean);
508 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
510 procedure ListCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
511 var Handled: Boolean);
512 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
513 var Handled: Boolean);
514 procedure BrowserCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
515 var Handled: Boolean);
516 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
517 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
518 var Handled: Boolean);
519 procedure BrowserTabPopupMenuPopup(Sender: TObject);
520 procedure BrowserTabResize(Sender: TObject);
521 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
523 procedure FavoriteTreeViewMouseDown(Sender: TObject;
524 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
525 procedure MessagePanelResize(Sender: TObject);
527 procedure SelectTimerTimer(Sender: TObject);
528 procedure ListViewColumnRightClick(Sender: TObject;
529 Column: TListColumn; Point: TPoint);
530 procedure ListViewCustomDrawItem(Sender: TCustomListView;
531 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
532 procedure FormActivate(Sender: TObject);
533 procedure BrowserPanelResize(Sender: TObject);
534 procedure MenuToolBarResize(Sender: TObject);
535 procedure ListToolBarResize(Sender: TObject);
536 procedure BrowserToolBarResize(Sender: TObject);
537 procedure KokoPopupMenuPopup(Sender: TObject);
538 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
540 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
541 var AllowEdit: Boolean);
542 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
543 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
544 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
545 var Handled: Boolean);
546 procedure GikoApplicationEventsDeactivate(Sender: TObject);
547 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
548 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
549 Shift: TShiftState; X, Y: Integer);
550 procedure GetResURLMenuClick(Sender: TObject);
553 FEnabledCloseButton: Boolean;
554 FClickNode: TTreeNode;
557 FPreviewBrowser: TWebBrowser;
559 FBrowserSizeHeight: Integer;
560 FBrowserSizeWidth: Integer;
561 FTabHintIndex: Integer;
562 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
563 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
564 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
565 FActiveList: TObject;
566 FActiveContent: TBrowserRecord; //
568 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
569 FTreeType: TGikoTreeType;
573 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
574 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
575 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
576 IsDraggingSelectComboBox : Boolean;
577 DraggingSelectComboBoxPosition : TPoint;
578 FSearchDialog: TSearchDialog;
579 FDropSpaceNode: TTreeNode;
580 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
581 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
582 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
583 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
584 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¦
585 FOddColor : TColor; ///<
\82»
\82Ì
\90F
586 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
587 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
588 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
589 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
590 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
591 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
593 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
595 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
596 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
597 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ñ
598 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
599 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ñ
600 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
601 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
602 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
603 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
604 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
606 procedure ListDoubleClick(Shift: TShiftState);
607 function Hook(var Message: TMessage): Boolean;
608 procedure AddRoundNameMenu(MenuItem: TMenuItem);
609 procedure SetMenuFont;
610 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
611 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
612 procedure FavoriteClick(Sender: TObject); overload;
613 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
614 function OnDocumentContextMenu(Sender: TObject): WordBool;
615 procedure ShowTextPopup;
616 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
617 procedure MenuBarChevronMenu;
618 procedure LinkBarChevronMenu;
619 procedure ToolBarChevronMenu(ToolBar: TToolBar);
620 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
621 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
622 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
623 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
624 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
625 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
626 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
627 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
628 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
630 procedure SetListViewBackGroundColor(value: TColor);
631 procedure BBSMenuItemOnClick( Sender : TObject );
632 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
633 procedure SaveCoolBarSettings;
634 procedure SaveMainCoolBarSettings;
635 procedure SaveBoardCoolBarSettings;
636 procedure SaveBrowserCoolBarSettings;
637 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
638 procedure LoadCoolBarSettings;
639 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
640 procedure OnMinimize;
641 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
642 procedure OnMinimized;
643 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
644 procedure TreeClick( Node : TTreeNode );
645 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
646 procedure TreeDoubleClick( Node : TTreeNode );
647 ///
\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
648 procedure SetBBSMenu;
650 function GetTabURLs(AStringList: TStringList) : Boolean;
651 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
652 procedure ListColumnPopupMenuOnClick( Sender : TObject );
653 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
654 procedure SetSelectWord( const text : string );
655 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
656 function GetScreenCursor(): TCursor;
657 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
658 procedure SetScreenCursor(Cursor : TCursor);
659 //!
\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¬
660 procedure CreateControlThread();
661 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
662 procedure CreateBrowsers(count: Integer);
663 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
664 procedure GetGroupIndex(ActionList: TActionList);
665 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
666 procedure SetGroupIndex(ActionList: TActionList);
667 //!
\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é)
668 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
670 procedure CreateParams(var Params: TCreateParams); override;
671 procedure WndProc(var Message: TMessage); override;
672 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
673 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
674 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
678 LastRoundTime: TDateTime;
679 BrowserNullTab: TBrowserRecord;
680 FControlThread: TThreadControl;
681 procedure MoveToURL(const inURL: string);
682 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
684 function GetHttpState: Boolean;
685 procedure SetEnabledCloseButton(Enabled: Boolean);
686 function GetTreeNode(Data: TObject): TTreeNode;
687 procedure ListViewAllSelect;
688 property ListStyle: TViewStyle read FListStyle write FListStyle;
689 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
690 property ViewType: TGikoViewType read FViewType write FViewType;
691 property NameCookie: string read FNameCookie write FNameCookie;
692 property MailCookie: string read FMailCookie write FMailCookie;
693 property ClickNode: TTreeNode read FClickNode write FClickNode;
694 property TreeType: TGikoTreeType read FTreeType write FTreeType;
695 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
696 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
697 property SelectResWord : string read FSelectResWord write FSelectResWord;
698 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
699 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
700 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
701 property ToolBarSettingSender : TToolBarSettingSenderType
702 read FToolBarSettingSender write FToolBarSettingSender;
703 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
704 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
705 property WorkCount: Integer read FWorkCount write FWorkCount;
706 procedure SetContent(inThread: TBrowserRecord);
707 function GetActiveContent: TThreadItem;
708 function GetActiveList: TObject;
710 procedure SetListViewType(AViewType: TGikoViewType); overload;
711 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
712 procedure PlaySound(SoundEventName: string);
713 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
714 procedure ClearHistory;
715 procedure SaveHistory;
716 procedure LoadHistory;
717 procedure ShowBBSTree( inBBS : TBBS );
718 procedure ShowBBSTreeOld( inBBS : TBBS );
719 procedure ShowHistoryTree;
720 procedure SetHistoryTreeNode;
721 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
722 procedure SetBrowserTabState;
723 procedure SetToolBarPopup;
724 procedure ShowFavoriteAddDialog( Item : TObject );
725 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
726 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
727 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
728 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
729 property OddColor : TColor read FOddColor write FOddColor;
730 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
731 procedure OnPlugInMenuItem( Sender : TObject );
732 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
733 /// 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Å
734 procedure ActiveListColumnSave;
735 procedure SetActiveList(Obj: TObject);
736 property ActiveList: TObject read GetActiveList write SetActiveList;
737 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
738 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
739 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
740 procedure IndividualAbonID(Atype : Integer);
741 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
742 procedure IndividualAbon(Atag, Atype : Integer);
743 //
\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Ý
744 procedure RepaintAllTabsBrowser();
745 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
746 procedure SetLinkBar;
747 procedure FavoriteBrowseFolder( node: TTreeNode );
748 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
749 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
750 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
751 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
752 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
753 procedure DeleteHistory( threadItem: TThreadItem );
754 //
\83^
\83u
\82ð
\8dí
\8f\9c
755 procedure DeleteTab(ThreadItem: TThreadItem); overload;
756 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
757 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
758 procedure BrowserMovement(const AName: string);
759 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
760 function GetMainForm(): TComponent;
761 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
762 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
763 procedure OnGestureStart(Sender: TObject);
764 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
765 procedure OnGestureMove(Sender: TObject);
766 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
767 procedure OnGestureEnd(Sender: TObject);
768 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
769 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
770 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
771 function EditorFormExists(): boolean;
772 //
\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é
773 procedure AllEditroFormNameTextClearClear();
774 //
\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é
775 procedure AllEditroFormMailTextClearClear();
776 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
777 procedure SelectListItem(List: TList);
779 function SaveTabURLs : Boolean;
780 ///
\83^
\83u
\93Ç
\82Ý
\8fo
\82µ
781 function LoadTabURLs : Boolean;
782 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
783 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
785 procedure ModifySelectList;
787 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
789 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
791 procedure SetSelectRoundName(Sender: TObject);
793 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
795 function WebBrowserClick(Sender: TObject): WordBool;
796 //!
\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é
797 procedure SetSelectComboBox();
800 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
803 TFavoriteMenuItem = class(TMenuItem)
807 property Data: Pointer read FData write FData;
810 TBBSMenuItem = class(TMenuItem)
814 property Data: Pointer read FData write FData;
817 TLinkToolButton = class(TToolButton)
821 property Data: Pointer read FData write FData;
830 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
831 YofUtils, ShellAPI, ToolBarUtil, ToolBarSetting,
832 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
833 FavoriteArrange, AddressHistory, Preview, Gesture,
834 About, Option, Round, Splash, Sort, ListSelect, Imm,
835 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
836 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
837 InputAssistDataModule;
840 BLANK_HTML: string = 'about:blank';
841 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
843 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
844 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
845 HTML_FILE_NAME = 'temp_preview.html';
846 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
847 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
848 //
\83\81\83b
\83Z
\81[
\83WID
849 USER_TREECLICK = WM_USER + 2000;
850 USER_RESIZED = WM_USER + 2001;
851 USER_MINIMIZED = WM_USER + 2002;
852 USER_SETLINKBAR = WM_USER + 2003;
853 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
856 procedure TGikoForm.CreateParams(var Params: TCreateParams);
859 if FormStyle in [fsNormal, fsStayOnTop] then begin
860 if BorderStyle in [bsSingle, bsSizeable] then begin
861 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
862 Params.WndParent := 0;
867 procedure TGikoForm.FormCreate(Sender: TObject);
869 TVS_NOTOOLTIPS = $0080;
875 wp: TWindowPlacement;
879 Writeln('============================================================');
880 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
882 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
883 Writeln('
\8fI
\97¹
\8e\9e\82Í
\81A
\83M
\83R
\83i
\83r
\83E
\83B
\83\93\83h
\83E
\82ð
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢');
884 Writeln('============================================================');
887 Sort.SetSortDate(Now());
889 FTreeType := gttNone;
890 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
892 Application.HookMainWindow(Hook);
893 FIsIgnoreResize := rtResizing;
894 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
895 //(
\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¢)
896 //
\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
897 GetGroupIndex(GikoDM.GikoFormActionList);
898 FSearchDialog := nil;
899 CreateBrowsers(BROWSER_COUNT);
901 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
904 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
905 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
907 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
908 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
910 EnabledCloseButton := True;
912 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
913 ListView.ViewStyle := GikoSys.Setting.ListStyle;
915 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
917 AnimePanel.Left := 0;
919 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
921 //
\83L
\83\83\83r
\83l
\83b
\83g
922 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
924 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
925 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
926 GikoDM.MsgBarVisibleActionExecute(nil);
927 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
929 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
930 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
931 GikoDM.StatusBarVisibleActionExecute(nil);
933 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
934 TreeView.Items.BeginUpdate;
935 FavoriteTreeView.Items.BeginUpdate;
936 ListView.Items.BeginUpdate;
938 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
939 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
940 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
941 TreeView.Color := GikoSys.Setting.CabinetBackColor;
942 FavoriteTreeView.Font.Assign(TreeView.Font);
943 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
945 ListView.Font.Name := GikoSys.Setting.ListFontName;
946 ListView.Font.Size := GikoSys.Setting.ListFontSize;
947 ListView.Font.Color := GikoSys.Setting.ListFontColor;
948 ListView.Font.Style := [];
949 if GikoSys.Setting.ListFontBold then
950 ListView.Font.Style := [fsbold];
951 if GikoSys.Setting.ListFontItalic then
952 ListView.Font.Style := ListView.Font.Style + [fsitalic];
954 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
955 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
956 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
957 FOddColor := GikoSys.Setting.OddColor;
960 TreeView.Items.EndUpdate;
961 FavoriteTreeView.Items.EndUpdate;
962 ListView.Items.EndUpdate;
964 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
965 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
967 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
968 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
970 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
971 FResRangeMenuSelect := GikoSys.ResRange;
972 case GikoSys.ResRange of
975 GikoDM.AllResAction.Execute;
979 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
980 GikoDM.SelectResAction.Checked := True;
983 case FResRangeMenuSelect of
984 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
985 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
986 100: GikoDM.OnlyAHundredResAction.Checked := True;
990 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
991 case GikoSys.Setting.ThreadRange of
994 GikoDM.AllItemAction.Checked := True;
999 GikoDM.LogItemAction.Checked := True;
1004 GikoDM.NewItemAction.Checked := True;
1009 GikoDM.LiveItemAction.Checked := True;
1010 ViewType := gvtLive;
1014 GikoDM.ArchiveItemAction.Checked := True;
1015 ViewType := gvtArch;
1020 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1021 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1022 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1023 BrowserTab.Font.Style := [];
1024 if GikoSys.Setting.BrowserTabFontBold then
1025 BrowserTab.Font.Style := [fsBold];
1026 if GikoSys.Setting.BrowserTabFontItalic then
1027 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1028 BrowserTab.DoubleBuffered := True;
1029 FDragWFirst := false;
1030 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1032 //
\83u
\83\89\83E
\83U
\83^
\83u
1033 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1035 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1036 GikoDM.BrowserTabTopAction.Checked := True;
1038 GikoDM.BrowserTabBottomAction.Checked := True;
1041 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1042 GikoDM.BrowserTabTabStyleAction.Checked := True;
1043 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1044 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1046 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1049 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1050 ProgressBar.Parent := StatusBar;
1051 ProgressBar.Top := 2;
1052 ProgressBar.Left := 0;
1053 ProgressBar.Width := StatusBar.Panels[0].Width;
1054 ProgressBar.Height := StatusBar.Height - 2;
1055 ProgressBar.Position := 0;
1057 //
\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Æ)
1058 InitializeBoardPlugIns;
1060 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1061 GikoSys.ListBoardFile;
1062 //
\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É
1064 //
\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è
1065 if (SplashWindow <> nil) then begin
1066 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1070 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1071 for i := Length(BBSs) - 1 downto 0 do begin
1072 if not BBSs[i].IsBoardFileRead then
1073 GikoSys.ReadBoardFile(BBSs[i]);
1075 if SplashWindow <> nil then begin
1076 SplashWindow.ProgressBar.StepBy(20);
1077 SplashWindow.Update;
1081 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1082 RoundList := TRoundList.Create;
1083 RoundList.LoadRoundBoardFile;
1084 RoundList.LoadRoundThreadFile;
1086 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1087 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1088 Style := Style or TVS_NOTOOLTIPS;
1089 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1091 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1092 TreeView.Align := alClient;
1093 FavoriteTreeView.Align := alClient;
1094 FavoriteTreeView.Visible := False;
1096 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1099 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1100 wp.length := sizeof(wp);
1101 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1102 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1103 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1104 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1105 wp.showCmd := SW_HIDE;
1106 SetWindowPlacement(Handle, @wp);
1109 if GikoSys.Setting.WindowMax then
1110 WindowState := wsMaximized;
1112 //
\83M
\83R
\83A
\83j
\83\81
1114 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1115 if FileExists(FileName) then
1116 Animate.FileName := FileName;
1124 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1125 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1126 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1129 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1130 FHistoryList := TList.Create;
1132 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1135 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1136 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1137 FavoriteDM.ReadFavorite;
1139 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1140 GikoDM.ArrangeAction.Execute;
1142 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1143 case GikoSys.Setting.ListWidthState of
1145 ViewPanel.Width := 1;
1146 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1147 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1150 ViewPanel.Width := GikoSys.Setting.ListWidth;
1151 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1152 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1155 ViewPanel.Width := GikoSys.Setting.ListWidth;
1156 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1157 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1161 case GikoSys.Setting.ListHeightState of
1163 ViewPanel.Height := 1;
1164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1168 ViewPanel.Height := GikoSys.Setting.ListHeight;
1169 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1170 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1173 ViewPanel.Height := GikoSys.Setting.ListHeight;
1174 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1175 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1180 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1181 CreateControlThread();
1183 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1184 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1186 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1189 BrowserBoardNameLabel.Caption := '';
1190 BrowserNameLabel.Caption := '';
1193 FTabHintIndex := -1;
1195 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1196 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1197 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1199 MakeDefaultINIFile();
1200 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1201 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1202 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1203 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1206 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1207 SetSelectComboBox();
1209 //
\83A
\83h
\83\8c\83X
\83o
\81[
1210 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1212 //
\83\8a\83\93\83N
\83o
\81[
1214 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1216 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1217 if not FileExists(GikoSys.GetBoardFileName) then begin
1218 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
1219 + '
\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
1220 + '
\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';
1221 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1222 GikoDM.NewBoardAction.Execute;
1225 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1226 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1228 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1229 // FLastRoundTime := 0;
1232 FHint := TResPopup.Create(Self);
1234 ListView.OnData := TListViewUtils.ListViewData;
1236 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1237 CabinetVisible( False );
1238 if GikoSys.Setting.CabinetVisible then begin
1239 i := CabinetSelectPopupMenu.Items.Count - 1;
1240 if GikoSys.Setting.CabinetIndex = i - 1 then
1241 GikoDM.CabinetHistoryAction.Execute
1242 else if GikoSys.Setting.CabinetIndex = i then
1243 GikoDM.CabinetFavoriteAction.Execute
1245 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1246 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1247 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1248 FIsIgnoreResize := rtResizing;
1249 GikoDM.CabinetBBSAction.Execute;
1252 ShowBBSTreeOld( BBSs[ 0 ] );
1253 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1256 //
\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
1257 for i := 1 to ParamCount do begin
1258 MoveToURL(ParamStr(i));
1261 GikoDM.RepaintStatusBar;
1262 StatusBarResize(Sender);
1264 dummy1.Caption := ItemReservPMenu.Caption;
1265 dummy1.Hint := ItemReservPMenu.Hint;
1267 //Samba24
\82Ì
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
1268 GikoSys.SambaFileExists();
1270 {$IFDEF SPAM_FILTER_ENABLED}
1271 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1272 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1275 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1276 MouseGesture := TMouseGesture.Create;
1277 GikoSys.Setting.Gestures.LoadGesture(
1278 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1279 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1280 MouseGesture.OnGestureStart := OnGestureStart;
1281 MouseGesture.OnGestureMove := OnGestureMove;
1282 MouseGesture.OnGestureEnd := OnGestureEnd;
1283 if GikoSys.Setting.GestureEnabled then
1284 MouseGesture.SetHook( Handle );
1286 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1287 GikoSys.SetGikoMessage;
1289 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1290 if GikoSys.Setting.AutoLogin then
1291 GikoDM.LoginAction.Execute;
1293 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1295 //
\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è
1296 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1297 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1299 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1300 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1303 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1304 procedure TGikoForm.SaveCoolBarSettings;
1307 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1309 SaveMainCoolBarSettings;
1310 SaveBoardCoolBarSettings;
1311 SaveBrowserCoolBarSettings;
1314 procedure TGikoForm.SaveMainCoolBarSettings;
1319 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1320 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1321 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1322 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1323 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1324 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1327 procedure TGikoForm.SaveBoardCoolBarSettings;
1332 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1333 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1334 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1335 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1336 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1337 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1340 procedure TGikoForm.SaveBrowserCoolBarSettings;
1345 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1346 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1347 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1348 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1349 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1350 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1353 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1354 procedure TGikoForm.LoadCoolBarSettings;
1360 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1361 MainCoolBar.Bands.BeginUpdate;
1363 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1364 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1365 CoolSet := GikoSys.Setting.MainCoolSet[i];
1366 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1367 FIsIgnoreResize := rtNone;
1368 SaveCoolBarSettings;
1371 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1372 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1373 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1376 MainCoolBar.Bands.EndUpdate;
1379 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1380 ListCoolBar.Bands.BeginUpdate;
1382 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1383 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1384 CoolSet := GikoSys.Setting.ListCoolSet[i];
1385 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1386 FIsIgnoreResize := rtNone;
1387 SaveCoolBarSettings;
1390 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1391 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1392 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1395 ListCoolBar.Bands.EndUpdate;
1398 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1399 BrowserCoolBar.Bands.BeginUpdate;
1401 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1402 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1403 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1404 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1405 FIsIgnoreResize := rtNone;
1406 SaveCoolBarSettings;
1409 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1410 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1411 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1414 BrowserCoolBar.Bands.EndUpdate;
1419 procedure TGikoForm.FormShow(Sender: TObject);
1421 if FStartUp then begin
1422 ShowWindow(Application.Handle, SW_HIDE);
1424 //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½
1425 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1426 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1427 GikoDM.StdToolBarVisibleActionExecute( nil );
1428 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1429 GikoDM.AddressBarVisibleActionExecute( nil );
1430 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1431 GikoDM.LinkBarVisibleActionExecute( nil );
1432 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1433 GikoDM.ListToolBarVisibleActionExecute( nil );
1434 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1435 GikoDM.ListNameBarVisibleActionExecute( nil );
1436 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1437 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1438 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1439 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1441 // CoolBar
\95\9c\8c³
1442 LoadCoolBarSettings;
1444 //
\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é
1445 // ResetBandInfo( ListCoolBar, ListToolBar );
1446 FIsIgnoreResize := rtNone;
1448 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1449 if GikoSys.Setting.TabAutoLoadSave then begin
1450 GikoDM.TabAutoLoadAction.Execute;
1453 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1454 SetGroupIndex(GikoDM.GikoFormActionList);
1460 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1462 // if GikoForm.WindowState <> wsMinimized then
1463 // SaveCoolBarSettings;
1464 if ( GikoSys.Setting.ShowDialogForEnd ) and
1465 (MessageDlg('
\83M
\83R
\83i
\83r
\82ð
\8fI
\97¹
\82µ
\82Ä
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then begin
1470 if GikoSys.Setting.TabAutoLoadSave then begin
1471 GikoDM.TabAutoSaveAction.Execute;
1474 { //2ch
\8c¾
\8cȩ̂²ÙFree
1475 if GikoSys.Setting.Gengo <> nil then begin
1476 GikoSys.Setting.Gengo.Free;
1479 Application.UnhookMainWindow(Hook);
1480 Application.Terminate;
1483 procedure TGikoForm.FormDestroy(Sender: TObject);
1486 // CoolSet: TCoolSet;
1487 wp : TWindowPlacement;
1490 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1492 MouseGesture.UnHook;
1496 ActiveListColumnSave;
1500 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1501 wp.length := sizeof(wp);
1502 GetWindowPlacement(Handle, @wp);
1503 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1504 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1505 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1506 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1507 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1509 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1510 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1511 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1512 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1513 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1514 if GikoDM.ArrangeAction.Checked then
1515 GikoSys.Setting.ListOrientation := gloVertical
1517 GikoSys.Setting.ListOrientation := gloHorizontal;
1518 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1523 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1524 if not GikoSys.Setting.ResRangeHold then
1525 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1528 if WindowState <> wsNormal then
1529 WindowState := wsNormal;
1530 SaveCoolBarSettings;
1532 GikoSys.Setting.WriteWindowSettingFile;
1533 GikoSys.Setting.WriteNameMailSettingFile;
1536 //
\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è
1537 //
\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¢
1539 //
\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
1541 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1543 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1544 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1546 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1548 //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é
1549 FavoriteDM.WriteFavorite;
1553 LockWindowUpdate(Self.Handle);
1555 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1556 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1557 GikoSys.Setting.ShowDialogForAllTabClose := false;
1558 GikoDM.AllTabCloseAction.Execute;
1559 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1563 for i := FBrowsers.Count - 1 downto 0 do begin
1564 TWebBrowser(FBrowsers[i]).Free;
1567 FBrowsers.Capacity := 0;
1572 if BrowserNullTab <> nil then begin
1573 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1574 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1576 BrowserNullTab.Free;
1582 TreeView.Items.BeginUpdate;
1583 TreeView.Items.GetFirstNode.Free;
1584 TreeView.Items.Clear;
1585 TreeView.Items.EndUpdate;
1589 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1591 //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
1592 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1596 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1610 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1612 RoundList.SaveRoundFile;
1626 FControlThread.Terminate;
1627 FControlThread.WaitFor;
1631 FControlThread.Free;
1634 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1635 // 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Å
1636 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1637 for i := Length(BoardGroups) - 1 downto 0 do begin
1638 //BoardGroups[i].Clear;
1639 BoardGroups[i].Free;
1643 for i := Length( BBSs ) - 1 downto 0 do begin
1644 if BBSs[ i ] <> nil then
1652 if FEvent <> nil then
1656 if FHint <> nil then begin
1657 FHint.ReleaseHandle;
1662 if TPreviewBrowser <> nil then begin
1663 FPreviewBrowser.Free;
1664 FPreviewBrowser := nil;
1668 LockWindowUpdate(0);
1671 //
\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
1672 procedure TGikoForm.SetBBSMenu;
1675 item : TBBSMenuItem;
1678 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1679 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1681 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1682 CabinetSelectPopupMenu.Items[ i ].Free;
1683 CabinetMenu.Items[ i ].Free;
1684 BBSSelectPopupMenu.Items[ i ].Free;
1690 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1691 for i := Length( BBSs ) - 1 downto 0 do begin
1693 item := TBBSMenuItem.Create( PopupMenu );
1694 item.Caption := BBSs[ i ].Title;
1695 item.Data := BBSs[ i ];
1696 item.OnClick := BBSMenuItemOnClick;
1697 CabinetSelectPopupMenu.Items.Insert( 0, item );
1698 item := TBBSMenuItem.Create( PopupMenu );
1699 item.Caption := BBSs[ i ].Title;
1700 item.Data := BBSs[ i ];
1701 item.OnClick := BBSMenuItemOnClick;
1702 CabinetMenu.Insert( 0, item );
1703 item := TBBSMenuItem.Create( PopupMenu );
1704 item.Caption := BBSs[ i ].Title;
1705 item.Data := BBSs[ i ];
1706 item.OnClick := BBSMenuItemOnClick;
1707 BBSSelectPopupMenu.Items.Insert( 0, Item );
1714 procedure TGikoForm.ReloadBBS;
1719 LockWindowUpdate(Self.Handle);
1721 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1722 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1723 GikoSys.Setting.ShowDialogForAllTabClose := false;
1724 GikoDM.AllTabCloseAction.Execute;
1725 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1726 SetContent(BrowserNullTab);
1727 //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
1728 TreeView.Items.Clear;
1730 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1732 RoundList.SaveRoundFile;
1735 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1741 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1748 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1750 FavoriteDM.WriteFavorite;
1755 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1756 for i := Length(BoardGroups) - 1 downto 0 do begin
1758 BoardGroups[i].Free;
1764 for i := Length( BBSs ) - 1 downto 0 do begin
1765 if BBSs[ i ] <> nil then
1774 FTreeType := gttNone;
1776 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1778 //
\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Æ)
1779 InitializeBoardPlugIns;
1781 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1783 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1784 for i := Length(BBSs) - 1 downto 0 do begin
1785 if not BBSs[i].IsBoardFileRead then
1786 GikoSys.ReadBoardFile(BBSs[i]);
1789 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1792 ShowBBSTree( BBSs[ 0 ] );
1794 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1797 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1798 FavoriteDM.ReadFavorite;
1802 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1803 RoundList.LoadRoundBoardFile;
1804 RoundList.LoadRoundThreadFile;
1806 LockWindowUpdate(0);
1808 GikoDM.TabsOpenAction.Execute;
1812 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1820 threadItem : TThreadItem;
1822 Protocol, Host, Path, Document, Port, Bookmark: string;
1827 ActiveFileName: string;
1832 if not( TObject(Sender) is TWebBrowser )then
1836 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1837 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1838 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1845 if PreviewTimer.Enabled then
1846 PreviewTimer.Enabled := False;
1847 Application.CancelHint;
1849 if GetActiveContent <> nil then
1850 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1852 ActiveFileName := '';
1854 FActiveContent := nil;
1858 StatusBar.Panels[1].Text := Text;
1860 if FHint <> nil then begin
1861 FHint.ReleaseHandle;
1864 if FPreviewBrowser <> nil then
1865 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1867 if not GikoSys.Setting.UnActivePopup then
1868 if not GikoForm.Active then
1871 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1872 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1875 Ext := AnsiLowerCase(ExtractFileExt(Text));
1876 if (Pos('http://', Text) = 1) and (GikoSys.Setting.PreviewVisible) and
1877 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1878 if FPreviewBrowser = nil then begin
1879 FPreviewBrowser := TPreviewBrowser.Create(Self);
1880 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1881 TOleControl(FPreviewBrowser).Parent := nil;
1883 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1884 FPreviewURL := Text;
1885 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1886 PreviewTimer.Enabled := True;
1887 end else if (Pos('about:blank', Text) = 1) or (Pos('http://', Text) = 1) or (Pos('mailto:', Text) = 1) then begin
1888 if Pos('mailto:', Text) = 1 then begin
1889 s := StringReplace(Text, 'mailto:', '', [rfIgnoreCase]);
1890 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1892 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1893 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1894 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1895 if (Assigned(e)) then begin
1896 tmp2 := ZenToHan(e.Get_outerText);
1897 if (GikoSys.IsNumeric(tmp2)) then begin
1898 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1899 wkIntSt := StrToInt(tmp2);
1900 wkIntTo := StrToInt(tmp2);
1901 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1902 FHint.PopupType := gptThread;
1903 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1905 FHint.PopupType := gptRaw;
1910 threadItem := GetActiveContent;
1911 URL := THTMLCreate.GetRespopupURL(Text, threadItem.URL);
1912 PathRec := Gikosys.Parse2chURL2(URL);
1913 if (PathRec.FNoParam) then begin
1917 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1919 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1921 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1923 URL := GikoSys.GetBrowsableThreadURL( URL );
1924 wkIntSt := PathRec.FSt;
1925 wkIntTo := PathRec.FTo;
1927 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1930 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1932 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1934 end else if wkIntSt > wkIntTo then begin
1939 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1944 threadItem := BBSsFindThreadFromURL( URL );
1946 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1947 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1948 if board <> nil then begin
1949 if not board.IsThreadDatRead then
1950 GikoSys.ReadSubjectFile( board );
1951 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1955 if threadItem <> nil then begin
1956 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1957 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1958 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1962 FHint.PopupType := gptThread;
1963 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
1968 if FHint.PopupType = gptRaw then begin
1969 if FHint.Caption <> '' then
1972 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
1978 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
1982 FEnabledCloseButton := Enabled;
1983 SysMenu := GetSystemMenu(Handle, False);
1985 if Enabled then begin
1986 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
1988 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
1991 DrawMenuBar(Handle);
1994 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
1995 var AllowChange: Boolean);
1997 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
1998 // if FTreeType = gtt2ch then
1999 // FSortIndex := -1;
2002 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2003 Shift: TShiftState);
2007 if GetActiveList is TBoard then begin
2009 VK_BACK:; // UpFolderButtonClick(Sender);
2010 VK_SPACE: ListDoubleClick(Shift);
2011 VK_RETURN: ListClick;
2014 if ListView.Selected <> nil then begin
2015 pos.X := ListView.Column[ 0 ].Width;
2016 pos.Y := ListView.Selected.Top;
2018 pos.X := ListView.Left;
2019 pos.Y := ListView.Top;
2021 Windows.ClientToScreen( ListView.Handle, pos );
2022 ListPopupMenu.Popup( pos.X, pos.Y );
2025 end else begin // TBBS, TCategory
2027 VK_BACK:; // UpFolderButtonClick(Sender);
2028 VK_SPACE: ListClick;
2029 VK_RETURN: ListDoubleClick(Shift);
2032 if ListView.Selected <> nil then begin
2033 pos.X := ListView.Column[ 0 ].Width;
2034 pos.Y := ListView.Selected.Top;
2036 pos.X := ListView.Left;
2037 pos.Y := ListView.Top;
2039 Windows.ClientToScreen( ListView.Handle, pos );
2040 ListPopupMenu.Popup( pos.X, pos.Y );
2046 function TGikoForm.GetHttpState: Boolean;
2048 Result := FHttpState;
2051 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2052 Column: TListColumn);
2056 vSortIndex : Integer;
2057 vSortOrder : Boolean;
2059 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2060 if TObject( FActiveList ) is TBBS then begin
2061 orderList := GikoSys.Setting.BBSColumnOrder;
2062 vSortIndex := GikoSys.Setting.BBSSortIndex;
2063 vSortOrder := GikoSys.Setting.BBSSortOrder;
2064 end else if TObject( FActiveList ) is TCategory then begin
2065 orderList := GikoSys.Setting.CategoryColumnOrder;
2066 vSortIndex := GikoSys.Setting.CategorySortIndex;
2067 vSortOrder := GikoSys.Setting.CategorySortOrder;
2068 end else if TObject( FActiveList ) is TBoard then begin
2069 orderList := GikoSys.Setting.BoardColumnOrder;
2070 vSortIndex := GikoSys.Setting.BoardSortIndex;
2071 vSortOrder := GikoSys.Setting.BoardSortOrder;
2075 id := Integer( orderList[ idx ] );
2078 if vSortIndex = id then
2079 vSortOrder := not vSortOrder
2081 vSortOrder := id = 0;
2084 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2087 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2088 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2092 DefaultDraw := True;
2094 DefaultDraw := False;
2095 if (cdsSelected in State) or (cdsHot in State) then begin
2096 Sender.Canvas.Brush.Color := clHighlight;
2097 Sender.Canvas.Font.Color := clHighlightText;
2099 Sender.Canvas.Brush.Color := clBtnFace;
2100 Sender.Canvas.Font.Color := clBtnText;
2102 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2103 Sender.Canvas.FillRect(ARect);
2104 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2107 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2112 Nodes := TreeView.Items;
2114 for i := 0 to Nodes.Count - 1 do begin
2115 if Nodes.Item[i].Data = Data then begin
2116 Result := Nodes.Item[i];
2123 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2124 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2125 Headers: OleVariant; var Cancel: WordBool);
2130 kMenuName: string = 'menu:';
2133 if Pos(kMenuName, URL) <> 0 then begin
2134 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2136 if not GikoSys.IsNumeric(sNo) then Exit;
2140 KokoPopupMenu.Tag := StrToInt(sNo);
2141 KokoPopupMenu.Popup(p.x, p.y);
2142 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2143 Cancel := not GikoSys.Setting.OpenMailer;
2148 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2149 const ARect: TRect; var DefaultDraw: Boolean);
2153 IsBoardNode: Boolean;
2159 Category: TCategory;
2163 DefaultDraw := True;
2165 if FTreeType = gttHistory then Exit;
2167 TreeView.Canvas.Font.Color := clBlue;
2168 IsBoardNode := False;
2169 for i := 0 to TreeView.Items.Count - 1 do begin
2171 if not TreeView.Items[i].IsVisible then
2174 if TObject(TreeView.Items[i].Data) is TCategory then begin
2175 if TreeView.Items[i].Expanded then
2178 IsBoardNode := False;
2179 Category := TCategory(TreeView.Items[i].Data);
2180 for j := 0 to Category.Count - 1 do begin
2181 Board := Category.Items[j];
2182 if Board <> nil then begin
2183 if Board.UnRead > 0 then begin
2191 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2192 IsBoardNode := True;
2193 Board := TBoard(TreeView.Items[i].Data);
2195 Cnt := Board.UnRead;
2201 Bitmap := TBitmap.Create;
2203 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2204 Bitmap.Canvas.Font.Style := [fsBold];
2205 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2210 NodeRect := TreeView.Items[i].DisplayRect(True);
2213 CntText := '(' + IntToStr(Cnt) + ')'
2214 else if Cnt = 1 then
2218 TextWidth := TreeView.Canvas.TextWidth(CntText);
2220 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2222 NodeRect.Left + NodeWidth + TextWidth + 8,
2224 DrawText(TreeView.Canvas.Handle,
2228 DT_SINGLELINE or DT_VCENTER);
2230 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2233 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2234 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2237 Category: TCategory;
2240 DefaultDraw := True;
2242 if FTreeType = gttHistory then Exit;
2244 TreeView.Canvas.Font.Style := [];
2245 if Node <> nil then begin
2246 if TObject(Node.Data) is TCategory then begin
2247 Category := TCategory(Node.Data);
2248 for i := 0 to Category.Count - 1 do begin
2249 Board := Category.Items[i];
2250 if Board <> nil then begin
2251 if Board.UnRead > 0 then begin
2252 TreeView.Canvas.Font.Style := [fsBold];
2257 end else if TObject(Node.Data) is TBoard then begin
2258 Board := TBoard(Node.Data);
2259 if Board.UnRead > 0 then
2260 TreeView.Canvas.Font.Style := [fsBold];
2265 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2267 TreeView.Invalidate;
2269 if TObject(Node.Data) is TBBS then begin
2270 TBBS(Node.Data).NodeExpand := True;
2271 end else if TObject(Node.Data) is TCategory then begin
2272 TCategory(Node.Data).NodeExpand := True;
2273 end else if TObject(Node.Data) is TBoard then begin
2274 TBoard(Node.Data).NodeExpand := True;
2278 procedure TGikoForm.ListViewAllSelect;
2283 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2285 AddMessageList(Msg, nil, Icon);
2287 // *************************************************************************
2288 //!
\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
2289 // *************************************************************************
2290 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2294 boardPlugIn : TBoardPlugIn;
2299 if Item.DownType = gdtBoard then
2300 ATitle := Item.Board.Title
2302 ATitle := Item.ThreadItem.Title;
2304 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2306 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2308 if Item.DownType = gdtBoard then begin
2311 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2312 if GetActiveList = Item.Board then begin
2314 //
\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é
2315 if (GikoSys.Setting.AutoSortThreadList) then begin
2316 GikoSys.Setting.BoardSortIndex := 0;
2317 GikoSys.Setting.BoardSortOrder := True;
2319 Sort.SetSortDate(Now());
2320 SetActiveList(Item.Board);
2322 Item.Board.Modified := True;
2323 Item.Board.IsThreadDatRead := True;
2325 end else if Item.DownType = gdtThread then begin
2328 Item.ThreadItem.NewArrival := True;
2329 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2330 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2331 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2332 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2333 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2334 Item.ThreadItem.Title := Res.FTitle;
2335 ATitle := Item.ThreadItem.Title;
2336 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2337 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2338 ATitle := Res.FTitle;
2340 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2341 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2342 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2346 if GikoSys.Setting.BrowserTabVisible then begin
2347 if GetActiveContent = Item.ThreadItem then
2348 InsertBrowserTab(Item.ThreadItem)
2349 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2350 InsertBrowserTab(Item.ThreadItem, True)
2352 InsertBrowserTab(Item.ThreadItem, False);
2355 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2356 InsertBrowserTab(Item.ThreadItem);
2359 Application.ProcessMessages;
2361 if Item.State = gdsComplete then begin
2363 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2367 PlaySound('NewDiff');
2368 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2373 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2374 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2375 Item.ThreadItem.Round := False;
2376 //Item.ThreadItem.RoundName := '';
2377 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);
2380 //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
2381 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2382 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2383 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2384 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2385 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2386 case GikoForm.ViewType of
2387 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2388 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2389 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2390 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2391 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2392 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2397 end else if Item.State = gdsNotModify then begin
2399 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2400 //SetContent(Item.ThreadItem);
2401 InsertBrowserTab(Item.ThreadItem);
2403 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2404 PlaySound('NoChange');
2405 Screen.Cursor := crDefault;
2406 end else if Item.State = gdsAbort then begin
2408 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2409 end else if Item.State = gdsError then begin
2414 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2415 // if Item.ResponseCode = 302 then
2416 // 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);
2422 if FWorkCount < 0 then FWorkCount := 0;
2423 if FWorkCount = 0 then begin
2425 Animate.Active := False;
2427 Screen.Cursor := crDefault;
2434 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2436 // SetProgressValue(Number, 0, AWorkCountMax);
2437 // ProgressBar.Visible := True;
2438 ProgressBar.Position := 0;
2439 ProgressBar.Max := AWorkCountMax;
2440 FDownloadTitle := AWorkTitle;
2441 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2442 FDownloadMax := AWorkCountMax;
2445 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2447 ProgressBar.Position := 0;
2448 if FDownloadMax <> 0 then
2449 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2452 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2454 ProgressBar.Position := AWorkCount;
2455 // SetProgressValue(Number, AWorkCount);
2456 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2459 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2461 ListItem: TListItem;
2463 MessageListView.Items.BeginUpdate;
2465 ListItem := MessageListView.Items.Add;
2466 ListItem.Caption := ACaption;
2467 ListItem.Data := AObject;
2468 ListItem.MakeVisible(False);
2470 gmiOK: ListItem.ImageIndex := 0;
2471 gmiSAD: ListItem.ImageIndex := 1;
2472 gmiNG: ListItem.ImageIndex := 2;
2473 gmiWhat: ListItem.ImageIndex := 3;
2476 MessageListView.Items.EndUpdate;
2481 function TGikoForm.InsertBrowserTab(
2482 ThreadItem : TThreadItem;
2483 ActiveTab : Boolean = True
2486 i, j, idx : Integer;
2487 favItem : TFavoriteThreadItem;
2488 newBrowser : TBrowserRecord;
2492 if Threaditem = nil then Exit;
2494 if ThreadItem.IsLogFile then begin
2495 //
\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é
2496 //
\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é
2497 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2498 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2499 j := FBrowsers.IndexOf(FActiveContent.Browser);
2500 if j = BROWSER_COUNT - 1 then
2501 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2503 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2504 if not AddHistory( favItem ) then
2507 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2508 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2509 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2510 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2511 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2512 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2513 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2514 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2518 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2519 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2520 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2522 if ActiveTab then begin
2523 BrowserTab.TabIndex := i;
2524 BrowserTab.OnChange(nil);
2531 idx := BrowserTab.TabIndex;
2532 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2533 newBrowser := TBrowserRecord.Create;
2534 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2535 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2536 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2540 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2541 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2542 //newBrowser.Browser.Navigate(BLANK_HTML);
2543 newBrowser.thread := ThreadItem;
2544 newBrowser.Repaint := true;
2545 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2547 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2548 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2549 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2553 if ActiveTab then begin
2554 BrowserTab.TabIndex := 0;
2558 newBrowser := TBrowserRecord.Create;
2559 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2560 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2561 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2565 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2566 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2567 //newBrowser.Browser.Navigate(BLANK_HTML);
2568 newBrowser.thread := ThreadItem;
2569 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2570 newBrowser.Repaint := true;
2572 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2573 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2574 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2578 if ActiveTab then begin
2579 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2580 BrowserTab.TabIndex := 0
2582 BrowserTab.TabIndex := i;
2585 Result := newBrowser;
2586 if(ActiveTab) or (idx = -1) then begin
2587 BrowserTab.OnChange(nil);
2590 if BrowserNullTab = nil then begin
2591 BrowserNullTab := TBrowserRecord.Create;
2592 BrowserNullTab.Browser := Browser;
2594 // if BrowserNullTab.thread <> ThreadItem then begin
2595 // BrowserNullTab.Movement := '';
2597 BrowserNullTab.thread := ThreadItem;
2598 Result := BrowserNullTab;
2599 BrowserTab.TabIndex := -1;
2600 SetContent(BrowserNullTab);
2603 if GikoSys.Setting.URLDisplay then
2604 AddressComboBox.Text := ThreadItem.URL;
2608 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2617 ThreadItem: TThreadItem;
2618 Thread: TBrowserRecord;
2619 ThreadTitle, ThreadPTitle: string;
2620 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2623 idx := BrowserTab.TabIndex;
2624 if (FActiveContent <> nil) and
2625 (FActiveContent.Thread <> Thread.Thread) and
2626 (FActiveContent.Browser <> nil) and
2627 (Assigned(FActiveContent.Browser.Document)) then begin
2630 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2633 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2638 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2639 Thread.Browser.Navigate(BLANK_HTML);
2640 BrowserBoardNameLabel.Caption := '';
2641 ItemBoardImage.Picture := nil;
2642 BrowserNameLabel.Caption := '';
2643 ItemImage.Picture := nil;
2644 BrowserNullTab.Thread := nil;
2645 //TOleControl(BrowserNullTab.Browser).Visible := true;
2646 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2647 FActiveContent := nil;
2649 end else if Thread.Browser = nil then begin
2650 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2651 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2652 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2653 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2654 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2658 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2659 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2662 ThreadTitle := Thread.Thread.Title;
2663 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2664 //ThreadScrollTop := Thread.Thread.ScrollTop;
2665 ThreadIsLog := Thread.Thread.IsLogFile;
2666 ThreadItem := Thread.Thread;
2667 ThreadNewArraical := Thread.Thread.NewArrival;
2668 //ThreadUnRead := Thread.Thread.UnRead;
2669 BBSID := ThreadItem.ParentBoard.BBSID;
2670 FileName := ThreadItem.FileName;
2672 if GetCapture = ListView.Handle then
2675 Screen.Cursor := crHourGlass;
2679 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2680 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2681 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2683 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2684 if (not Assigned(Thread.Browser.Document)) then begin
2685 Thread.Browser.Navigate('about:blank');
2687 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2688 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2689 Application.ProcessMessages;
2690 if idx <> BrowserTab.TabIndex then begin
2695 if (Thread <> nil) and (ThreadItem <>nil) then begin
2696 BrowserBoardNameLabel.Caption := ThreadPTitle;
2697 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2698 BrowserNameLabel.Caption := ThreadTitle;
2699 ItemImage.Picture := nil;
2701 if ThreadNewArraical then
2702 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2704 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2706 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2708 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2709 BrowserNameLabel.Left := ItemImage.Left + 20;
2713 if not ThreadIsLog then begin
2714 Self.Caption := GikoDataModule.CAPTION_NAME ;
2715 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2716 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2718 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2719 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2721 doc.charset := 'Shift_JIS';
2727 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2728 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2729 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2730 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2731 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2732 //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«
2733 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2734 if Thread.Repaint then begin
2735 Thread.Repaint := false;
2737 Thread.Browser.OnStatusTextChange := nil;
2738 LockWindowUpdate(Thread.Browser.ParentWindow);
2739 //LockWindowUpdate(Thread.Browser.Handle);
2740 HTMLCreater.CreateHTML2(
2741 Idispatch( olevariant(Thread.Browser.ControlInterface).Document),
2742 ThreadItem, sTitle);
2744 //
\92\86\90g
\82ª
\93Ç
\82Ý
\8fI
\82í
\82é
\82Ì
\82ð
\91Ò
\82Â
2745 while ( (((Thread.Browser.Document as IHTMLDocument2).body as IHTMLElement).document
2746 as IHTMLDocument2).readyState <> 'complete' ) do begin
2748 Application.ProcessMessages;
2750 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2751 //PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2753 // JUMP
\82ð
\8ew
\92è
\82³
\82ê
\82Ä
\82¢
\82½
\82çJUMP
\82·
\82é
2754 //if (Thread.Movement <> '') then begin
2755 // Thread.Move(Thread.Movement);
2756 // Thread.Movement := '';
2761 //ActiveContent
\81@
\82Ì
\8dX
\90V
2762 FActiveContent := Thread;
2764 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
2765 if (FActiveList is TBoard) and (TBoard(ActiveList) = ThreadItem.ParentBoard) then begin
2770 Screen.Cursor := crDefault;
2774 function TGikoForm.GetActiveContent: TThreadItem;
2777 if FActiveContent <> nil then
2778 Result := FActiveContent.Thread
2787 procedure TGikoForm.SetActiveList(Obj: TObject);
2791 // if FActiveList <> Obj then begin
2794 if ListView.Selected <> nil then
2795 idx := ListView.Selected.Index
2801 ListView.Items.Count := 0;
2802 ListView.Items.Clear;
2803 ListView.Selected := nil;
2804 // ListView.Columns.Clear;
2805 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2806 and (FActiveContent.Thread.IsLogFile) then begin
2808 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2810 on E: Exception do begin
2811 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2812 //
\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é
2813 ReleaseBrowser(FActiveContent);
2814 FActiveContent.Thread := nil;
2815 Self.Caption := GikoDataModule.CAPTION_NAME;
2819 Self.Caption := GikoDataModule.CAPTION_NAME;
2820 //Application.Title := CAPTION_NAME;
2822 // ActiveListColumnSave;
2824 Screen.Cursor := crHourGlass;
2826 if Obj is TBBS then begin
2827 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2828 end else if Obj is TCategory then begin
2829 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2830 end else if Obj is TBoard then begin
2831 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2834 Screen.Cursor := crDefault;
2837 if idx >= 0 then begin
2838 if idx >= ListView.Items.Count then
2839 idx := ListView.Items.Count - 1;
2840 ListView.ItemIndex := idx;
2841 ListView.ItemFocused := ListView.Items.Item[ idx ];
2847 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2848 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2849 function TGikoForm.GetActiveList: TObject;
2851 Result := FActiveList;
2854 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2856 SetListViewType(AViewType, '', False);
2859 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2864 for i := Length( BBSs ) - 1 downto 0 do begin
2865 BBSs[i].SelectText := SelectText;
2866 BBSs[i].KubetsuChk := KubetsuChk;
2868 ViewType := AViewType;
2869 if ActiveList is TBoard then begin
2870 Board := TBoard(ActiveList);
2872 //gvtAll: ListView.Items.Count := Board.Count;
2873 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2874 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2875 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2876 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2877 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2881 SetActiveList(Board);
2885 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2886 const ARect: TRect; var DefaultDraw: Boolean);
2892 if ListView.Items.Count = 0 then begin
2893 DefaultDraw := true;
2894 ListView.Canvas.Brush.Color := ListView.Color;
2895 ListView.Canvas.FillRect(ARect);
2899 ListView.Canvas.Font.Color := clWindowText;
2900 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2903 ListView.Canvas.Font.Color := clBlue;
2904 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';
2907 ListView.Canvas.Font.Color := clGreen;
2908 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2911 ListView.Canvas.Font.Color := clFuchsia;
2912 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';
2915 ListView.Canvas.Font.Color := clMaroon;
2916 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2919 ListView.Canvas.Font.Color := clNavy;
2920 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';
2921 if GetActiveList is TBoard then
2922 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2930 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2931 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2932 ListView.Canvas.TextOut(p.X, p.Y, s);
2934 DefaultDraw := True;
2938 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2940 Item: TDownloadItem;
2942 if not Board.IsThreadDatRead then
2943 GikoSys.ReadSubjectFile(Board);
2944 Item := TDownloadItem.Create;
2946 Item.Board := Board;
2947 Item.DownType := gdtBoard;
2948 Item.ForceDownload := ForceDownload;
2949 FControlThread.AddItem(Item);
2950 if FWorkCount = 0 then begin
2952 Animate.Active := True;
2955 Screen.Cursor := crAppStart;
2963 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2965 Item: TDownloadItem;
2967 Item := TDownloadItem.Create;
2969 Item.ThreadItem := ThreadItem;
2970 Item.DownType := gdtThread;
2971 Item.ForceDownload := ForceDownload;
2972 FControlThread.AddItem(Item);
2973 if FWorkCount = 0 then begin
2975 Animate.Active := True;
2978 Screen.Cursor := crAppStart;
2986 procedure TGikoForm.PlaySound(SoundEventName: string);
2990 if not GikoSys.Setting.Mute then begin
2991 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
2992 if FileExists(FileName) then begin
2993 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
2994 sndPlaySound(nil, SND_SYNC);
2995 Application.ProcessMessages;
2997 sndPlaySound(PChar(FileName), SND_ASYNC);
3003 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3006 Item: TFavoriteThreadItem;
3010 // if (GetActiveContent = ThreadItem) and
3011 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3013 // if GetActiveContent = ThreadItem then
3017 if FTreeType = gttHistory then
3018 TreeView.Selected := nil;
3020 for i := 0 to FHistoryList.Count - 1 do begin
3021 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3022 Item := TFavoriteThreadItem(FHistoryList[i]);
3023 if Item.URL = favItem.URL then begin
3024 // SetContent(ThreadItem);
3025 FHistoryList.Move(i, 0);
3026 if FTreeType = gttHistory then
3027 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3028 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3035 if FHistoryList.Count > 0 then
3036 FHistoryList.Insert( 0, favItem )
3038 FHistoryList.Add( favItem );
3039 // SetContent(ThreadItem);
3040 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3041 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3042 i := FHistoryList.Count - 1;
3043 TObject( FHistoryList.Items[ i ] ).Free;
3044 FHistoryList.Delete( i );
3047 if FTreeType = gttHistory then begin
3048 Node := TreeView.Items.Add( nil, favItem.Title );
3049 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3051 if favItem.NewArrival then begin
3052 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3053 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3055 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3056 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3059 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3060 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3061 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3062 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3063 Node.Data := favItem;
3064 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3065 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3066 i := TreeView.Items.Count - 1;
3067 TreeView.Items.Item[ i ].Delete;
3072 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3076 for i := 0 to FHistoryList.Count - 1 do begin
3077 if threadItem.URL = TFavoriteThreadItem( FHistoryList.Items[i] ).URL then begin
3078 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3079 FHistoryList.Delete(i);
3080 FHistoryList.Capacity := FHistoryList.Count;
3086 procedure TGikoForm.ClearHistory;
3090 //FHistoryList.Clear;
3093 for i := FHistoryList.Count - 1 downto 0 do begin
3094 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3095 TFavoriteThreadItem(FHistoryList[ i ]).Free
3096 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3097 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3099 //FHistoryList.Delete(i);
3105 FHistoryList.Capacity := FHistoryList.Count;
3109 procedure TGikoForm.SaveHistory;
3112 saveList : TstringList;
3115 saveList := TStringList.Create;
3118 FHistoryList.Capacity := FHistoryList.Count;
3119 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3120 saveList.Add('<address>');
3121 bound := FHistoryList.Count - 1;
3122 for i := bound downto 0 do begin
3123 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3125 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3126 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3128 saveList.Add('</address>');
3129 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3136 procedure TGikoForm.LoadHistory;
3140 XMLDoc : IXMLDocument;
3142 HistoryNode : IXMLNode;
3144 favItem : TFavoriteThreadItem;
3153 fileName := GikoSys.GetConfigDir + 'History.xml';
3155 if FileExists( fileName ) then begin
3157 XMLDoc := IXMLDocument.Create;
3158 //XMLDoc := LoadXMLDocument(FileName);
3159 LoadXMLDocument(FileName, XMLDoc);
3161 XMLNode := XMLDoc.DocumentElement;
3163 if XMLNode.NodeName = 'address' then begin
3164 bound := XMLNode.ChildNodes.Count - 1;
3165 for i := 0 to bound do begin
3166 HistoryNode := XMLNode.ChildNodes[i];
3167 if HistoryNode.NodeName = 'history' then begin
3168 //if FReadCount >= sl.Count then begin
3169 s := Trim(HistoryNode.Attributes['url']);
3170 if s <> '' then begin
3171 favItem := TFavoriteThreadItem.Create(
3172 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3173 if not AddHistory( favItem ) then
3187 rt := GetTickCount - st;
3188 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3193 procedure TGikoForm.ShowBBSTreeOld(
3201 FavoriteTreeView.Visible := False;
3202 FavoriteToolBar.Hide;
3203 TreeView.Visible := True;
3205 b := CabinetSelectPopupMenu.Items.Count - 1;
3206 for i := 0 to b do begin
3207 item := CabinetSelectPopupMenu.Items[ i ];
3208 if item is TBBSMenuItem then begin
3209 if TBBSMenuItem( item ).Data = inBBS then begin
3210 item.Checked := True;
3211 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3212 CabinetMenu.Items[ i ].Checked := True;
3213 GikoSys.Setting.CabinetIndex := i;
3217 item.Checked := False;
3218 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3219 CabinetMenu.Items[ i ].Checked := False;
3221 CabinetSelectToolButton.Caption := inBBS.Title;
3223 GikoDM.CabinetHistoryAction.Checked := False;
3224 GikoDM.CabinetFavoriteAction.Checked := False;
3226 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3227 FTreeType := gtt2ch;
3228 HistoryToolBar.Hide;
3229 FActiveBBS := inBBS;
3230 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3231 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3232 //?c???[??g?b?v?????I????
3233 if GetActiveList = nil then
3234 TreeView.Selected := TreeView.Items[0]
3236 for i := 0 to TreeView.Items.Count - 1 do begin
3237 if TreeView.Items[i].Data = GetActiveList then begin
3238 TreeView.Selected := TreeView.Items[i];
3242 TreeView.Selected := TreeView.Items[0]
3250 procedure TGikoForm.ShowBBSTree(
3259 FavoriteTreeView.Visible := False;
3260 FavoriteToolBar.Hide;
3261 TreeView.Visible := True;
3263 b := CabinetSelectPopupMenu.Items.Count - 1;
3264 for i := 0 to b do begin
3265 item := CabinetSelectPopupMenu.Items[ i ];
3266 if item is TBBSMenuItem then begin
3267 if TBBSMenuItem( item ).Data = inBBS then begin
3268 item.Checked := True;
3269 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3270 CabinetMenu.Items[ i ].Checked := True;
3271 GikoSys.Setting.CabinetIndex := i;
3275 item.Checked := False;
3276 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3277 CabinetMenu.Items[ i ].Checked := False;
3279 CabinetSelectToolButton.Caption := inBBS.Title;
3281 GikoDM.CabinetHistoryAction.Checked := False;
3282 GikoDM.CabinetFavoriteAction.Checked := False;
3284 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3285 or (not (CabinetPanel.Visible)) then begin
3286 FTreeType := gtt2ch;
3287 HistoryToolBar.Hide;
3288 FActiveBBS := inBBS;
3289 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3290 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3291 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3292 if GetActiveList = nil then begin
3294 TreeClick( TreeView.Items[0] );
3298 for i := 0 to TreeView.Items.Count - 1 do begin
3299 if TreeView.Items[i].Data = GetActiveList then begin
3300 TreeClick( TreeView.Items[i] );
3304 TreeClick( TreeView.Items[0] );
3312 procedure TGikoForm.ShowHistoryTree;
3317 if CabinetPanel.Visible then begin
3318 if FTreeType = gttHistory then begin
3319 CabinetVisible( False );
3320 GikoDM.CabinetHistoryAction.Checked := False;
3322 GikoDM.CabinetHistoryAction.Checked := True;
3325 CabinetVisible( True );
3326 GikoDM.CabinetHistoryAction.Checked := True;
3329 // BBS...BBS, History, Favorite
3330 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3332 FavoriteTreeView.Visible := False;
3333 TreeView.Visible := True;
3335 GikoDM.CabinetBBSAction.Checked := False;
3336 GikoDM.CabinetFavoriteAction.Checked := False;
3338 if FTreeType <> gttHistory then begin
3339 b := CabinetSelectPopupMenu.Items.Count - 1;
3340 for i := 0 to b do begin
3341 item := CabinetSelectPopupMenu.Items[ i ];
3342 if item is TBBSMenuItem then begin
3343 item.Checked := False;
3344 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3345 CabinetMenu.Items[ i ].Checked := False;
3349 FTreeType := gttHistory;
3350 HistoryToolBar.Show;
3351 FavoriteToolBar.Hide;
3353 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3357 procedure TGikoForm.SetHistoryTreeNode;
3361 Item: TFavoriteThreadItem;
3363 TreeView.Items.BeginUpdate;
3365 TreeView.Items.Clear;
3366 for i := 0 to FHistoryList.Count - 1 do begin
3367 Item := TFavoriteThreadItem(FHistoryList[i]);
3368 Node := TreeView.Items.Add(nil, Item.Title);
3370 if Item.Item.NewArrival then begin
3371 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3372 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3374 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3375 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3378 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3379 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3380 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3381 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3385 TreeView.Items.EndUpdate;
3389 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3391 ChangeEvent: TTVChangedEvent;
3392 ChangingEvent: TTVChangingEvent;
3396 if Item is TCategory then
3397 bbs := TCategory( Item ).ParenTBBS
3398 else if Item is TBoard then
3399 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3403 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3404 if Item <> FActiveList then begin
3406 ChangingEvent := nil;
3408 if not CallEvent then begin
3409 ChangeEvent := TreeView.OnChange;
3410 ChangingEvent := TreeView.OnChanging;
3413 if not CallEvent then begin
3414 TreeView.OnChange := nil;
3415 TreeView.OnChanging := nil;
3417 //Application.ProcessMessages;
3418 for i := 0 to TreeView.Items.Count - 1 do begin
3419 if TreeView.Items[i].Data = Item then begin
3420 TreeView.Items[i].Selected := True;
3422 TreeClick(TreeView.Items[i]);
3426 //Application.ProcessMessages;
3428 if not CallEvent then begin
3429 TreeView.OnChange := ChangeEvent;
3430 TreeView.OnChanging := ChangingEvent;
3435 if Item <> FActiveList then begin
3436 ActiveListColumnSave;
3437 if (Item is TBBS) or (Item is TCategory) then begin
3438 ListView.Columns.Clear;
3439 SetActiveList( Item );
3440 end else if Item is TBoard then begin
3441 if not TBoard( Item ).IsThreadDatRead then begin
3442 Screen.Cursor := crHourGlass;
3444 if not TBoard( Item ).IsThreadDatRead then
3445 GikoSys.ReadSubjectFile(TBoard( Item ));
3447 Screen.Cursor := crDefault;
3450 Sort.SetSortDate(Now());
3451 SetActiveList( Item );
3456 if Item is TBoard then begin // not TCategory
3457 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3458 if GikoSys.Setting.ListWidthState = glsMax then begin
3459 GikoDM.BrowserMinAction.Execute;
3460 if GikoForm.Visible then
3464 if GikoSys.Setting.ListHeightState = glsMax then begin
3465 GikoDM.BrowserMinAction.Execute;
3466 if GikoForm.Visible then
3473 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3474 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3476 listItem : TListItem;
3477 threadItem : TThreadItem;
3484 if not (GetActiveList is TBoard) then Exit;
3485 listItem := ListView.GetItemAt( X, Y );
3486 if listItem = nil then Exit;
3487 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3489 threadItem := TThreadItem(ListItem.Data);
3490 InsertBrowserTab(threadItem, False);
3491 if threadItem.IsLogFile then
3492 ListView.UpdateItems(listItem.Index, listItem.Index);
3496 //
\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Å
3497 if (ssDouble in Shift) then
3498 ListDoubleClick(Shift)
3506 Windows.ClientToScreen( ListView.Handle, pos );
3507 ListPopupMenu.Popup( pos.X, pos.Y );
3513 procedure TGikoForm.ListClick;
3515 ListItem: TListItem;
3516 ThreadItem: TThreadItem;
3518 if ListView.SelCount <> 1 then Exit;
3519 ListItem := ListView.Selected;
3520 if ListItem = nil then Exit;
3521 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3523 ThreadItem := TThreadItem(ListItem.Data);
3524 if ThreadItem.IsLogFile then begin
3525 InsertBrowserTab(ThreadItem);
3526 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3528 InsertBrowserTab(ThreadItem);
3531 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3532 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3533 if GikoSys.Setting.ListWidthState = glsMin then begin
3534 GikoDM.BrowserMaxAndFocusAction.Execute;
3537 if GikoSys.Setting.ListHeightState = glsMin then begin
3538 GikoDM.BrowserMaxAndFocusAction.Execute;
3544 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3546 ThreadItem: TThreadItem;
3549 shiftDown := (ssShift in Shift);
3551 if ListView.Selected = nil then Exit;
3553 if TObject(ListView.Selected.Data) is TCategory then begin
3554 SelectTreeNode(ListView.Selected.Data, True);
3555 end else if TObject(ListView.Selected.Data) is TBoard then begin
3556 SelectTreeNode(ListView.Selected.Data, True)
3557 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3558 Application.ProcessMessages;
3559 ThreadItem := TThreadItem(ListView.Selected.Data);
3560 DownloadContent(ThreadItem, shiftDown);
3562 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3563 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3564 if GikoSys.Setting.ListWidthState = glsMin then begin
3565 GikoDM.BrowserMaxAction.Execute;
3566 GikoDM.SetFocusForBrowserAction.Execute;
3569 if GikoSys.Setting.ListHeightState = glsMin then begin
3570 GikoDM.BrowserMaxAction.Execute;
3571 GikoDM.SetFocusForBrowserAction.Execute;
3578 procedure TGikoForm.BrowserMovement(const AName: string);
3580 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3581 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3582 and (FActiveContent <> nil) then begin
3583 FActiveContent.Move(AName);
3587 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3589 if TObject(Node.Data) is TBBS then begin
3590 TBBS(Node.Data).NodeExpand := False;
3591 end else if TObject(Node.Data) is TCategory then begin
3592 TCategory(Node.Data).NodeExpand := False;
3593 end else if TObject(Node.Data) is TBoard then begin
3594 TBoard(Node.Data).NodeExpand := False;
3596 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3597 TreeClick(TreeView.Selected);
3601 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3603 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3605 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3607 TreeSplitter.Visible := isVisible;
3608 CabinetPanel.Visible := isVisible;
3609 GikoDM.CabinetVisibleAction.Checked := isVisible;
3612 procedure TGikoForm.SelectListItem(List: TList);
3614 TmpListItem: TListItem;
3618 TmpListItem := ListView.Selected;
3619 while TmpListItem <> nil do begin
3620 List.Add(TmpListItem.Data);
3621 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3626 procedure TGikoForm.FormResize(Sender: TObject);
3629 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3630 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3632 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3633 if GikoSys.Setting.ListWidthState = glsMin then begin
3634 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3635 ViewPanel.Width := ThreadMainPanel.Width - 80;
3638 if GikoSys.Setting.ListHeightState = glsMin then begin
3639 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3640 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3644 FIsIgnoreResize := rtResizing;
3645 PostMessage( Handle, USER_RESIZED, 0, 0 );
3650 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3655 idx := BrowserTab.TabIndex;
3656 FTabHintIndex := -1;
3657 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3658 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3660 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3661 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3662 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3665 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3667 if( FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i]) ) then
3668 FActiveContent := nil;
3669 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3670 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3672 FBrowsers.Move(j, BROWSER_COUNT - 1);
3674 BrowserTab.Tabs.BeginUpdate;
3676 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3677 if ( BrowserTab.Tabs.Count - 1 = i ) and
3678 ( BrowserTab.TabRect(i).Left
3679 <= BrowserTab.DisplayRect.Left ) then begin
3680 BrowserTab.ScrollTabs(-1);
3682 BrowserTab.Tabs.Delete(i);
3683 if idx > i then begin
3684 BrowserTab.TabIndex := idx - 1;
3686 if BrowserTab.Tabs.Count -1 >= idx then
3687 BrowserTab.TabIndex := idx
3689 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3692 BrowserTab.Tabs.EndUpdate;
3694 if BrowserTab.Tabs.Count = 0 then begin
3695 BrowserNullTab.Thread := nil;
3697 if(BrowserTab.TabIndex <> -1) and
3698 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3699 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3700 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3701 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3703 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3707 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3708 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3709 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3710 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3712 if( FActiveContent = nil) then
3713 BrowserTab.OnChange(nil);
3718 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3723 idx := BrowserTab.TabIndex;
3724 FTabHintIndex := -1;
3725 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3726 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3728 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3729 doc := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser.Document;
3730 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := doc.Body.ScrollTop;
3734 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ScrollTop := 0;
3736 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[i])) then
3737 FActiveContent := nil;
3738 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser <> nil then begin
3739 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser);
3741 FBrowsers.Move(j, BROWSER_COUNT - 1);
3743 BrowserTab.Tabs.BeginUpdate;
3745 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Free;
3746 if ( BrowserTab.Tabs.Count - 1 = i ) and
3747 ( BrowserTab.TabRect(i).Left
3748 <= BrowserTab.DisplayRect.Left ) then begin
3749 BrowserTab.ScrollTabs(-1);
3751 BrowserTab.Tabs.Delete(i);
3752 if idx > i then begin
3753 BrowserTab.TabIndex := idx - 1;
3755 if BrowserTab.Tabs.Count -1 >= idx then
3756 BrowserTab.TabIndex := idx
3758 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3761 BrowserTab.Tabs.EndUpdate;
3763 if(BrowserTab.TabIndex <> -1) and
3764 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3765 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3766 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3767 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3769 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3773 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3774 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3775 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3776 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3779 if( FActiveContent = nil) then
3780 BrowserTab.OnChange(nil);
3785 function TGikoForm.Hook(var Message: TMessage): Boolean;
3787 //
\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Ì
3788 //
\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ð
3792 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3794 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3798 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3800 ItemRoundPMenu.Visible := (GetActiveList is TBoard);
3801 ItemReservPMenu.Visible := (GetActiveList is TBoard);
3802 LPMSep01.Visible := (GetActiveList is TBoard);
3803 ListRoundPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3804 ListReservPMenu.Visible := (GetActiveList is TCategory);// or (GetActiveList is TBoard);
3805 LPMSep02.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3806 KidokuPMenu.Visible := (GetActiveList is TBoard);
3807 MidokuPMenu.Visible := (GetActiveList is TBoard);
3808 UrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3809 NameUrlCopyPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3810 AllSelectPMenu.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3811 LPMSep05.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3812 DeletePMenu.Visible := (GetActiveList is TBoard);
3813 LPMSep06.Visible := (GetActiveList is TCategory) or (GetActiveList is TBoard);
3814 BoardFavoriteAddMenu.Visible := (GetActiveList is TCategory);
3815 ThreadFavoriteAddMenu.Visible := (GetActiveList is TBoard);
3817 AddRoundNameMenu(ItemReservPMenu);
3818 AddRoundNameMenu(ListReservPMenu);
3821 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3823 FClickNode := TreeView.Selected;
3824 if FClickNode = nil then begin
3825 TreeSelectThreadPupupMenu.Visible := False;
3826 TreeSelectBoardPupupMenu.Visible := False;
3827 TPMSep01.Visible := False;
3828 TreeSelectURLPupupMenu.Visible := False;
3829 TreeSelectNamePupupMenu.Visible := False;
3830 TreeSelectNameURLPupupMenu.Visible := False;
3831 TreeSelectFavoriteAddPupupMenu.Visible := False;
3832 TreeSelectLogDeleteSeparator.Visible := False;
3833 TreeSelectLogDeletePopupMenu.Visible := False;
3834 end else if TObject(FClickNode.Data) is TBoard then begin
3835 TreeSelectThreadPupupMenu.Visible := False;
3836 TreeSelectBoardPupupMenu.Visible := True;
3837 TPMSep01.Visible := True;
3838 TreeSelectURLPupupMenu.Visible := True;
3839 TreeSelectNamePupupMenu.Visible := True;
3840 TreeSelectNameURLPupupMenu.Visible := True;
3841 TreeSelectFavoriteAddPupupMenu.Visible := True;
3842 TreeSelectLogDeleteSeparator.Visible := False;
3843 TreeSelectLogDeletePopupMenu.Visible := False;
3844 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3845 TreeSelectThreadPupupMenu.Visible := False;
3846 TreeSelectBoardPupupMenu.Visible := True;
3847 TPMSep01.Visible := True;
3848 TreeSelectURLPupupMenu.Visible := True;
3849 TreeSelectNamePupupMenu.Visible := True;
3850 TreeSelectNameURLPupupMenu.Visible := True;
3851 TreeSelectFavoriteAddPupupMenu.Visible := True;
3852 TreeSelectLogDeleteSeparator.Visible := False;
3853 TreeSelectLogDeletePopupMenu.Visible := False;
3854 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3855 TreeSelectThreadPupupMenu.Visible := True;
3856 TreeSelectBoardPupupMenu.Visible := False;
3857 TPMSep01.Visible := True;
3858 TreeSelectURLPupupMenu.Visible := True;
3859 TreeSelectNamePupupMenu.Visible := True;
3860 TreeSelectNameURLPupupMenu.Visible := True;
3861 TreeSelectFavoriteAddPupupMenu.Visible := True;
3862 TreeSelectLogDeleteSeparator.Visible := True;
3863 TreeSelectLogDeletePopupMenu.Visible := True;
3864 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3865 TreeSelectThreadPupupMenu.Visible := True;
3866 TreeSelectBoardPupupMenu.Visible := False;
3867 TPMSep01.Visible := True;
3868 TreeSelectURLPupupMenu.Visible := True;
3869 TreeSelectNamePupupMenu.Visible := True;
3870 TreeSelectNameURLPupupMenu.Visible := True;
3871 TreeSelectFavoriteAddPupupMenu.Visible := True;
3872 TreeSelectLogDeleteSeparator.Visible := True;
3873 TreeSelectLogDeletePopupMenu.Visible := True;
3874 end else if (TObject(FClickNode.Data) is TCategory) then begin
3875 TreeSelectThreadPupupMenu.Visible := False;
3876 TreeSelectBoardPupupMenu.Visible := False;
3877 TPMSep01.Visible := False;
3878 TreeSelectURLPupupMenu.Visible := False;
3879 TreeSelectNamePupupMenu.Visible := True;
3880 TreeSelectNameURLPupupMenu.Visible := False;
3881 TreeSelectFavoriteAddPupupMenu.Visible := False;
3882 TreeSelectLogDeleteSeparator.Visible := False;
3883 TreeSelectLogDeletePopupMenu.Visible := False;
3884 end else if FClickNode.IsFirstNode then begin
3885 TreeSelectThreadPupupMenu.Visible := False;
3886 TreeSelectBoardPupupMenu.Visible := False;
3887 TPMSep01.Visible := False;
3888 TreeSelectURLPupupMenu.Visible := False;
3889 TreeSelectNamePupupMenu.Visible := True;
3890 TreeSelectNameURLPupupMenu.Visible := False;
3891 TreeSelectFavoriteAddPupupMenu.Visible := False;
3892 TreeSelectLogDeleteSeparator.Visible := False;
3893 TreeSelectLogDeletePopupMenu.Visible := False;
3895 TreeSelectThreadPupupMenu.Visible := False;
3896 TreeSelectBoardPupupMenu.Visible := False;
3897 TPMSep01.Visible := False;
3898 TreeSelectURLPupupMenu.Visible := False;
3899 TreeSelectNamePupupMenu.Visible := False;
3900 TreeSelectNameURLPupupMenu.Visible := False;
3901 TreeSelectFavoriteAddPupupMenu.Visible := False;
3902 TreeSelectLogDeleteSeparator.Visible := False;
3903 TreeSelectLogDeletePopupMenu.Visible := False;
3907 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3908 var ppDisp: IDispatch; var Cancel: WordBool);
3917 threadItem: TThreadItem;
3921 if (IHTMLDocument2(TWebBrowser(Sender).Document).activeElement <> nil) then begin
3922 Text := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerText;
3923 Html := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement.Get_outerHTML;
3924 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3925 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3926 if GikoSys.Setting.ResAnchorJamp then begin
3927 Text := ZenToHan(Trim(Text));
3929 if(AnsiPos('>>', Text) = 1) then begin
3930 //Text := Copy(Text, 3, Length(Text) - 2);
3933 //Text := Copy(Text, 2, Length(Text) - 1);
3937 if AnsiPos('-', Text) <> 0 then begin
3938 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3939 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3940 wkIntTo := StrToIntDef(Text, 0);
3941 if wkIntTo < wkIntSt then
3944 wkIntSt := StrToIntDef(Text, 0);
3947 if wkIntSt <> 0 then begin
3948 FActiveContent.IDAnchorPopup('');
3949 BrowserMovement(IntToStr(wkIntSt));
3955 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3957 URL := GikoSys.GetHRefText(Html);
3958 URL := GikoSys.HTMLDecode(URL);
3959 if AnsiPos('BE:', URL) = 1 then begin
3960 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3961 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3962 threadItem := FActiveContent.Thread;
3963 if threadItem = nil then Exit;
3964 URL := BE_PHP_URL + BNum + '&u=d'
3965 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3968 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3969 ( AnsiPos('ftp://', URL) = 1) then begin
3970 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3971 if GikoSys.Setting.LinkAddAddressBar then begin
3972 idx := AddressComboBox.Items.IndexOf(URL);
3973 if idx = -1 then begin
3974 AddressComboBox.Items.Insert(0, URL);
3975 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3976 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3978 AddressComboBox.Items.Delete(idx);
3979 AddressComboBox.Items.Insert(0, URL);
3989 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3991 if Mouse.Capture <> 0 then
3993 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3994 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3995 FBrowserSizeWidth := ViewPanel.Width;
3997 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3998 FBrowserSizeHeight := ViewPanel.Height;
4000 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4001 if ViewPanel.Width < 2 then begin
4002 ViewPanel.Width := 1;
4003 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4004 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4005 GikoSys.Setting.ListWidthState := glsMax;
4006 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4007 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4008 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4009 GikoSys.Setting.ListWidthState := glsMin;
4011 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4012 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4013 GikoSys.Setting.ListWidthState := glsNormal;
4016 if ViewPanel.Height < 2 then begin
4017 ViewPanel.Height := 1;
4018 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4019 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4020 GikoSys.Setting.ListHeightState := glsMax;
4021 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4022 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4023 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4024 GikoSys.Setting.ListHeightState := glsMin;
4026 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4027 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4028 GikoSys.Setting.ListHeightState := glsNormal;
4031 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4032 FBrowserSizeHeight := ViewPanel.Height
4033 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4034 FBrowserSizeWidth := ViewPanel.Width;}
4037 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4042 BrowserTab.Tabs.BeginUpdate;
4044 if not BrowserTab.Dragging then begin
4045 FTabHintIndex := -1;
4046 BrowserTab.Hint := '';
4047 idx := BrowserTab.TabIndex;
4048 if idx = -1 then begin
4049 SetContent(BrowserNullTab);
4051 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4052 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4053 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4055 FBrowsers.Move(j ,0);
4057 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4058 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4059 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4060 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4062 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4063 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4064 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4068 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4069 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4070 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4072 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4073 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4074 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4076 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4077 AddressComboBox.Text := GetActiveContent.URL;
4079 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4080 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4083 GikoDM.SetFocusForBrowserAction.Execute;
4087 BrowserTab.Tabs.EndUpdate;
4092 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4093 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4099 if Button = mbMiddle then begin
4100 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4103 p := BrowserTab.ScreenToClient(p);
4104 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4106 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4107 end else if Button = mbLeft then begin
4108 FDragWFirst := true;
4109 FMouseDownPos.X := X;
4110 FMouseDownPos.Y := Y;
4115 procedure TGikoForm.SetBrowserTabState;
4117 CoolBand: TCoolBand;
4119 BrowserBottomPanel.AutoSize := False;
4120 if GikoSys.Setting.BrowserTabVisible then begin
4122 BrowserTab.Tabs.BeginUpdate;
4124 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4125 BrowserTab.Style := tsTabs;
4126 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4127 BrowserTab.TabPosition := tpTop
4129 BrowserTab.TabPosition := tpBottom;
4130 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4131 BrowserTab.TabPosition := tpTop;
4132 BrowserTab.Style := tsButtons;
4134 BrowserTab.TabPosition := tpTop;
4135 BrowserTab.Style := tsFlatButtons
4138 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4139 BrowserTab.Parent := BrowserTabToolBar;
4140 BrowserBottomPanel.Hide;
4141 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4142 if CoolBand <> nil then
4143 CoolBand.Visible := True;
4145 BrowserTab.Parent := BrowserBottomPanel;
4146 BrowserTab.Top := 0;
4147 BrowserTab.Left := 0;
4148 BrowserBottomPanel.Show;
4149 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4150 if CoolBand <> nil then
4151 CoolBand.Visible := False;
4154 BrowserTab.Tabs.EndUpdate;
4158 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4159 if CoolBand <> nil then
4160 CoolBand.Visible := False;
4161 BrowserBottomPanel.Visible := False;
4162 GikoDM.AllTabCloseAction.Execute;
4166 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4167 Y: Integer; State: TDragState; var Accept: Boolean);
4171 idx := BrowserTab.IndexOfTabAt(X, Y);
4172 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4175 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4180 idx := BrowserTab.IndexOfTabAt(X, Y);
4182 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4185 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4186 Shift: TShiftState; X, Y: Integer);
4189 ThreadItem: TThreadItem;
4192 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4194 if ( ssLeft in Shift ) and ( BrowserTab.Style = tsTabs ) then begin
4195 if FDragWFirst = false then begin
4196 FDragWFirst := true;
4198 BrowserTab.EndDrag(false);
4199 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4200 FDragWFirst := false;
4203 BrowserTab.EndDrag(false);
4204 FDragWFirst := false;
4207 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4208 Application.CancelHint;
4209 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4210 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4211 BrowserTab.Hint := ThreadItem.Title;
4212 Application.ShowHint := True;
4214 BrowserTab.Hint := '';
4215 Application.ShowHint := True;
4217 FTabHintIndex := TabIdx;
4222 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4223 const pDisp: IDispatch; var URL: OleVariant);
4225 FDispHtmlDocument: DispHTMLDocument;
4226 BrowserRecord :TBrowserRecord;
4229 threadItem : TThreadItem;
4231 if TObject(Sender) is TWebBrowser then begin
4232 BrowserRecord := nil;
4233 if TWebBrowser(Sender) <> Browser then begin
4234 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4235 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4236 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4240 if BrowserRecord <> nil then begin
4241 if BrowserRecord.Event <> nil then
4242 BrowserRecord.Event.Free;
4243 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4244 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4245 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4246 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4249 if GetActiveContent <> nil then begin
4250 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4251 if FEvent <> nil then
4253 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4254 FEvent.OnContextMenu := OnDocumentContextMenu;
4255 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4257 if FEvent <> nil then begin
4265 if (BrowserRecord <> nil) and
4266 Assigned( BrowserRecord.Thread ) then begin
4267 threadItem := BrowserRecord.Thread;
4269 if (threadItem.JumpAddress > 0) then begin
4270 //if (BrowserRecord <> nil) and (Length( BrowserRecord.Movement ) > 0) then begin
4271 if threadItem.UnRead then begin
4272 threadItem.UnRead := False;
4276 //
\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®
4277 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4278 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4279 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4280 threadItem.JumpAddress := 0;
4282 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4285 end else if threadItem.UnRead then begin
4286 threadItem.UnRead := False;
4288 BrowserRecord.Move('new');
4290 end else if threadItem.ScrollTop <> 0 then begin
4292 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4293 doc.Body.ScrollTop := threadItem.ScrollTop;
4296 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4301 LockWindowUpdate(0);
4304 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4306 AddRoundNameMenu(RoundNamePopupMenu.Items);
4309 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4315 Item := TMenuItem.Create(Self);
4316 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4317 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4319 Item := TMenuItem.Create(Self);
4320 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4321 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4323 Item := TMenuItem.Create(Self);
4324 Item.Caption := '-';
4326 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4327 Item := TMenuItem.Create(Self);
4328 Item.Caption := RoundList.RoundNameList[i];
4329 Item.OnClick := SetSelectRoundName;
4334 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4336 threadItem : TThreadItem;
4338 if ParentName <> 'dummy1' then begin
4339 SetSelectItemRound(RoundFlag, RoundName);
4341 threadItem := GetActiveContent;
4342 if threadItem <> nil then begin
4343 threadItem.RoundName := RoundName;
4345 RoundList.RoundNameList.Add(RoundName);
4346 threadItem.Round := RoundFlag;
4351 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4356 List := TList.Create;
4358 SelectListItem(List);
4359 for i := 0 to List.Count - 1 do begin
4360 if TObject(List[i]) is TBoard then begin
4361 TBoard(List[i]).RoundName := RoundName;
4363 RoundList.RoundNameList.Add(RoundName);
4364 TBoard(List[i]).Round := RoundFlag;
4365 end else if TObject(List[i]) is TThreadItem then begin
4366 if TThreadItem(List[i]).IsLogFile then begin
4367 TThreadItem(List[i]).RoundName := RoundName;
4369 RoundList.RoundNameList.Add(RoundName);
4370 TThreadItem(List[i]).Round := RoundFlag;
4379 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4381 MenuItem: TMenuItem;
4383 if Sender is TMenuItem then begin
4384 MenuItem := TMenuItem(Sender);
4385 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4390 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4395 if CoolBar = nil then
4397 for i := 0 to CoolBar.Bands.Count - 1 do begin
4398 if CoolBar.Bands[i].Control = Control then begin
4399 Result := CoolBar.Bands[i];
4405 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4407 if BrowserTab.Parent = BrowserTabToolBar then
4408 BrowserTab.Width := BrowserTabToolBar.Width;
4411 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4416 procedure TGikoForm.SetMenuFont;
4418 // GikoSys.MenuFont(MenuToolBar.Font);
4419 // MenuToolBar.Buttons[0].AutoSize := False;
4420 // MenuToolBar.Buttons[0].AutoSize := True;
4421 // MenuToolBar.Font.Color := clMenuText;
4422 GikoSys.MenuFont(MainCoolBar.Font);
4423 MenuToolBar.Buttons[0].AutoSize := False;
4424 MenuToolBar.Buttons[0].AutoSize := True;
4425 MainCoolBar.AutoSize := False;
4426 MainCoolBar.AutoSize := True;
4428 GikoSys.MenuFont(ListCoolBar.Font);
4429 GikoSys.MenuFont(BrowserCoolBar.Font);
4430 // MenuToolBar.Font.Color := clMenuText;
4433 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4437 if FavoriteDM.Modified then begin
4440 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4441 NewMenu := TMenuItem.Create(MainMenu);
4442 NewMenu.Action := GikoDM.FavoriteAddAction;
4443 FavoriteMenu.Add(NewMenu);
4444 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4445 NewMenu := TMenuItem.Create(FavoriteMenu);
4446 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4447 FavoriteMenu.Add(NewMenu);
4448 //
\83Z
\83p
\83\8c\81[
\83^
4449 FavoriteMenu.InsertNewLineAfter(NewMenu);
4450 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4451 FavoriteDM.Modified := false;
4455 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4458 NewMenu: array of TMenuItem;
4460 SetLength(NewMenu, Node.Count);
4461 Node := Node.getFirstChild;
4463 while ( Node <> nil ) do begin
4464 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4465 NewMenu[i].AutoHotkeys := maAutomatic;
4466 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4467 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4469 if TObject(Node.Data) is TFavoriteFolder then begin
4470 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4471 CreateFavMenu(Node, NewMenu[i]);
4472 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4473 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4474 NewMenu[i].OnClick := FavoriteClick;
4475 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4476 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4477 NewMenu[i].OnClick := FavoriteClick;
4480 Node := Node.getNextSibling;
4482 MenuItem.Add(NewMenu);
4485 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4487 Dlg : TFavoriteAddDialog;
4493 if Item is TFavoriteBoardItem then
4494 Item := TFavoriteBoardItem( Item ).Item
4495 else if Item is TFavoriteThreadItem then
4496 Item := TFavoriteThreadItem( Item ).Item;
4498 Node := FavoriteTreeView.Items.GetFirstNode;
4499 if Item is TBoard then begin
4500 ItemURL := TBoard( Item ).URL;
4501 while Node <> nil do begin
4503 if TObject( Data ) is TFavoriteBoardItem then begin
4504 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4505 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
4510 Node := Node.GetNext;
4512 Dlg := TFavoriteAddDialog.Create(Self);
4514 Dlg.SetBoard( TBoard( Item ) );
4519 end else if Item is TThreadItem then begin
4520 ItemURL := TThreadItem( Item ).URL;
4521 while Node <> nil do begin
4523 if TObject( Data ) is TFavoriteThreadItem then begin
4524 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4525 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
4530 Node := Node.GetNext;
4532 Dlg := TFavoriteAddDialog.Create(Self);
4534 Dlg.SetThreadItem( TThreadItem( Item ) );
4544 procedure TGikoForm.FavoriteClick(Sender: TObject);
4546 FavoriteClick( Sender, True );
4549 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4552 ThreadItem: TThreadItem;
4553 FavBoard: TFavoriteBoardItem;
4554 FavThread: TFavoriteThreadItem;
4558 if Sender is TFavoriteMenuItem then
4559 Item := TFavoriteMenuItem(Sender).Data
4560 else if Sender is TLinkToolButton then
4561 Item := TLinkToolButton(Sender).Data
4562 else if Sender is TTreeNode then
4563 Item := TTreeNode( Sender ).Data
4567 if TObject(Item) is TFavoriteBoardItem then begin
4568 FavBoard := TFavoriteBoardItem(Item);
4569 Board := FavBoard.Item;
4570 if Board <> nil then begin
4571 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4572 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4573 SelectTreeNode(Board, True);
4575 end else if TObject(Item) is TFavoriteThreadItem then begin
4576 FavThread := TFavoriteThreadItem(Item);
4577 ThreadItem := FavThread.Item;
4578 if ThreadItem = nil then
4581 InsertBrowserTab(ThreadItem, ActiveTab);
4583 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4584 if GikoSys.Setting.ListWidthState = glsMin then begin
4585 GikoDM.BrowserMaxAndFocusAction.Execute;
4588 if GikoSys.Setting.ListHeightState = glsMin then begin
4589 GikoDM.BrowserMaxAndFocusAction.Execute;
4595 procedure TGikoForm.BBSMenuItemOnClick(
4600 if Sender is TBBSMenuItem then
4601 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4605 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4607 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4610 //!
\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é)
4611 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4613 stRes, edRes : Int64;
4614 browserRec : TBrowserRecord;
4615 threadNumber : String;
4620 Thread.JumpAddress := 0;
4621 //
\83^
\83u
\82ð
\90¶
\90¬
4622 browserRec := InsertBrowserTab(Thread);
4623 if (browserRec <> nil) then begin
4624 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4625 threadNumber := ChangeFileExt(Thread.FileName, '');
4626 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4627 //
\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
4628 if (StrToInt(threadNumber) = stRes) then begin
4629 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4630 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4634 if ( stRes > 0 ) then begin
4635 Thread.JumpAddress := stRes;
4637 //
\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é
4638 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4639 DownloadContent(Thread);
4640 end else if (not browserRec.Repaint) then begin
4642 browserRec.Move(IntToStr(stRes));
4643 Thread.JumpAddress := 0;
4644 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4645 Thread.ScrollTop := doc.Body.ScrollTop;
4653 procedure TGikoForm.MoveToURL(const inURL: string);
4655 protocol, host, path, document, port, bookmark : string;
4656 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4658 BBSID, BBSKey: string;
4659 {tmpBoard,} Board: TBoard;
4660 ThreadItem: TThreadItem;
4663 tmpThread : TThreadItem;
4664 shiftDown : Boolean;
4668 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4669 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4672 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4673 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4674 if shiftDown then begin
4675 GikoSys.OpenBrowser(inURL, gbtUserApp);
4677 end else if ctrlDown then begin
4678 GikoSys.OpenBrowser(inURL, gbtIE);
4682 //=====
\83v
\83\89\83O
\83C
\83\93
4685 bi := Length(BoardGroups) - 1;
4686 for i := 1 to bi do begin
4687 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4688 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4691 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4692 Board := BBSsFindBoardFromURL( boardURL );
4695 if Board = nil then begin
4697 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4698 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4701 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4702 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4703 ShowBBSTree( BBSs[ 1 ] );
4706 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4707 if not Board.IsThreadDatRead then begin
4708 GikoSys.ReadSubjectFile( Board );
4712 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4713 if ThreadItem = nil then begin
4714 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4715 ThreadItem := tmpThread;
4716 Board.Insert( 0, ThreadItem );
4717 if ActiveList is TBoard then begin
4718 if TBoard(ActiveList) = Board then
4719 ListView.Items.Count := ListView.Items.Count + 1;
4724 OpenThreadItem(ThreadItem, inURL);
4731 Board := BBSsFindBoardFromURL(
4732 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4734 if Board <> nil then begin
4735 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4736 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4737 SelectTreeNode( Board, True );
4745 // 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¢
4749 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4750 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4751 Board := BBSsFindBoardFromURL( boardURL );
4752 if Board = nil then begin
4753 //
\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
4754 GikoSys.OpenBrowser(inURL, gbtUserApp);
4757 //
\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é
4759 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4760 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4761 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4762 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4763 GikoSys.OpenBrowser(inURL, gbtUserApp);
4768 if not Board.IsThreadDatRead then
4769 GikoSys.ReadSubjectFile(Board);
4770 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4771 ThreadItem := Board.FindThreadFromURL( URL );
4772 //
\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)
4773 if ThreadItem = nil then begin
4774 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4777 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4778 if ThreadItem = nil then begin
4779 ThreadItem := TThreadItem.Create( nil, Board, URL );
4780 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4781 Board.Insert(0, ThreadItem);
4782 if ActiveList is TBoard then begin
4783 if TBoard(ActiveList) = Board then
4784 ListView.Items.Count := ListView.Items.Count + 1;
4787 //
\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é
4788 if not ThreadItem.IsLogFile then begin
4789 if AnsiPos(Host, Board.URL) = 0 then
4790 ThreadItem.DownloadHost := Host
4792 ThreadItem.DownloadHost := '';
4794 OpenThreadItem(ThreadItem, inURL);
4798 Board := BBSsFindBoardFromURL( inURL );
4799 if Board = nil then begin
4800 GikoSys.OpenBrowser(inURL, gbtAuto);
4802 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4803 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4804 SelectTreeNode( Board, True );
4809 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4811 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4812 CoolBarResized( Sender, MainCoolBar );
4815 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4816 Shift: TShiftState);
4818 if Key = VK_RETURN then
4819 GikoDM.MoveToAction.Execute;
4822 procedure TGikoForm.BrowserEnter(Sender: TObject);
4824 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4827 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4829 CDS:PCopyDataStruct;
4833 CDS := Message.CopyDataStruct;
4834 GetMem(PC, CDS^.cbData);
4836 lstrcpy(PC,CDS^.lpData);
4837 SetString(sURL, PC,lstrlen(PC));
4842 Message.Result := 1;
4845 procedure TGikoForm.WndProc(var Message: TMessage);
4847 senderBrowser : TWebBrowser;
4853 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4856 if Message.WParam = SC_MINIMIZE then
4859 TreeClick( TreeView.Selected );
4866 USER_DOCUMENTCOMPLETE:
4867 if (Message.WParam <> 0) and
4868 (TObject(Message.WParam) is TWebBrowser) then begin
4869 senderBrowser := TWebBrowser( Message.WParam );
4870 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4879 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4884 //
\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Í
4885 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4886 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4887 if Msg.CharCode in [VK_BACK] then begin
4888 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4889 if Msg.KeyData > 0 then begin
4892 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4896 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4897 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4900 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4903 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4904 if Msg.CharCode in [VK_BACK] then begin
4905 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4906 if Msg.KeyData > 0 then begin
4909 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4912 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4915 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4919 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4923 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4929 HtmlFileName: string;
4933 TargetFrameName: OleVariant;
4934 PostData: OleVariant;
4935 Headers: OleVariant;
4936 WindowHeight: Integer;
4937 WindowWidth: Integer;
4941 Protocol, Host, Path, Document, Port, Bookmark: string;
4943 PreviewTimer.Enabled := False;
4947 case GikoSys.Setting.PreviewSize of
4954 WindowHeight := 192;
4958 WindowHeight := 384;
4962 WindowHeight := 480;
4964 else begin //gpsMedium
4966 WindowHeight := 288;
4970 ARect := Rect(0, 0, WindowWidth, WindowHeight);
4972 case GikoSys.Setting.PopupPosition of
4973 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4974 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4975 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4976 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4977 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4978 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4979 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4980 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4981 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Ó
4984 html := '<html><head>'#13#10
4986 + 'function init() {'#13#10
4987 + ' if ((document.body.clientHeight >= Image1.height) && (document.body.clientWidth >= Image1.width)) {'#13#10
4989 + ' var dh, ih;'#13#10
4990 + ' dh = document.body.clientWidth / document.body.clientHeight;'#13#10
4991 + ' ih = Image1.width / Image1.height;'#13#10
4992 + ' if (document.body.clientWidth < document.body.clientHeight) {'#13#10
4993 + ' if (ih > dh)'#13#10
4994 + ' Image1.width = document.body.clientWidth;'#13#10
4996 + ' Image1.height = document.body.clientHeight;'#13#10
4998 + ' if (ih < dh)'#13#10
4999 + ' Image1.height = document.body.clientHeight;'#13#10
5001 + ' Image1.width = document.body.clientWidth;'#13#10
5004 + ' Message.style.display = "none";'#13#10
5008 + '<body topmargin="0" leftmargin="0" style="border-width: 1px; overflow:hidden; border-style: solid;" onLoad="init()">'#13#10
5009 + '<div align="center" id="Message">
\83v
\83\8c\83r
\83\85\81[
\8dì
\90¬
\92\86</div>'#13#10
5010 + '<div align="center"><img name="Image1" border="0" src="%ImageURL%"></div>'#13#10
5012 sl := TStringList.Create;
5015 HtmlFileName := GikoSys.GetAppDir + HTML_FILE_NAME;
5016 sl.Text := AnsiReplaceStr(html, '%ImageURL%', FPreviewURL);
5017 sl.SaveToFile(HtmlFileName);
5024 NavURL := HtmlFileName;
5026 TargetFrameName := '';
5029 GikoSys.ParseURI(FPreviewURL, Protocol, Host, Path, Document, Port, Bookmark);
5030 Referer := Protocol + '://' + Host;
5032 Referer := Referer + ':' + Port;
5033 Referer := Referer + Path;
5034 Headers := 'Referer: ' + Referer;
5035 FPreviewBrowser.Navigate(NavURL, Flags, TargetFrameName, PostData, Headers);
5036 if ARect.Top + WindowHeight > Screen.DesktopHeight then
5037 ARect.Top := Screen.DesktopHeight - WindowHeight;
5038 if ARect.Left + WindowWidth > Screen.DesktopWidth then
5039 ARect.Left := Screen.DesktopWidth - WindowWidth;
5040 if ARect.Left < Screen.DesktopLeft then ARect.Left := Screen.DesktopLeft;
5041 if ARect.Bottom < Screen.DesktopTop then ARect.Bottom := Screen.DesktopTop;
5043 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST, ARect.Left, ARect.Top, WindowWidth, WindowHeight, SWP_NOACTIVATE or SWP_HIDEWINDOW);
5044 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
5045 FPreviewBrowserRect := ARect;
5046 // Style := GetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE);
5047 // SetWindowLong(FPreviewBrowser.Handle, GWL_EXSTYLE, Style xor WS_EX_APPWINDOW);
5051 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
5056 if PreviewTimer.Enabled then
5057 PreviewTimer.Enabled := False;
5058 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
5059 FHint.ReleaseHandle;
5063 if (FPreviewBrowser <> nil)
5064 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
5065 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
5066 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
5067 Pos := Mouse.CursorPos;
5068 Pos.X := Pos.X + Left;
5069 Pos.Y := Pos.Y + Top;
5070 if (FPreviewBrowserRect.Left > Pos.X) or
5071 (FPreviewBrowserRect.Right < Pos.X) or
5072 (FPreviewBrowserRect.Top > Pos.Y) or
5073 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
5074 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
5078 Message.Result := 1;
5081 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
5083 GikoDM.MsgBarCloseAction.Execute;
5086 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
5088 Doc: IHtmlDocument2;
5089 Range: IHTMLTxtRange;
5092 ThreadItem: TThreadItem;
5095 FactiveContent.IDAnchorPopup('');
5096 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5097 if Assigned(Doc) then begin
5098 Range := Doc.selection.createRange as IHTMLTxtRange;
5099 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5100 s := ZenToHan(Trim(s));
5101 if GikoSys.IsNumeric(s) then begin
5103 ThreadItem := GetActiveContent;
5104 if ThreadItem <> nil then begin
5106 FHint.PopupType := gptThread;
5107 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5108 if FHint.ResCount <> 0 then
5119 procedure TGikoForm.ShowTextPopup;
5124 // if Trim(s) = '' then
5127 FHint.Font.Name := GikoSys.Setting.HintFontName;
5128 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5129 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5130 FHint.Color := GikoSys.Setting.HintBackColor;
5131 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5133 if FHint.PopupType = gptRaw then
5134 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5136 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5137 case GikoSys.Setting.PopupPosition of
5138 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5139 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5140 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5141 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5142 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5143 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5144 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5145 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5146 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Ó
5148 //FHint.ActivateHint(ARect, s);
5149 if FHint.PopupType = gptRaw then
5150 FHint.ActivateHint(ARect, FHint.Caption)
5152 FHint.ActivateHint(ARect, '');
5154 FHint.ReleaseHandle;
5159 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5161 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5162 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5164 if FTreeType = gttHistory then begin
5165 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5166 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5170 TreeView.Items.Clear;
5174 procedure TGikoForm.SetLinkBar;
5178 ToolButton: TLinkToolButton;
5179 MenuItem: TMenuItem;
5180 oldIgnoreResize : TResizeType;
5182 oldIgnoreResize := FIsIgnoreResize;
5183 FIsIgnoreResize := rtResizing;
5184 MainCoolBar.Bands.BeginUpdate;
5186 LinkBarPopupMenu.Items.Clear;
5187 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5188 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5189 LinkToolBar.Buttons[i].Free;
5190 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5191 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5192 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5193 ToolButton := TLinkToolButton.Create(LinkToolBar);
5194 // ToolButton.Parent := LinkToolBar;
5195 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5196 MenuItem := TMenuItem.Create(Self);
5197 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5198 LinkBarPopupMenu.Items.Add(MenuItem);
5199 ToolButton.MenuItem := MenuItem;
5200 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5201 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5202 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5203 ToolButton.OnClick := FavoriteClick;
5204 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5205 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5206 ToolButton.OnClick := FavoriteClick;
5208 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5209 ToolButton.Left := 10000;
5210 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5211 ToolButton.AutoSize := True;
5212 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5213 ToolButton.OnDragOver := FavoriteDragOver;
5214 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5215 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5216 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5217 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5218 //ToolButton.DragMode := dmAutomatic;
5219 ToolButton.DragMode := dmManual;
5220 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5222 LinkToolBar.InsertControl(ToolButton);
5227 { if LinkToolBar.ButtonCount = 0 then begin
5228 ToolButton := TLinkToolButton.Create(LinkToolBar);
5229 ToolButton.Style := tbsButton;
5230 ToolButton.ImageIndex := -1;
5231 ToolButton.Caption := '';
5232 LinkToolBar.InsertControl(ToolButton);
5235 MainCoolBar.Bands.EndUpdate;
5236 LoadCoolBarSettings;
5237 FIsIgnoreResize := oldIgnoreResize;
5241 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5249 if Sender = FavoriteTreeView then begin
5250 Node := FavoriteTreeView.GetNodeAt(X, Y);
5255 bound := Node.DisplayRect( False );
5256 height := bound.Bottom - bound.Top;
5257 if (bound.Top + height / 2) <= Y then
5258 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5263 if Node.IsFirstNode then
5268 if FDropSpaceNode <> nil then
5269 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5272 if Change then begin
5273 if FDropSpaceNode <> nil then
5274 FDropSpaceNode.Free;
5276 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5277 FDropSpaceNode.MoveTo( Node, naInsert );
5278 FDropSpaceNode.ImageIndex := -1;
5279 FDropSpaceNode.SelectedIndex := -1;
5283 if Source = FavoriteTreeView then begin
5284 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5289 end else if Source = BrowserTab then
5291 else if Source = ListView then
5293 else if Source is TLinkToolButton then
5295 else if Source = TreeView then
5301 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5304 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5307 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5309 // FDragging := true;
5312 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5314 SenderNode: TTreeNode;
5315 LinkToolButton: TLinkToolButton;
5318 LinkToolButton := TLinkToolButton( Sender );
5319 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5320 SenderNode.Selected := False;
5321 FavoriteDragDrop( SenderNode, Source );
5327 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5329 favButton : TLinkToolButton;
5330 favThreadItem : TFavoriteThreadItem;
5336 if Sender is TLinkToolButton then begin
5337 favButton := TLinkToolButton( Sender );
5338 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5339 favThreadItem := TFavoriteThreadItem( favButton.Data );
5340 if favThreadItem.Item <> nil then
5341 InsertBrowserTab( favThreadItem.Item, False );
5349 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5353 TToolButton( Sender ).DragMode := dmManual;
5354 if ssLeft in Shift then begin
5355 // 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)
5356 if FDragTime = 0 then begin
5357 FDragTime := GetTickCount();
5359 Now := GetTickCount();
5360 if (Now - FDragTime) > 500 then begin
5361 if FDragButton <> TToolButton( Sender ) then begin
5363 FDragButton := TToolButton( Sender );
5364 TToolButton(Sender).BeginDrag(false ,5);
5367 {$IF Defined(debug)}
5368 ShowMessage('Error');
5379 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5384 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5389 for i := 0 to ToolBar.ButtonCount - 1 do
5390 if ToolBar.Buttons[i].Visible then
5391 Result := Result + ToolBar.Buttons[i].Width;
5394 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5396 Control : TWinControl;
5399 Control := FindControl(BandInfo^.hwndChild);
5400 if Control = nil then
5403 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5404 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5405 idx := MainCoolBar.Bands[ i ].ID;
5409 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5410 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5411 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5412 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5413 BandInfo^.cxMinChild := 0;
5414 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5415 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5416 end else if Control = LinkToolBar then begin
5417 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5418 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5419 BandInfo^.cxMinChild := 0;
5420 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5421 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5422 end else begin // AddressToolBar
5423 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5424 BandInfo^.cxMinChild := 0;
5425 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5429 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5435 ChevronPopupMenu.Items.Clear;
5437 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5438 if MainCoolBar.Bands[ i ].Visible then begin
5439 if Idx = Int64(RebarChevron^.uBand) then begin
5446 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5447 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5449 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5450 ToolBarChevronMenu(StdToolBar);
5451 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5455 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5456 ChevronPopupMenu.Popup(p.x, p.y);
5460 procedure TGikoForm.MenuBarChevronMenu;
5461 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5467 for i := 0 to MenuItem.Count - 1 do begin
5469 if MenuItem[i] is TFavoriteMenuItem then begin
5470 Item := TFavoriteMenuItem.Create(Self);
5471 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5473 Item := TMenuItem.Create(Self);
5474 Item.Caption := MenuItem[i].Caption;
5475 Item.Action := MenuItem[i].Action;
5476 Item.ImageIndex := MenuItem[i].ImageIndex;
5477 Item.OnClick := MenuItem[i].OnClick;
5478 PopupItem.Add(Item);
5479 if MenuItem[i].Count > 0 then
5480 SetSubMenu(MenuItem[i], Item);
5489 ChevronPopupMenu.Items.Clear;
5490 ChevronPopupMenu.Images := MainMenu.Images;
5491 bw := GetWidthAllToolButton(MenuToolBar);
5492 if MenuToolBar.Width < bw then begin
5494 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5495 w := w + MenuToolBar.Buttons[i].Width;
5496 if MenuToolBar.Width <= w then begin
5497 Item := TMenuItem.Create(Self);
5498 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5499 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5500 ChevronPopupMenu.Items.Add(Item);
5501 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5507 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5508 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5513 if Assigned(PopupMenu.OnPopup) then
5514 PopupMenu.OnPopup(nil);
5515 for i := 0 to PopupMenu.Items.Count - 1 do begin
5517 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5518 Item := TFavoriteMenuItem.Create(Self);
5519 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5521 Item := TMenuItem.Create(Self);
5522 Item.Caption := PopupMenu.Items[i].Caption;
5523 Item.Action := PopupMenu.Items[i].Action;
5524 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5525 Item.OnClick := PopupMenu.Items[i].OnClick;
5526 PopupItem.Add(Item);
5535 ChevronPopupMenu.Items.Clear;
5536 ChevronPopupMenu.Images := ToolBar.HotImages;
5537 bw := GetWidthAllToolButton(ToolBar);
5538 if ToolBar.Width < bw then begin
5540 for i := 0 to ToolBar.ButtonCount - 1 do begin
5541 if ToolBar.Buttons[i].Visible then
5542 w := w + ToolBar.Buttons[i].Width;
5543 if ToolBar.Width <= w then begin
5544 if ToolBar.Buttons[i].Tag = 0 then begin
5545 Item := TMenuItem.Create(Self);
5546 if ToolBar.Buttons[i].Style = tbsSeparator then
5549 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5550 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5553 Item.Caption := ToolBar.Buttons[i].Caption;
5554 Item.Action := ToolBar.Buttons[i].Action;
5556 //Item.Visible := True;
5558 ChevronPopupMenu.Items.Add(Item);
5559 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5561 Item.OnClick := nil;
5562 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5570 procedure TGikoForm.LinkBarChevronMenu;
5575 Item: TFavoriteMenuItem;
5577 Button: TLinkToolButton;
5579 ChevronPopupMenu.Items.Clear;
5580 ChevronPopupMenu.Images := LinkToolBar.Images;
5581 bw := GetWidthAllToolButton(LinkToolBar);
5582 if LinkToolBar.Width < bw then begin
5584 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5585 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5586 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5587 w := w + LinkToolBar.Buttons[j].Width;
5588 if LinkToolBar.Width <= w then begin
5589 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5590 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5591 Item := TFavoriteMenuItem.Create(Self);
5592 if TObject(Button.Data) is TFavoriteFolder then begin
5593 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5594 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5595 Item.OnClick := FavoriteClick;
5596 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5597 Item.OnClick := FavoriteClick;
5599 Item.Data := Button.Data;
5600 Item.Caption := LinkToolBar.Buttons[j].Caption;
5601 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5602 ChevronPopupMenu.Items.Add(Item);
5613 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5614 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5615 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5617 \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É
5618 \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
5620 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5622 bandInfo : tagREBARBANDINFOA;
5623 pBandInfo : PReBarBandInfoA;
5630 pBandInfo := @bandInfo;
5631 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5632 bandInfo.cbSize := sizeof( bandInfo );
5633 bandInfo.hwndChild := h;
5634 bandInfo.cyMinChild := bar.Height;
5635 bar.OnBandInfo( nil, pBandInfo );
5636 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5638 for i := bar.Bands.Count - 1 downto 0 do begin
5639 if bar.Bands[ i ].Control.Handle = h then begin
5645 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5649 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5651 Control: TWinControl;
5654 Control := FindControl(BandInfo^.hwndChild);
5655 if Control = nil then
5658 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5659 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5660 idx := ListCoolBar.Bands[ i ].ID;
5664 if Control = ListToolBar then begin
5665 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5666 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5667 BandInfo^.cxMinChild := 0;
5668 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5669 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5671 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5672 BandInfo^.cxMinChild := 0;
5673 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5677 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5682 ChevronPopupMenu.Items.Clear;
5683 Idx := RebarChevron^.uBand;
5684 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5685 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5686 ToolBarChevronMenu(ListToolBar);
5689 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5690 ChevronPopupMenu.Popup(p.x, p.y);
5694 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5696 Control: TWinControl;
5699 Control := FindControl(BandInfo^.hwndChild);
5700 if Control = nil then
5703 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5704 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5705 idx := BrowserCoolBar.Bands[ i ].ID;
5709 if Control = BrowserToolBar then begin
5710 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5711 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5712 BandInfo^.cxMinChild := 0;
5713 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5714 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5716 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5717 BandInfo^.cxMinChild := 0;
5718 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5722 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5727 ChevronPopupMenu.Items.Clear;
5728 Idx := RebarChevron^.uBand;
5729 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5730 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5731 ToolBarChevronMenu(BrowserToolBar)
5734 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5735 ChevronPopupMenu.Popup(p.x, p.y);
5739 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5741 if Column^.iImage = -1 then begin
5742 Column^.mask := Column^.mask or LVCF_FMT;
5744 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5745 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5749 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5754 for i := bar.ButtonCount - 1 downto 0 do begin
5755 if bar.Buttons[ i ].Action = action then begin
5756 Result := bar.Buttons[ i ];
5762 procedure TGikoForm.SetToolBarPopup;
5765 aIEButton : TToolButton;
5766 aCabinetBBSButton : TToolButton;
5767 aResRangeButton : TToolButton;
5768 aThreadRangeButton: TToolButton;
5770 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5772 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5773 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5774 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5775 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5776 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5778 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5779 if aIEButton <> nil then
5780 aIEButton.DropdownMenu := BrowserPopupMenu;
5781 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5782 if aCabinetBBSButton <> nil then
5783 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5784 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5785 if aResRangeButton <> nil then
5786 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5787 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5788 if aThreadRangeButton <> nil then
5789 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5792 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5793 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5797 // browserPos : TPoint;
5801 Wnd := WindowFromPoint(Mouse.CursorPos);
5803 if WheelDelta > 0 then
5808 if (Wnd = BrowserTab.Handle) or
5809 (Wnd = BrowserTab.Parent.Handle) then begin
5810 BrowserTab.ScrollTabs(Delta);
5812 if FIsHandledWheel then begin
5813 FIsHandledWheel := False;
5816 FIsHandledWheel := True;
5817 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5818 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5820 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5828 procedure TGikoForm.SetSelectWord( const text : string );
5831 if Length( text ) = 0 then
5833 GikoDM.AllItemAction.Checked := True;
5834 GikoDM.LogItemAction.Checked := False;
5835 GikoDM.NewItemAction.Checked := False;
5837 //
\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é
5838 if GikoDM.AllItemAction.Checked then
5839 GikoDM.AllItemAction.Checked := False;
5840 if GikoDM.LogItemAction.Checked then
5841 GikoDM.LogItemAction.Checked := False;
5842 if GikoDM.NewItemAction.Checked then
5843 GikoDM.NewItemaction.Checked := False;
5846 if Length( text ) = 0 then
5847 SetListViewType( gvtAll )
5849 SetListViewType( gvtUser, text, false );
5853 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5856 SetSelectWord( SelectComboBox.Text );
5860 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5861 Shift: TShiftState);
5869 if Key = VK_Return then
5872 end else if Key = 229 then begin
5873 if GikoSys.Setting.UseUndecided then begin
5874 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5875 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5876 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5877 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5878 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5879 SetLength(Str, Len);
5880 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5881 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5882 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5884 Str := SelectComboBox.Text + Str;
5888 end else if Length( SelectComboBox.Text ) = 0 then
5890 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5891 *
\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
5892 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5895 //
\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é
5896 if GikoDM.AllItemAction.Checked then
5897 GikoDM.AllItemAction.Checked := False;
5898 if GikoDM.LogItemAction.Checked then
5899 GikoDM.LogItemAction.Checked := False;
5900 if GikoDM.NewItemAction.Checked then
5901 GikoDM.NewItemaction.Checked := False;
5906 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5911 if Length( SelectComboBox.Text ) = 0 then
5913 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5914 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5919 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5920 procedure TGikoForm.ModifySelectList;
5927 if not SelectComboBoxPanel.Visible then
5930 if Length( SelectComboBox.Text ) > 0 then
5932 oldText := SelectComboBox.Text;
5933 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5935 GikoSys.Setting.SelectTextList.Delete( idx );
5936 idx := SelectComboBox.Items.IndexOf( oldText );
5938 SelectComboBox.Items.Delete( idx );
5939 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5940 SelectComboBox.Items.Insert( 0, oldText );
5941 SelectComboBox.Text := oldText;
5949 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5950 Shift: TShiftState; X, Y: Integer);
5955 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5958 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5959 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5960 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5962 If w <= 50 Then Begin
5963 //
\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
5964 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5965 pos.X := pos.X + (50 - w);
5967 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5971 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5972 //If SelectComboBox.Width <> w Then Begin
5973 If SelectComboBoxPanel.Width <> w Then Begin
5974 SelectComboBoxPanel.Width := w;
5975 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5976 GikoSys.Setting.SelectComboBoxWidth := w;
5977 DraggingSelectComboBoxPosition := pos;
5979 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5980 ResetBandInfo( ListCoolBar, ListToolBar );
5986 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5987 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5991 IsDraggingSelectComboBox := True;
5994 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5998 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5999 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6001 IsDraggingSelectComboBox := False;
6005 procedure TGikoForm.StatusBarResize(Sender: TObject);
6007 StatusBar.Panels[1].Width := StatusBar.Width -
6008 StatusBar.Panels[0].Width -
6009 StatusBar.Panels[THREADSIZE_PANEL].Width -
6010 StatusBar.Panels[NGWORDNAME_PANEL].Width;
6012 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
6015 if (Length( SelectComboBox.Text ) = 0) or
6016 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
6018 SelectComboBox.Text := '';
6019 SelectComboBox.Color := clWindow;
6024 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
6027 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
6030 if TObject(SenderNode.Data) is TFavoriteFolder then
6031 SourceNode.MoveTo(SenderNode, naAddChild)
6033 SourceNode.MoveTo(SenderNode, naInsert);
6037 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
6041 FavoBoardItem: TFavoriteBoardItem;
6042 FavoThreadItem: TFavoriteThreadItem;
6044 ThreadItem: TThreadItem;
6047 if (SenderNode = nil) or (Source = nil) then
6050 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6051 FavNode := SenderNode.Parent
6053 FavNode := SenderNode;
6057 if Source is TBoard then begin
6058 Board := TBoard( Source );
6059 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
6060 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
6061 Node.ImageIndex := 15;
6062 Node.SelectedIndex := 15;
6063 end else if Source is TFavoriteBoardItem then begin
6064 FavoBoardItem := TFavoriteBoardItem( Source );
6065 Board := FavoBoardItem.Item;
6066 if Board <> nil then
6067 if not Board.IsThreadDatRead then
6068 GikoSys.ReadSubjectFile(Board);
6069 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
6070 Node.ImageIndex := 15;
6071 Node.SelectedIndex := 15;
6072 end else if Source is TThreadItem then begin
6073 ThreadItem := TThreadItem( Source );
6074 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6075 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6076 Node.ImageIndex := 16;
6077 Node.SelectedIndex := 16;
6078 end else if Source is TBrowserRecord then begin
6079 ThreadItem := TBrowserRecord( Source ).Thread;
6080 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
6081 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
6082 Node.ImageIndex := 16;
6083 Node.SelectedIndex := 16;
6084 end else if Source is TFavoriteThreadItem then begin
6085 FavoThreadItem := TFavoriteThreadItem( Source );
6086 ThreadItem := FavoThreadItem.Item;
6087 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
6088 Node.ImageIndex := 16;
6089 Node.SelectedIndex := 16;
6092 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6094 FavoriteMoveTo( SenderNode, Node );
6098 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6101 SourceNode: TTreeNode;
6102 LinkToolButton: TLinkToolButton;
6105 if SenderNode = nil then
6108 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6109 if FDropSpaceNode <> nil then
6110 SenderNode := FDropSpaceNode;
6112 if Source = FavoriteTreeView then begin
6113 SourceNode := FavoriteTreeView.Selected;
6114 FavoriteMoveTo( SenderNode, SourceNode );
6115 end else if Source is TLinkToolButton then begin
6116 LinkToolButton := TLinkToolButton( Source );
6117 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6118 FavoriteMoveTo( SenderNode, SourceNode );
6119 end else if Source = BrowserTab then begin
6120 idx := BrowserTab.TabIndex;
6121 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6122 end else if Source = ListView then begin
6123 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6124 end else if Source = TreeView then begin
6125 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6129 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6132 SenderNode: TTreeNode;
6135 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6136 if SenderNode <> nil then begin
6137 FavoriteDragDrop( SenderNode, Source );
6140 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6141 if FDropSpaceNode <> nil then begin
6143 FDropSpaceNode.Delete;
6145 FDropSpaceNode := nil;
6148 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6149 FavoriteDM.Modified := true;
6155 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6156 Node: TTreeNode; var S: String);
6158 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6159 FavoriteDM.Modified := true;
6161 FavoriteTreeView.ReadOnly := True;
6166 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6167 Shift: TShiftState);
6169 if not TTreeView(Sender).IsEditing then begin
6173 FClickNode := FavoriteTreeView.Selected;
6174 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6178 FClickNode := FavoriteTreeView.Selected;
6179 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6183 FavoriteClick( FavoriteTreeView.Selected );
6184 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6188 FClickNode := FavoriteTreeView.Selected;
6189 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6193 //
\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·
6194 if Key = VK_ESCAPE then begin
6195 if (TTreeView(Sender).Selected <> nil) then begin
6196 TTreeView(Sender).Selected.Text := FOrigenCaption;
6198 TTreeView(Sender).Selected.Focused := False;
6204 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6207 LinkToolButton: TLinkToolButton;
6210 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6212 FClickNode := FavoriteTreeView.Selected;
6214 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6216 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6217 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6218 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6219 FClickNode := FavoriteTreeView.Items[i];
6223 for i := 0 to FClickNode.Count - 1 do begin
6224 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6225 FClickNode := FClickNode.Item[i];
6232 if FClickNode = nil then begin
6233 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6234 FavoriteTreeDeletePopupMenu.Visible := False;
6235 FavoriteTreeRenamePopupMenu.Visible := False;
6236 FavoriteTreeNewFolderPopupMenu.Visible := False;
6237 FavoriteTreeURLCopyPopupMenu.Visible := False;
6238 FavoriteTreeNameCopyPopupMenu.Visible := False;
6239 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6240 FavoriteTreeReloadPopupMenu.Visible := False;
6241 FavoriteTreeLogDeletePopupMenu.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 := True;
6249 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6250 FavoriteTreeReloadPopupMenu.Visible := False;
6251 FavoriteTreeLogDeletePopupMenu.Visible := False;
6252 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6253 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6254 FavoriteTreeDeletePopupMenu.Visible := True;
6255 FavoriteTreeRenamePopupMenu.Visible := False;
6256 FavoriteTreeNewFolderPopupMenu.Visible := True;
6257 FavoriteTreeURLCopyPopupMenu.Visible := False;
6258 FavoriteTreeNameCopyPopupMenu.Visible := True;
6259 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6260 FavoriteTreeReloadPopupMenu.Visible := False;
6261 FavoriteTreeLogDeletePopupMenu.Visible := False;
6262 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6263 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6264 FavoriteTreeDeletePopupMenu.Visible := True;
6265 FavoriteTreeRenamePopupMenu.Visible := True;
6266 FavoriteTreeNewFolderPopupMenu.Visible := True;
6267 FavoriteTreeURLCopyPopupMenu.Visible := False;
6268 FavoriteTreeNameCopyPopupMenu.Visible := True;
6269 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6270 FavoriteTreeReloadPopupMenu.Visible := False;
6271 FavoriteTreeLogDeletePopupMenu.Visible := False;
6272 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6273 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6274 FavoriteTreeDeletePopupMenu.Visible := True;
6275 FavoriteTreeRenamePopupMenu.Visible := True;
6276 FavoriteTreeNewFolderPopupMenu.Visible := True;
6277 FavoriteTreeURLCopyPopupMenu.Visible := True;
6278 FavoriteTreeNameCopyPopupMenu.Visible := True;
6279 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6280 FavoriteTreeReloadPopupMenu.Visible := True;
6281 FavoriteTreeLogDeletePopupMenu.Visible := True;
6282 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6283 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6284 FavoriteTreeDeletePopupMenu.Visible := True;
6285 FavoriteTreeRenamePopupMenu.Visible := True;
6286 FavoriteTreeNewFolderPopupMenu.Visible := True;
6287 FavoriteTreeURLCopyPopupMenu.Visible := True;
6288 FavoriteTreeNameCopyPopupMenu.Visible := True;
6289 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6290 FavoriteTreeReloadPopupMenu.Visible := True;
6291 FavoriteTreeLogDeletePopupMenu.Visible := False;
6293 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6294 FavoriteTreeDeletePopupMenu.Visible := False;
6295 FavoriteTreeRenamePopupMenu.Visible := False;
6296 FavoriteTreeNewFolderPopupMenu.Visible := False;
6297 FavoriteTreeURLCopyPopupMenu.Visible := False;
6298 FavoriteTreeNameCopyPopupMenu.Visible := False;
6299 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6300 FavoriteTreeReloadPopupMenu.Visible := False;
6301 FavoriteTreeLogDeletePopupMenu.Visible := False;
6306 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6311 if not (TObject(node.Data) is TFavoriteFolder) then
6314 for i := 0 to node.Count - 1 do
6316 if TObject(node.Item[i].Data) is TFavoriteFolder then
6317 FavoriteBrowseFolder( node.Item[i] )
6318 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6319 FavoriteClick( node.Item[i], False );
6323 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6329 for i := 0 to Node.Count - 1 do begin
6330 if Node.Item[i].Data = FindPointer then begin
6331 Result := Node.Item[i];
6333 end else if Node.Item[i].Count > 0 then begin
6334 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6335 if Found <> nil then begin
6346 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6350 SenderNode: TTreeNode;
6354 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6355 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6356 SenderNode := FavoriteTreeView.Items[i];
6360 SenderNode.Selected := False;
6362 FavoriteDragDrop( SenderNode, Source );
6367 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6368 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6370 if FDragWFirst <> true then begin
6371 FDragWFirst := false;
6373 end else if (abs( X - FMouseDownPos.X ) < Mouse.DragThreshold)
6374 and (abs( Y - FMouseDownPos.Y ) < Mouse.DragThreshold) then begin
6378 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6379 if GikoSys.Setting.ListWidthState = glsMin then begin
6380 GikoDM.BrowserMaxAndFocusAction.Execute;
6383 if GikoSys.Setting.ListHeightState = glsMin then begin
6384 GikoDM.BrowserMaxAndFocusAction.Execute;
6390 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6391 Y: Integer; State: TDragState; var Accept: Boolean);
6394 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6398 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6402 if FDropSpaceNode <> nil then begin
6404 FDropSpaceNode.Delete;
6406 FDropSpaceNode := nil;
6408 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6409 FavoriteDM.Modified := true;
6415 procedure TGikoForm.ListCoolBarContextPopup(Sender: TObject;
6416 MousePos: TPoint; var Handled: Boolean);
6419 FToolBarSettingSender := tssList;
6420 MousePos := ListCoolBar.ClientToScreen( MousePos );
6421 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6425 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
6426 MousePos: TPoint; var Handled: Boolean);
6429 FToolBarSettingSender := tssMain;
6430 MousePos := MainCoolBar.ClientToScreen( MousePos );
6431 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6435 procedure TGikoForm.BrowserCoolBarContextPopup(Sender: TObject;
6436 MousePos: TPoint; var Handled: Boolean);
6439 FToolBarSettingSender := tssBrowser;
6440 MousePos := BrowserCoolBar.ClientToScreen( MousePos );
6441 MainCoolBarPopupMenu.Popup( MousePos.X, MousePos.Y );
6444 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6446 if FListViewBackGroundColor <> value then begin
6447 FListViewBackGroundColor := value;
6448 ListView.Color := FListViewBackGroundColor;
6451 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6453 threadItem : TThreadItem;
6457 if FClickNode = nil then Exit;
6459 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6461 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6462 if threadItem = nil then
6464 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6466 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6468 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6469 if boardItem = nil then
6471 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6477 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6478 MousePos: TPoint; var Handled: Boolean);
6482 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6483 if BrowserTab.TabIndex <> idx then begin
6484 BrowserTab.TabIndex := idx;
6485 BrowserTab.OnChange(nil);
6489 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6491 ThreadItem: TThreadItem;
6497 boardPlugIn : TBoardPlugIn;
6499 if Number = 0 then Exit;
6500 ThreadItem := GetActiveContent;
6502 if ThreadItem <> nil then begin
6503 //if ThreadItem.IsBoardPlugInAvailable then begin
6504 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6505 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6506 //boardPlugIn := ThreadItem.BoardPlugIn;
6507 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6509 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6510 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6511 //
\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
6512 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6514 FileName := ThreadItem.FilePath;
6515 tmp := GikoSys.ReadThreadFile(FileName, Number);
6517 if tmp <> '' then begin
6518 THTMLCreate.DivideStrLine(tmp, @Res);
6520 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6521 if ReplaceTag then begin
6522 Header := CustomStringReplace(Header, '</b>', '',true);
6523 Header := CustomStringReplace(Header, '<b>', '',true);
6524 Header := CustomStringReplace(Header, '<br>', '',true);
6525 Header := DeleteFontTag(Header);
6527 //if ThreadItem.IsBoardPlugInAvailable then begin
6528 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6529 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6530 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6532 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6533 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6534 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6535 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6538 Body := CustomStringReplace(Body, '</a>', '',true);
6540 Body := HTMLCreater.DeleteLink(Body);
6541 if ReplaceTag then begin
6542 Body := CustomStringReplace(Body, '<', '<');
6543 Body := CustomStringReplace(Body, '>', '>');
6544 Body := CustomStringReplace(Body, '"', '"');
6545 Body := CustomStringReplace(Body, '&', '&');
6546 //Body := CustomStringReplace(Body, ' ', ' ');
6549 Header := Header + Body;
6551 Clipboard.SetTextBuf( PChar(Header) );
6557 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6559 AddRoundNameMenu(dummy1);
6562 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6564 FavoriteDM.URLReplace(oldURLs, newURLs);
6567 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6569 RoundList.URLReplace(oldURLs, newURLs);
6572 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6574 Filename = 'tab.sav';
6575 bFilename = '~tab.sav';
6581 oldBoardName: string;
6583 newBoardName: string;
6584 TabList: TStringList;
6587 if oldURLs.Count <> newURLs.Count then begin
6590 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6591 TabList := TStringList.Create;
6593 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6595 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6596 //
\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
6597 for i := 0 to oldURLs.Count - 1 do begin
6598 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6599 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6600 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6601 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6602 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6603 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6605 for j := 0 to TabList.Count - 1 do begin
6606 tempString := TabList[j];
6607 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6608 tempString := StringReplace(tempString, oldHost, newHost,[]);
6609 TabList[j] := tempString;
6613 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6615 if FileExists( GikoSys.GetAppDir + Filename) then begin
6616 if FileExists( GikoSys.GetAppDir + bFilename) then
6617 DeleteFile(GikoSys.GetAppDir + bFilename);
6619 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6620 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6623 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6631 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6632 procedure TGikoForm.OnMinimize;
6634 if FActiveContent <> nil then begin
6635 FIsMinimize := mtMinimizing;
6636 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6640 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6641 procedure TGikoForm.OnMinimized;
6643 FIsMinimize := mtMinimized;
6647 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6649 CoolBarResized( Sender, BrowserCoolBar );
6652 // *************************************************************************
6653 // ExternalBoardPlugInMain
6654 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6655 // *************************************************************************
6656 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6659 boardPlugIn : TBoardPlugIn;
6662 if not (Sender is TMenuItem) then
6665 item := TMenuItem( Sender );
6666 if not Assigned( Pointer( item.Tag ) ) then
6669 //
\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·
6670 boardPlugIn := TBoardPlugIn( item.Tag );
6671 boardPlugIn.PlugInMenu( item.Handle );
6674 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6675 procedure TGikoForm.TreeClick( Node : TTreeNode );
6681 if FTreeType = gttHistory then begin
6683 if TObject( Node.Data ) is TFavoriteThreadItem then
6684 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6685 FavoriteClick( Node );
6688 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6689 if ActiveList = Node.Data then
6692 ActiveListColumnSave;
6694 if TObject(Node.Data) is TBBS then begin
6695 SetActiveList(Node.data);
6696 end else if TObject(Node.Data) is TCategory then begin
6697 SetActiveList(Node.data);
6698 end else if TObject(Node.Data) is TBoard then begin
6699 if not TBoard(Node.Data).IsThreadDatRead then begin
6700 Screen.Cursor := crHourGlass;
6702 if not TBoard(Node.Data).IsThreadDatRead then
6703 GikoSys.ReadSubjectFile(Node.Data);
6705 Screen.Cursor := crDefault;
6708 Sort.SetSortDate(Now());
6709 SetActiveList(Node.data);
6712 if TObject( Node.Data ) is TBoard then begin // not TCategory
6713 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6714 if GikoSys.Setting.ListWidthState = glsMax then begin
6715 GikoDM.BrowserMinAction.Execute;
6716 if GikoForm.Visible then
6720 if GikoSys.Setting.ListHeightState = glsMax then begin
6721 GikoDM.BrowserMinAction.Execute;
6722 if GikoForm.Visible then
6730 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6731 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6734 ThreadItem : TThreadItem;
6735 shiftDown : Boolean;
6738 if Node = nil then Exit;
6740 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6742 if FTreeType = gtt2ch then begin
6743 if not (TObject(Node.Data) is TBoard) then Exit;
6744 Board := TBoard(Node.Data);
6745 DownloadList(Board, shiftDown);
6746 end else if FTreeType = gttHistory then begin
6747 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6748 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6749 DownloadContent(ThreadItem, shiftDown);
6753 // *************************************************************************
6754 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6755 // *************************************************************************
6756 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6757 Shift: TShiftState);
6759 if Key = VK_BACK then begin
6760 // UpFolderButtonClick(Sender);
6761 end else if Key = VK_SPACE then begin
6762 TreeDoubleClick( TreeView.Selected );
6763 end else if Key = VK_RETURN then begin
6764 TreeClick( TreeView.Selected );
6765 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6768 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6769 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6770 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6772 favItem : TTreeNode;
6773 favThreadItem : TFavoriteThreadItem;
6779 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6780 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6781 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6782 rect := FavoriteTreeView.Selected.DisplayRect(true);
6783 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6784 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6785 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6786 if ssDouble in Shift then begin
6787 FClickNode := FavoriteTreeView.Selected;
6788 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6792 TObject(FavoriteTreeView.Selected));
6799 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6800 if favItem = nil then Exit;
6802 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6803 favThreadItem := TFavoriteThreadItem( favItem.Data );
6804 if favThreadItem.Item <> nil then
6805 InsertBrowserTab( favThreadItem.Item, False );
6812 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6815 if FIsIgnoreResize <> rtNone then
6818 if GikoSys.Setting.ListOrientation = gloVertical then begin
6819 if GikoSys.Setting.ListHeightState = glsMin then begin
6820 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6821 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6827 procedure TGikoForm.OnResized;
6832 FOldFormWidth := Width;
6833 FIsIgnoreResize := rtNone;
6838 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6839 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6844 //
\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)
6845 if FActiveContent <> nil then begin
6846 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6847 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6849 FIsMinimize := mtNone;
6854 // *************************************************************************
6855 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6856 // *************************************************************************
6857 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6862 stlist : TStringList;
6863 i, count, rc : Integer;
6869 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6870 FActiveContent.Browser.SetFocus;
6873 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6874 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6875 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6876 if (Assigned(e)) then begin
6877 if (e.className = 'date') or (e.id = 'date') then begin
6879 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6880 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6881 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6882 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6885 stlist := TStringList.Create;
6887 stList.DelimitedText := AID;
6889 for i := 0 to stList.Count - 1 do
6890 if Length(WideString(stList[i])) = 8 then begin
6891 if GikoSys.NotDateorTimeString(stList[i]) then begin
6900 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6902 if count > 20 then begin
6903 rc := GikoUtil.MsgBox(Handle,
6904 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6905 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6906 MB_YESNO or MB_ICONQUESTION);
6907 limited := rc <> ID_YES;
6909 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6910 FActiveContent.IDAnchorPopup(body);
6919 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6920 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6922 SelectTimer.Interval := 0;
6923 if not (ListView.Selected = nil) then
6924 if( FActiveContent = nil) or
6925 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6930 function TGikoForm.GetTabURLs(AStringList: TStringList) : Boolean;
6932 rec : TBrowserRecord;
6935 bound := BrowserTab.Tabs.Count -1;
6936 if bound = -1 then begin
6938 Exit; //for
\82É
\94ò
\82Î
\82È
\82¢
\82Å
\91\80\8dì
\82ð
\94²
\82¯
\82é
6941 for i := 0 to bound do begin
6943 rec := TBrowserRecord( BrowserTab.Tabs.Objects[ i ] );
6944 if( rec <> nil) and (rec.Thread <> nil) then
6945 AStringList.Add( rec.Thread.URL );
6952 function TGikoForm.SaveTabURLs : Boolean;
6954 Filename = 'tab.sav';
6955 bFilename = '~tab.sav';
6957 SaveStringList: TStringList;
6961 SaveStringList := TStringList.Create;
6963 if GetTabURLs(SaveStringList) then begin
6965 if FileExists( GikoSys.GetAppDir + Filename) then begin
6966 if FileExists( GikoSys.GetAppDir + bFilename) then
6967 DeleteFile(GikoSys.GetAppDir + bFilename);
6969 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6970 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6974 SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
6978 SaveStringList.Free;
6982 function TGikoForm.LoadTabURLs : Boolean;
6984 TABFILE = 'tab.sav';
6989 GikoTab : TGikoTabAppend;
6993 fileName := ExtractFilePath(Application.ExeName) + TABFILE;
6994 URLs := TStringList.Create();
6995 GikoTab := GikoSys.Setting.BrowserTabAppend;
6999 if FileExists(fileName) then begin
7000 URLs.LoadFromFile(fileName);
7001 bound := URLs.Count - 1;
7002 if bound > -1 then begin
7003 GikoSys.Setting.BrowserTabAppend := gtpLast;//TGikoTabAppend(1);
7004 for i := 0 to bound do begin
7005 item := BBSsFindThreadFromURL( URLs[ i ] );
7007 InsertBrowserTab( item, false );
7009 //
\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Ñ
7010 if BrowserTab.Tabs.Count > 0 then begin
7011 BrowserTab.OnChange(nil);
7018 on EFOpenError do begin
7019 ShowMessage('
\83^
\83u
\83t
\83@
\83C
\83\8b\82ª
\8aJ
\82¯
\82Ü
\82¹
\82ñ');
7023 GikoSys.Setting.BrowserTabAppend := GikoTab;
7030 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
7031 procedure TGikoForm.ActiveListColumnSave;
7033 ActivListObj : TObject;
7034 i, id, idx : Integer;
7035 BBSOrder : TGikoBBSColumnList;
7036 CategoryOrder : TGikoCategoryColumnList;
7037 BoardOrder : TGikoBoardColumnList;
7040 ActivListObj := ActiveList;
7041 if ActivListObj is TBBS then begin
7042 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7043 BBSOrder := TGikoBBSColumnList.Create;
7045 for i := 0 to ListView.Columns.Count - 1 do begin
7046 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7047 idx := ListView.Column[ i ].Tag;
7048 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
7049 BBSOrder.Add( TGikoBBSColumnID( id ) );
7050 //
\95\9d\82Ì
\95Û
\91¶
7051 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
7053 for i := 0 to ListView.Columns.Count - 1 do
7054 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7055 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
7059 end else if ActivListObj is TCategory then begin
7060 //=====
\94Â
\83\8a\83X
\83g =====
7061 CategoryOrder := TGikoCategoryColumnList.Create;
7063 for i := 0 to ListView.Columns.Count - 1 do begin
7064 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7065 idx := ListView.Column[ i ].Tag;
7066 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
7067 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
7068 //
\95\9d\82Ì
\95Û
\91¶
7069 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
7071 for i := 0 to ListView.Columns.Count - 1 do
7072 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7073 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
7077 end else if ActivListObj is TBoard then begin
7078 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7079 BoardOrder := TGikoBoardColumnList.Create;
7081 for i := 0 to ListView.Columns.Count - 1 do begin
7082 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
7083 idx := ListView.Column[ i ].Tag;
7084 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
7085 BoardOrder.Add( TGikoBoardColumnID( id ) );
7086 //
\95\9d\82Ì
\95Û
\91¶
7087 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
7089 for i := 0 to ListView.Columns.Count - 1 do
7090 //
\8f\87\8f\98\82Ì
\95Û
\91¶
7091 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
7099 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
7100 Column: TListColumn; Point: TPoint);
7106 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
7107 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
7108 ListColumnPopupMenu.Items.Items[ i ].Free;
7110 //
\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¢)
7111 if TObject( FActiveList ) is TBBS then begin
7113 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
7114 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
7115 item := TMenuItem.Create( ListColumnPopupMenu );
7116 item.Caption := GikoBBSColumnCaption[ i ];
7118 item.OnClick := ListColumnPopupMenuOnClick;
7119 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
7120 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
7121 item.Checked := True;
7125 ListColumnPopupMenu.Items.Add( item );
7128 end else if TObject( FActiveList ) is TCategory then begin
7130 //=====
\94Â
\83\8a\83X
\83g =====
7131 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
7132 item := TMenuItem.Create( ListColumnPopupMenu );
7133 item.Caption := GikoCategoryColumnCaption[ i ];
7135 item.OnClick := ListColumnPopupMenuOnClick;
7136 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
7137 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
7138 item.Checked := True;
7142 ListColumnPopupMenu.Items.Add( item );
7145 end else if TObject( FActiveList ) is TBoard then begin
7147 //=====
\83X
\83\8c\83\8a\83X
\83g =====
7148 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
7149 item := TMenuItem.Create( ListColumnPopupMenu );
7150 item.Caption := GikoBoardColumnCaption[ i ];
7152 item.OnClick := ListColumnPopupMenuOnClick;
7153 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
7154 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
7155 item.Checked := True;
7159 ListColumnPopupMenu.Items.Add( item );
7164 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
7165 Point := ListView.ClientToScreen( Point );
7166 if ListColumnPopupMenu.Items.Count > 0 then
7167 ListColumnPopupMenu.Popup( Point.X, Point.Y );
7171 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
7172 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
7179 if not (Sender is TMenuItem) then
7182 ActiveListColumnSave;
7183 item := TMenuItem( Sender );
7185 if TObject( FActiveList ) is TBBS then
7186 orderList := GikoSys.Setting.BBSColumnOrder
7187 else if TObject( FActiveList ) is TCategory then
7188 orderList := GikoSys.Setting.CategoryColumnOrder
7189 else if TObject( FActiveList ) is TBoard then
7190 orderList := GikoSys.Setting.BoardColumnOrder
7194 if item.Checked then begin
7195 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
7196 for i := orderList.Count - 1 downto 0 do begin
7197 if Integer( orderList[ i ] ) = item.Tag then begin
7198 orderList.Delete( i );
7203 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
7204 orderList.Add( Pointer( item.Tag ) );
7207 SetActiveList( FActiveList );
7211 procedure TGikoForm.OnGestureStart(Sender: TObject);
7216 procedure TGikoForm.OnGestureMove(Sender: TObject);
7223 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7225 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7226 s := MouseGesture.GetGestureStr;
7228 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7229 if Action <> nil then
7230 ActStr := '
\81i' + Action.Caption + '
\81j';
7231 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7232 StatusBar.Panels[1].Text := s;
7235 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7240 s := MouseGesture.GetGestureStr;
7241 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7242 if Action <> nil then
7243 MouseGesture.OnGestureStart(nil);
7245 StatusBar.Panels[1].Text := '';
7248 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7249 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7251 ThreadItem: TThreadItem;
7253 DefaultDraw := true;
7254 if TObject(Item.Data) is TThreadItem then begin
7255 ThreadItem := TThreadItem(Item.Data);
7256 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7257 ListView.Canvas.Brush.Color := FOddColor;
7258 //
\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
7259 if (GikoSys.Setting.UnFocusedBold) and
7260 (Item.Selected) and (not ListView.Focused) then begin
7261 ListView.Canvas.Font.Style := [fsBold];
7264 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7267 if ThreadItem.UnRead then
7268 ListView.Canvas.Font.Style := [fsBold];
7273 procedure TGikoForm.FormActivate(Sender: TObject);
7275 if GikoSys.Setting.GestureEnabled then begin
7276 GikoSys.Setting.Gestures.ClearGesture;
7277 GikoSys.Setting.Gestures.LoadGesture(
7278 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7279 MouseGesture.UnHook;
7280 MouseGesture.OnGestureStart := OnGestureStart;
7281 MouseGesture.OnGestureMove := OnGestureMove;
7282 MouseGesture.OnGestureEnd := OnGestureEnd;
7283 MouseGesture.SetHook(Handle);
7285 //MouseGesture.UnHook;
7286 MouseGesture.OnGestureStart := nil;
7287 MouseGesture.OnGestureMove := nil;
7288 MouseGesture.OnGestureEnd := nil;
7292 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7294 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7295 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7299 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7304 affectedBand : TCoolBand;
7307 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7308 FIsIgnoreResize := rtResizing;
7309 PostMessage( Handle, USER_RESIZED, 0, 0 );
7311 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7312 if CoolBar = MainCoolBar then begin
7313 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7314 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7315 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7316 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7317 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7319 end else if CoolBar = ListCoolBar then begin
7320 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7321 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7322 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7323 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7324 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7326 end else if CoolBar = BrowserCoolBar then begin
7327 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7328 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7329 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7330 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7331 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7334 if not (Sender is TToolBar) or (CoolBar = nil) then
7336 toolbar := TToolBar( Sender );
7337 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7338 affectedBand := nil;
7339 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7340 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7341 band := CoolBar.Bands[ i ];
7342 if band.Break or (i = 0) then begin
7343 if i + 1 < CoolBar.Bands.Count then
7344 if not CoolBar.Bands[ i + 1 ].Break then
7345 affectedBand := CoolBar.Bands[ i + 1 ];
7348 affectedBand := CoolBar.Bands[ i - 1 ];
7353 //
\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·
7354 if CoolBar = MainCoolBar then begin
7355 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7356 coolSet.FCoolWidth := toolbar.Width + 25;
7357 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7358 if affectedBand <> nil then begin
7359 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7360 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7361 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7363 end else if CoolBar = ListCoolBar then begin
7364 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7365 coolSet.FCoolWidth := toolbar.Width + 25;
7366 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7367 if affectedBand <> nil then begin
7368 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7369 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7370 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7372 end else if CoolBar = BrowserCoolBar then begin
7373 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7374 coolSet.FCoolWidth := toolbar.Width + 25;
7375 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7376 if affectedBand <> nil then begin
7377 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7378 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7379 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7386 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7388 CoolBarResized( Sender, MainCoolBar );
7391 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7393 CoolBarResized( Sender, ListCoolBar );
7396 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7398 CoolBarResized( Sender, BrowserCoolBar );
7401 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7402 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7404 ThreadItem : TThreadItem;
7405 ReadList : TStringList;
7406 wordCount : TWordCount;
7408 ThreadItem := GetActiveContent;
7409 ReadList := TStringList.Create;
7410 wordCount := TWordCount.Create;
7412 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7413 {$IFDEF SPAM_FILTER_ENABLED}
7414 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7415 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7416 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7417 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7418 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7420 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7421 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7426 FActiveContent.Repaint := true;
7427 if ThreadItem <> nil then
7428 InsertBrowserTab( ThreadItem, True );
7431 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7432 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7434 ThreadItem : TThreadItem;
7437 ReadList : TStringList;
7438 wordCount : TWordCount;
7440 No := KokoPopupMenu.Tag;
7441 if No = 0 then Exit;
7442 ThreadItem := GetActiveContent;
7443 if ThreadItem = nil then Exit;
7444 body := TStringList.Create;
7446 GikoSys.GetSameIDRes(No, ThreadItem, body);
7448 ReadList := TStringList.Create;
7449 wordCount := TWordCount.Create;
7451 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7452 {$IFDEF SPAM_FILTER_ENABLED}
7453 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7454 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7456 for i := 0 to body.Count - 1 do begin
7457 {$IFDEF SPAM_FILTER_ENABLED}
7458 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7459 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7460 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7462 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7463 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7469 FActiveContent.Repaint := true;
7470 if ThreadItem <> nil then
7471 InsertBrowserTab( ThreadItem, True );
7478 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7480 firstElement: IHTMLElement;
7481 document: IHTMLDocument2;
7483 document := FActiveContent.Browser.Document as IHTMLDocument2;
7484 if Assigned(document) then
7485 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7486 if Assigned(firstElement) then
7487 if firstElement.style.visibility <> 'hidden' then
7488 firstElement.style.visibility := 'hidden';
7492 procedure TGikoForm.RepaintAllTabsBrowser();
7495 ThreadItem: TThreadItem;
7497 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7498 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7500 ThreadItem := GetActiveContent;
7501 if ThreadItem <> nil then
7502 InsertBrowserTab( ThreadItem, True );
7506 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7507 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7508 Shift: TShiftState);
7510 //
\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Ì
7511 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7512 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7513 SelectTimer.Interval := 0;
7514 if not (GikoSys.Setting.BrowserTabVisible) then begin
7515 if (GetActiveList is TBoard) then begin
7516 //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
7517 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7518 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7519 (Key = VK_UP) or (Key = VK_DOWN)) then
7520 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7524 // *************************************************************************
7525 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7526 // *************************************************************************
7527 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7528 Node: TTreeNode; var AllowEdit: Boolean);
7530 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7531 FOrigenCaption := Node.Text;
7533 // *************************************************************************
7534 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7535 // *************************************************************************
7536 function TGikoForm.GetMainForm(): TComponent;
7538 Result := Application.MainForm;
7540 // *************************************************************************
7541 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7542 // *************************************************************************
7543 function TGikoForm.GetScreenCursor(): TCursor;
7545 Result := Screen.Cursor;
7547 // *************************************************************************
7548 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7549 // *************************************************************************
7550 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7552 if (Screen.Cursor <> Cursor) then
7553 Screen.Cursor := Cursor;
7555 // *************************************************************************
7556 //!
\83X
\83N
\83\8a\81[
\83\93\8fã
\82ÉEditorForm
\82ª
\82¢
\82é
\82©
7557 // *************************************************************************
7558 function TGikoForm.EditorFormExists(): boolean;
7563 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\92T
\82·
7564 for i := 0 to Screen.CustomFormCount - 1 do begin
7565 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
7571 // *************************************************************************
7572 //!
\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é
7573 // *************************************************************************
7574 procedure TGikoForm.AllEditroFormNameTextClearClear();
7578 for i := 0 to Screen.CustomFormCount - 1 do begin
7579 if TObject(Screen.CustomForms[i]) is TEditorForm then
7580 TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
7583 // *************************************************************************
7584 //!
\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é
7585 // *************************************************************************
7586 procedure TGikoForm.AllEditroFormMailTextClearClear();
7590 for i := 0 to Screen.CustomFormCount - 1 do begin
7591 if TObject(Screen.CustomForms[i]) is TEditorForm then
7592 TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
7595 // *************************************************************************
7596 //!
\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
7597 // *************************************************************************
7598 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7600 //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Ì
7601 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7602 if GikoDM.CabinetVisibleAction.Enabled then begin
7603 GikoDM.CabinetVisibleAction.Execute;
7606 // *************************************************************************
7607 //!
\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
7608 // *************************************************************************
7609 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7611 if GikoDM.FavoriteArrangeAction.Enabled then begin
7612 GikoDM.FavoriteArrangeAction.Execute;
7615 // *************************************************************************
7616 //!
\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
7617 // *************************************************************************
7618 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7619 var Handled: Boolean);
7623 //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ß
7624 if Self.Active then begin
7626 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7627 WM_KEYFIRST..WM_KEYLAST :
7629 //
\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ç
7630 if (Msg.message <> WM_KEYUP) and (Msg.message <> WM_CHAR) then begin
7631 wmMsg.Msg := Msg.message;
7632 wmMsg.CharCode := Word(Msg.wParam);
7633 wmMsg.KeyData := Msg.lParam;
7634 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7635 Self.OnShortCut(wmMsg, Handled);
7641 // *************************************************************************
7642 //!
\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
7643 // *************************************************************************
7644 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7646 Application.ProcessMessages;
7647 if not Application.Terminated then begin
7648 if PreviewTimer.Enabled then
7649 PreviewTimer.Enabled := False;
7650 //
\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
7651 if FHint <> nil then begin
7652 FHint.ReleaseHandle;
7655 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7656 if FPreviewBrowser <> nil then
7657 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7661 // *************************************************************************
7662 //!
\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
7663 // *************************************************************************
7664 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7669 if (Sender <> nil) then begin
7670 s := ' [' + Sender.ClassName + ']' + #13#10;
7672 s := ' [ Sender is nil ] ' + #13#10;
7675 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7677 // *************************************************************************
7678 //!
\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¬
7679 // *************************************************************************
7680 procedure TGikoForm.CreateControlThread();
7682 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7683 FControlThread := TThreadControl.Create(True);
7684 FControlThread.MaxThreadCount := 1;
7685 FControlThread.Resume;
7686 FControlThread.OnDownloadEnd := DownloadEnd;
7687 FControlThread.OnDownloadMsg := DownloadMsg;
7688 FControlThread.OnWork := Work;
7689 FControlThread.OnWorkBegin := WorkBegin;
7690 FControlThread.OnWorkEnd := WorkEnd;
7692 // *************************************************************************
7693 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7694 // *************************************************************************
7695 procedure TGikoForm.CreateBrowsers(count: Integer);
7698 newBrowser: TWebBrowser;
7700 BrowserNullTab := TBrowserRecord.Create;
7701 BrowserNullTab.Browser := Browser;
7702 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7703 FBrowsers := TList.Create;
7704 for i := 0 to count -1 do begin
7705 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7706 newBrowser := FBrowsers[FBrowsers.Count - 1];
7707 TOleControl(newBrowser).Parent := BrowserPanel;
7708 TOleControl(newBrowser).Align := alNone;
7709 TOleControl(newBrowser).Left := 0;
7710 TOleControl(newBrowser).Top := 0;
7711 newBrowser.RegisterAsDropTarget := False;
7712 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7713 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7714 newBrowser.OnEnter := BrowserEnter;
7715 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7716 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7717 newBrowser.Navigate(BLANK_HTML);
7718 ShowWindow(newBrowser.Handle, SW_HIDE);
7720 BrowserNullTab.Browser.BringToFront;
7721 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7722 //
\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Ì
7723 //
\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Å
7724 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7725 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7726 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7727 Application.ProcessMessages;
7730 // *************************************************************************
7731 //!
\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é
7732 // *************************************************************************
7733 procedure TGikoForm.SetSelectComboBox();
7735 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7738 ToolButton: TToolButton;
7740 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7741 SelectComboBoxPanel.Visible := False;
7743 for i := ListToolBar.ControlCount - 1 downto 0 do
7745 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7747 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7748 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7749 SelectComboBoxPanel.Parent := ListToolBar;
7750 SelectComboBoxPanel.Visible := True;
7752 SelectComboBox.Left := 0;
7753 SelectComboBox.Top := 0;
7754 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7755 SelectComboBox.Width := SelectComboBoxPanel.Width -
7756 SelectComboBoxSplitter.Width;
7758 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7759 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7760 if ToolButton = nil then begin
7761 ToolButton := TToolButton.Create(ListToolBar);
7762 ToolButton.Name := DUMMYCOMPNAME;
7764 ToolButton.Style := tbsSeparator;
7765 ToolButton.Width := 0;
7766 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7767 ListToolBar.InsertControl(ToolButton);
7768 ToolButton.Visible := False;
7770 //
\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·
7771 if (i + 1) < ListToolBar.ControlCount then
7772 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7773 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7774 ListToolBar.Controls[ i + 1 ].Visible := False;
7777 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7778 ListToolBar.Controls[ i ].Visible := False;
7786 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7787 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7788 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7795 if (TreeView.Selected <> nil) and
7796 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7797 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7798 rect := TreeView.Selected.DisplayRect(true);
7799 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7800 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7801 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7802 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7803 if ssDouble in Shift then begin
7804 TreeDoubleClick( TreeView.Selected );
7806 TreeClick(TreeView.Selected);
7813 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7814 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7818 if ActionList <> nil then begin
7819 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7821 for i := 0 to ActionList.ActionCount - 1 do begin
7823 FActionListGroupIndexes[i] :=
7824 TCustomAction(ActionList.Actions[i]).GroupIndex;
7825 TCustomAction(ActionList.Actions[i]).GroupIndex
7828 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7834 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7835 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7839 if ActionList <> nil then begin
7840 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7841 for i := 0 to ActionList.ActionCount - 1 do begin
7843 TCustomAction(ActionList.Actions[i]).GroupIndex
7844 := FActionListGroupIndexes[i];
7846 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7852 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7853 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);