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, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList, ResPopupBrowser;
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ToolButton3: TToolButton;
196 ToolButton9: TToolButton;
197 ToolButton11: TToolButton;
198 ToolButton5: TToolButton;
199 ListNameToolBar: TToolBar;
200 ListNameLabel: TLabel;
202 BrowserNameToolBar: TToolBar;
203 ItemBoardImage: TImage;
204 BrowserBoardNameLabel: TLabel;
206 BrowserNameLabel: TLabel;
213 TreeSelectNameURLPupupMenu: TMenuItem;
217 BrowserTabToolBar: TToolBar;
218 BrowserTab: TTabControl;
229 FavoriteMenu: TMenuItem;
231 BoardFavoriteAddMenu: TMenuItem;
232 ThreadFavoriteAddMenu: TMenuItem;
234 TreeSelectFavoriteAddPupupMenu: TMenuItem;
235 FavoriteTreeView: TTreeView;
236 StateIconImageList: TImageList;
238 TopRightPanel: TPanel;
241 TopCoolPanel: TPanel;
242 MainCoolBar: TGikoCoolBar;
243 MenuToolBar: TToolBar;
244 StdToolBar: TToolBar;
245 AddressToolBar: TToolBar;
246 AddressComboBox: TComboBox;
247 MoveToToolButton: TToolButton;
248 AddressImageList: TImageList;
249 AddressToolBarMenu: TMenuItem;
259 PreviewTimer: TTimer;
260 MonazillaWebPageAction1: TMenuItem;
267 ChevronPopupMenu: TPopupMenu;
271 LinkToolBar: TToolBar;
276 LinkBarPopupMenu: TPopupMenu;
278 ThreadPopupMenu: TPopupMenu;
279 MenuItem4: TMenuItem;
280 MenuItem5: TMenuItem;
281 MenuItem6: TMenuItem;
284 SelectItemNameCopyAction1: TMenuItem;
287 NameCopyPMenu: TMenuItem;
288 SelectComboBox: TComboBox;
289 MainCoolBarPopupMenu: TPopupMenu;
290 StdToolBarVisiblePMenu: TMenuItem;
291 AddressToolBarVisiblePMenu: TMenuItem;
292 LinkToolBarVisiblePMenu: TMenuItem;
313 ToolButton16: TToolButton;
320 IndividualAbon1: TMenuItem;
322 IndividualAbon2: TMenuItem;
323 AntiIndivAbonMenuItem: TMenuItem;
324 AntiIndividualAbon: TMenuItem;
328 SearchBoardName: TMenuItem;
329 TreeSelectLogDeleteSeparator: TMenuItem;
332 FavoriteTreePopupMenu: TPopupMenu;
333 FavoriteTreeRenamePopupMenu: TMenuItem;
334 FavoriteTreeNewFolderPopupMenu: TMenuItem;
336 FavoriteTreeDeletePopupMenu: TMenuItem;
337 FavoriteToolBar: TToolBar;
338 FavoriteAddToolButton: TToolButton;
339 FavoriteArrangeToolButton: TToolButton;
340 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
342 FavoriteTreeReloadPopupMenu: TMenuItem;
344 FavoriteTreeURLCopyPopupMenu: TMenuItem;
345 FavoriteTreeNameCopyPopupMenu: TMenuItem;
346 FavoriteTreeLogDeletePopupMenu: TMenuItem;
348 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
349 ToolButton20: TToolButton;
351 ExportFavoriteFileAction1: TMenuItem;
362 TreeSelectLogDeletePopupMenu: TMenuItem;
364 BBSSelectPopupMenu: TPopupMenu;
365 PlugInMenu: TMenuItem;
366 TreeSelectNamePupupMenu: TMenuItem;
367 BrowserPanel: TPanel;
369 SelectThreadSave: TMenuItem;
373 OpenLogFolder: TMenuItem;
374 Browser: TWebBrowser;
377 ResRangePopupMenu: TPopupMenu;
378 ResRangeHundPMenuItem: TMenuItem;
379 ResRangeKokoPMenuItem: TMenuItem;
380 ResRangeNewPMenuItem: TMenuItem;
381 ResRangeAllPMenuItem: TMenuItem;
382 BrowsBoradHeadAction1: TMenuItem;
383 ThreadRangePopupMenu: TPopupMenu;
390 ResRangeSelectPMenuItem: TMenuItem;
391 ListColumnPopupMenu: TPopupMenu;
400 SelectComboBoxPanel: TPanel;
401 SelectComboBoxSplitter: TImage;
402 ToolButton1: TToolButton;
405 GikoApplicationEvents: TApplicationEvents;
412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
415 SaveThreadFile: TMenuItem;
420 SameBoardThreadItem: TMenuItem;
422 procedure FormCreate(Sender: TObject);
423 procedure FormDestroy(Sender: TObject);
424 procedure BrowserStatusTextChange(Sender: TObject;
425 const Text: WideString);
426 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
427 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
428 var AllowChange: Boolean);
429 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
431 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
432 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
433 Button: TToolButton; State: TCustomDrawState;
434 var DefaultDraw: Boolean);
435 procedure BrowserBeforeNavigate2(Sender: TObject;
436 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
437 Headers: OleVariant; var Cancel: WordBool);
438 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
439 const ARect: TRect; var DefaultDraw: Boolean);
440 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
441 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
442 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
443 procedure ListViewCustomDraw(Sender: TCustomListView;
444 const ARect: TRect; var DefaultDraw: Boolean);
445 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
446 Shift: TShiftState; X, Y: Integer);
447 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
448 procedure MessageListViewResize(Sender: TObject);
449 procedure CabinetVisible( isVisible : Boolean );
450 procedure FormResize(Sender: TObject);
451 procedure ListPopupMenuPopup(Sender: TObject);
452 procedure TreePopupMenuPopup(Sender: TObject);
453 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
454 var Cancel: WordBool);
455 procedure ListSplitterMoved(Sender: TObject);
456 procedure BrowserTabChange(Sender: TObject);
457 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
458 Shift: TShiftState; X, Y: Integer);
459 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
460 State: TDragState; var Accept: Boolean);
461 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
462 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
464 procedure BrowserDocumentComplete(Sender: TObject;
465 const pDisp: IDispatch; var URL: OleVariant);
466 procedure RoundNamePopupMenuPopup(Sender: TObject);
467 procedure FormShow(Sender: TObject);
468 procedure BrowserTabToolBarResize(Sender: TObject);
469 procedure FavoriteMenuClick(Sender: TObject);
470 procedure MainCoolBarResize(Sender: TObject);
471 procedure AddressToolBarResize(Sender: TObject);
472 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
474 procedure BrowserEnter(Sender: TObject);
475 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
476 procedure PreviewTimerTimer(Sender: TObject);
477 procedure MessageHideButtonClick(Sender: TObject);
478 procedure HistoryAllClearToolButtonClick(Sender: TObject);
479 procedure MainCoolBarBandInfo(Sender: TObject;
480 var BandInfo: PReBarBandInfoA);
481 procedure MainCoolBarChevronClick(Sender: TObject;
482 RebarChevron: PNMRebarChevron);
483 procedure ListCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure ListCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure BrowserCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure BrowserCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
492 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
493 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
494 procedure SelectComboBoxChange(Sender: TObject);
495 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
497 procedure SelectComboBoxExit(Sender: TObject);
498 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
499 Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
503 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
504 procedure StatusBarResize(Sender: TObject);
505 procedure SelectComboBoxEnter(Sender: TObject);
506 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
508 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
511 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
513 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
514 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
515 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
516 Shift: TShiftState; X, Y: Integer);
517 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
518 State: TDragState; var Accept: Boolean);
519 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
521 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
522 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
523 var Handled: Boolean);
524 procedure BrowserTabPopupMenuPopup(Sender: TObject);
525 procedure BrowserTabResize(Sender: TObject);
526 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
528 procedure FavoriteTreeViewMouseDown(Sender: TObject;
529 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
530 procedure MessagePanelResize(Sender: TObject);
532 procedure SelectTimerTimer(Sender: TObject);
533 procedure ListViewColumnRightClick(Sender: TObject;
534 Column: TListColumn; Point: TPoint);
535 procedure ListViewCustomDrawItem(Sender: TCustomListView;
536 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
537 procedure FormActivate(Sender: TObject);
538 procedure BrowserPanelResize(Sender: TObject);
539 procedure MenuToolBarResize(Sender: TObject);
540 procedure ListToolBarResize(Sender: TObject);
541 procedure BrowserToolBarResize(Sender: TObject);
542 procedure KokoPopupMenuPopup(Sender: TObject);
543 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
545 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
546 var AllowEdit: Boolean);
547 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
548 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
549 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
550 var Handled: Boolean);
551 procedure GikoApplicationEventsDeactivate(Sender: TObject);
552 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
553 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
554 Shift: TShiftState; X, Y: Integer);
555 procedure GetResURLMenuClick(Sender: TObject);
556 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
557 var Handled: Boolean);
560 FEnabledCloseButton: Boolean;
561 FClickNode: TTreeNode;
563 FPreviewBrowser: TPreviewBrowser;
565 FBrowserSizeHeight: Integer;
566 FBrowserSizeWidth: Integer;
567 FTabHintIndex: Integer;
568 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
569 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
570 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
571 FActiveList: TObject;
572 FActiveContent: TBrowserRecord; //
574 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
575 FTreeType: TGikoTreeType;
579 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
580 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
581 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
582 IsDraggingSelectComboBox : Boolean;
583 DraggingSelectComboBoxPosition : TPoint;
584 FSearchDialog: TSearchDialog;
585 FDropSpaceNode: TTreeNode;
586 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
587 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
588 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
589 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
590 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¦
591 FOddColor : TColor; ///<
\82»
\82Ì
\90F
592 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
593 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
594 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
595 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
596 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
597 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
599 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
601 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
602 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
603 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ñ
604 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
605 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ñ
606 FResPopupBrowser: TResPopupBrowser;
607 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
608 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
609 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
610 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
611 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
613 procedure ListDoubleClick(Shift: TShiftState);
614 function Hook(var Message: TMessage): Boolean;
615 procedure AddRoundNameMenu(MenuItem: TMenuItem);
616 procedure SetMenuFont;
617 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
618 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
619 procedure FavoriteClick(Sender: TObject); overload;
620 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
621 function OnDocumentContextMenu(Sender: TObject): WordBool;
622 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
623 procedure MenuBarChevronMenu;
624 procedure LinkBarChevronMenu;
625 procedure ToolBarChevronMenu(ToolBar: TToolBar);
626 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
627 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
630 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
631 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
632 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
633 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
634 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
636 procedure SetListViewBackGroundColor(value: TColor);
637 procedure BBSMenuItemOnClick( Sender : TObject );
638 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
639 procedure SaveCoolBarSettings;
640 procedure SaveMainCoolBarSettings;
641 procedure SaveBoardCoolBarSettings;
642 procedure SaveBrowserCoolBarSettings;
643 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
644 procedure LoadCoolBarSettings;
645 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
646 procedure OnMinimize;
647 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
648 procedure OnMinimized;
649 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
650 procedure TreeClick( Node : TTreeNode );
651 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
652 procedure TreeDoubleClick( Node : TTreeNode );
653 ///
\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
654 procedure SetBBSMenu;
655 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
656 procedure ListColumnPopupMenuOnClick( Sender : TObject );
657 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
658 procedure SetSelectWord( const text : string );
659 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
660 function GetScreenCursor(): TCursor;
661 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
662 procedure SetScreenCursor(Cursor : TCursor);
663 //!
\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¬
664 procedure CreateControlThread();
665 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
666 procedure CreateBrowsers(count: Integer);
667 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
668 procedure GetGroupIndex(ActionList: TActionList);
669 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
670 procedure SetGroupIndex(ActionList: TActionList);
671 //!
\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é)
672 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
673 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
674 procedure RefreshListView(Thread: TThreadItem);
675 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
676 procedure ClearThreadRengeAction;
677 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
678 procedure UnStoredTaskTray;
679 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
680 procedure ShowEditors(nCmdShow: Integer);
681 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
682 procedure ReleaseOldestBrowser;
683 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
684 procedure AddMenuSameBoardThread;
685 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
686 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
687 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
688 procedure CreateResPopupBrowser;
690 procedure CreateParams(var Params: TCreateParams); override;
691 procedure WndProc(var Message: TMessage); override;
692 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
693 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
694 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
698 LastRoundTime: TDateTime;
699 BrowserNullTab: TBrowserRecord;
700 FControlThread: TThreadControl;
701 FIconData : TNotifyIconData;
702 procedure MoveToURL(const inURL: string);
703 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
705 function GetHttpState: Boolean;
706 procedure SetEnabledCloseButton(Enabled: Boolean);
707 function GetTreeNode(Data: TObject): TTreeNode;
708 procedure ListViewAllSelect;
709 property ListStyle: TViewStyle read FListStyle write FListStyle;
710 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
711 property ViewType: TGikoViewType read FViewType write FViewType;
712 property NameCookie: string read FNameCookie write FNameCookie;
713 property MailCookie: string read FMailCookie write FMailCookie;
714 property ClickNode: TTreeNode read FClickNode write FClickNode;
715 property TreeType: TGikoTreeType read FTreeType write FTreeType;
716 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
717 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
718 property SelectResWord : string read FSelectResWord write FSelectResWord;
719 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
720 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
721 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
722 property ToolBarSettingSender : TToolBarSettingSenderType
723 read FToolBarSettingSender write FToolBarSettingSender;
724 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
725 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
726 property WorkCount: Integer read FWorkCount write FWorkCount;
727 procedure SetContent(inThread: TBrowserRecord);
728 function GetActiveContent(popup :Boolean = false): TThreadItem;
729 function GetActiveList: TObject;
731 procedure SetListViewType(AViewType: TGikoViewType); overload;
732 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
733 procedure PlaySound(SoundEventName: string);
734 procedure ShowBBSTree( inBBS : TBBS );
735 procedure ShowBBSTreeOld( inBBS : TBBS );
736 procedure ShowHistoryTree;
737 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
738 procedure SetBrowserTabState;
739 procedure SetToolBarPopup;
740 procedure ShowFavoriteAddDialog( Item : TObject );
741 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
742 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
743 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
744 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
745 property OddColor : TColor read FOddColor write FOddColor;
746 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
747 procedure OnPlugInMenuItem( Sender : TObject );
748 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
749 /// 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Å
750 procedure ActiveListColumnSave;
751 procedure SetActiveList(Obj: TObject);
752 property ActiveList: TObject read GetActiveList write SetActiveList;
753 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
754 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
755 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
756 procedure IndividualAbonID(Atype : Integer);
757 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
758 procedure IndividualAbon(Atag, Atype : Integer);
759 //
\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Ý
760 procedure RepaintAllTabsBrowser();
761 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
762 procedure SetLinkBar;
763 procedure FavoriteBrowseFolder( node: TTreeNode );
764 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
765 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
766 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
767 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
768 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
769 procedure DeleteHistory( threadItem: TThreadItem );
770 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
771 procedure DeleteTab(ThreadItem: TThreadItem); overload;
772 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
773 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
774 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
775 procedure DeleteTab(index, selectIndex: Integer); overload;
776 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
777 procedure BrowserMovement(const AName: string); overload;
778 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
779 procedure BrowserMovement(scroll: Integer); overload;
780 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
781 function GetMainForm(): TComponent;
782 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
783 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
784 procedure OnGestureStart(Sender: TObject);
785 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
786 procedure OnGestureMove(Sender: TObject);
787 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
788 procedure OnGestureEnd(Sender: TObject);
789 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
790 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
791 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
792 procedure SelectListItem(List: TList);
793 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
794 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
796 procedure ModifySelectList;
798 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
800 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
802 procedure SetSelectRoundName(Sender: TObject);
804 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
806 function WebBrowserClick(Sender: TObject): WordBool;
807 //!
\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é
808 procedure SetSelectComboBox();
810 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\8ai
\94[
\82µ
\82½
\83A
\83C
\83R
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\82Æ
\82«
\82Ì
\8f\88\97\9d
811 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
812 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
813 procedure StoredTaskTray;
815 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
818 TFavoriteMenuItem = class(TMenuItem)
822 property Data: Pointer read FData write FData;
825 TBBSMenuItem = class(TMenuItem)
829 property Data: Pointer read FData write FData;
832 TLinkToolButton = class(TToolButton)
836 property Data: Pointer read FData write FData;
845 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
846 YofUtils, ToolBarUtil, ToolBarSetting,
847 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
848 FavoriteArrange, AddressHistory, Gesture,
849 About, Option, Round, Splash, Sort, ListSelect, Imm,
850 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
851 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
852 InputAssistDataModule, Types, ReplaceDataModule;
855 BLANK_HTML: string = 'about:blank';
856 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
858 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
859 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
860 HTML_FILE_NAME = 'temp_preview.html';
861 //
\83\81\83b
\83Z
\81[
\83WID
862 USER_TREECLICK = WM_USER + 2000;
863 USER_RESIZED = WM_USER + 2001;
864 USER_MINIMIZED = WM_USER + 2002;
865 USER_SETLINKBAR = WM_USER + 2003;
866 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
867 USER_TASKTRAY = WM_USER + 2010;
870 procedure TGikoForm.CreateParams(var Params: TCreateParams);
873 if FormStyle in [fsNormal, fsStayOnTop] then begin
874 if BorderStyle in [bsSingle, bsSizeable] then begin
875 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
876 Params.WndParent := 0;
881 procedure TGikoForm.FormCreate(Sender: TObject);
883 TVS_NOTOOLTIPS = $0080;
889 wp: TWindowPlacement;
893 Writeln('============================================================');
894 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
896 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
897 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¢');
898 Writeln('============================================================');
901 Sort.SetSortDate(Now());
903 FTreeType := gttNone;
904 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
906 Application.HookMainWindow(Hook);
907 FIsIgnoreResize := rtResizing;
908 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
909 //(
\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¢)
910 //
\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
911 GetGroupIndex(GikoDM.GikoFormActionList);
912 FSearchDialog := nil;
913 FResPopupBrowser := nil;
914 CreateBrowsers(BROWSER_COUNT);
917 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
920 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
921 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
923 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
924 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
926 EnabledCloseButton := True;
928 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
929 ListView.ViewStyle := GikoSys.Setting.ListStyle;
931 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
933 AnimePanel.Left := 0;
935 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
937 //
\83L
\83\83\83r
\83l
\83b
\83g
938 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
940 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
941 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
942 GikoDM.MsgBarVisibleActionExecute(nil);
943 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
945 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
946 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
947 GikoDM.StatusBarVisibleActionExecute(nil);
949 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
950 TreeView.Items.BeginUpdate;
951 FavoriteTreeView.Items.BeginUpdate;
952 ListView.Items.BeginUpdate;
954 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
955 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
956 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
957 TreeView.Color := GikoSys.Setting.CabinetBackColor;
958 FavoriteTreeView.Font.Assign(TreeView.Font);
959 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
961 ListView.Font.Name := GikoSys.Setting.ListFontName;
962 ListView.Font.Size := GikoSys.Setting.ListFontSize;
963 ListView.Font.Color := GikoSys.Setting.ListFontColor;
964 ListView.Font.Style := [];
965 if GikoSys.Setting.ListFontBold then
966 ListView.Font.Style := [fsbold];
967 if GikoSys.Setting.ListFontItalic then
968 ListView.Font.Style := ListView.Font.Style + [fsitalic];
970 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
971 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
972 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
973 FOddColor := GikoSys.Setting.OddColor;
976 TreeView.Items.EndUpdate;
977 FavoriteTreeView.Items.EndUpdate;
978 ListView.Items.EndUpdate;
980 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
981 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
983 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
984 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
986 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
987 FResRangeMenuSelect := GikoSys.ResRange;
988 case GikoSys.ResRange of
991 GikoDM.AllResAction.Execute;
995 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
996 GikoDM.SelectResAction.Checked := True;
999 case FResRangeMenuSelect of
1000 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1001 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1002 100: GikoDM.OnlyAHundredResAction.Checked := True;
1006 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1007 case GikoSys.Setting.ThreadRange of
1010 GikoDM.AllItemAction.Checked := True;
1015 GikoDM.LogItemAction.Checked := True;
1020 GikoDM.NewItemAction.Checked := True;
1025 GikoDM.LiveItemAction.Checked := True;
1026 ViewType := gvtLive;
1030 GikoDM.ArchiveItemAction.Checked := True;
1031 ViewType := gvtArch;
1036 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1037 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1038 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1039 BrowserTab.Font.Style := [];
1040 if GikoSys.Setting.BrowserTabFontBold then
1041 BrowserTab.Font.Style := [fsBold];
1042 if GikoSys.Setting.BrowserTabFontItalic then
1043 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1044 BrowserTab.DoubleBuffered := True;
1045 FDragWFirst := false;
1046 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1048 //
\83u
\83\89\83E
\83U
\83^
\83u
1049 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1051 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1052 GikoDM.BrowserTabTopAction.Checked := True;
1054 GikoDM.BrowserTabBottomAction.Checked := True;
1057 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1058 GikoDM.BrowserTabTabStyleAction.Checked := True;
1059 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1060 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1062 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1065 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1066 ProgressBar.Parent := StatusBar;
1067 ProgressBar.Top := 2;
1068 ProgressBar.Left := 0;
1069 ProgressBar.Width := StatusBar.Panels[0].Width;
1070 ProgressBar.Height := StatusBar.Height - 2;
1071 ProgressBar.Position := 0;
1073 //
\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Æ)
1074 InitializeBoardPlugIns;
1076 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1077 GikoSys.ListBoardFile;
1078 //
\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É
1080 //
\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è
1081 if (SplashWindow <> nil) then begin
1082 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1086 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1087 for i := Length(BBSs) - 1 downto 0 do begin
1088 if not BBSs[i].IsBoardFileRead then
1089 GikoSys.ReadBoardFile(BBSs[i]);
1091 if SplashWindow <> nil then begin
1092 SplashWindow.ProgressBar.StepBy(20);
1093 SplashWindow.Update;
1097 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1098 RoundList := TRoundList.Create;
1099 RoundList.LoadRoundBoardFile;
1100 RoundList.LoadRoundThreadFile;
1102 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1103 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1104 Style := Style or TVS_NOTOOLTIPS;
1105 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1107 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1108 TreeView.Align := alClient;
1109 FavoriteTreeView.Align := alClient;
1110 FavoriteTreeView.Visible := False;
1112 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1115 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1116 wp.length := sizeof(wp);
1117 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1118 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1119 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1120 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1121 wp.showCmd := SW_HIDE;
1122 SetWindowPlacement(Handle, @wp);
1125 if GikoSys.Setting.WindowMax then
1126 WindowState := wsMaximized;
1128 //
\83M
\83R
\83A
\83j
\83\81
1130 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1131 if FileExists(FileName) then
1132 Animate.FileName := FileName;
1140 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1141 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1142 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1145 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1146 FHistoryList := THistoryList.Create;
1148 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1149 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1150 TreeView, FTreeType);
1152 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1153 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1154 FavoriteDM.ReadFavorite;
1156 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1157 GikoDM.ArrangeAction.Execute;
1159 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1160 case GikoSys.Setting.ListWidthState of
1162 ViewPanel.Width := 1;
1163 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1164 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1167 ViewPanel.Width := GikoSys.Setting.ListWidth;
1168 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1169 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1172 ViewPanel.Width := GikoSys.Setting.ListWidth;
1173 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1174 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1178 case GikoSys.Setting.ListHeightState of
1180 ViewPanel.Height := 1;
1181 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1182 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1185 ViewPanel.Height := GikoSys.Setting.ListHeight;
1186 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1187 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1190 ViewPanel.Height := GikoSys.Setting.ListHeight;
1191 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1192 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1197 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1198 CreateControlThread();
1200 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1201 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1203 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1206 BrowserBoardNameLabel.Caption := '';
1207 BrowserNameLabel.Caption := '';
1210 FTabHintIndex := -1;
1212 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1213 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1214 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1216 MakeDefaultINIFile();
1217 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1218 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1219 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1220 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1223 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1224 SetSelectComboBox();
1226 //
\83A
\83h
\83\8c\83X
\83o
\81[
1227 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1229 //
\83\8a\83\93\83N
\83o
\81[
1231 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1233 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1234 if not FileExists(GikoSys.GetBoardFileName) then begin
1235 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
1236 + '
\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
1237 + '
\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';
1238 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1239 GikoDM.NewBoardAction.Execute;
1242 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1243 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1245 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1246 // FLastRoundTime := 0;
1248 ListView.OnData := TListViewUtils.ListViewData;
1250 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1251 CabinetVisible( False );
1252 if GikoSys.Setting.CabinetVisible then begin
1253 i := CabinetSelectPopupMenu.Items.Count - 1;
1254 if GikoSys.Setting.CabinetIndex = i - 1 then
1255 GikoDM.CabinetHistoryAction.Execute
1256 else if GikoSys.Setting.CabinetIndex = i then
1257 GikoDM.CabinetFavoriteAction.Execute
1259 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1260 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1261 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1262 FIsIgnoreResize := rtResizing;
1263 GikoDM.CabinetBBSAction.Execute;
1266 ShowBBSTreeOld( BBSs[ 0 ] );
1267 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1270 //
\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
1271 for i := 1 to ParamCount do begin
1272 MoveToURL(ParamStr(i));
1275 GikoDM.RepaintStatusBar;
1276 StatusBarResize(Sender);
1278 dummy1.Caption := ItemReservPMenu.Caption;
1279 dummy1.Hint := ItemReservPMenu.Hint;
1281 {$IFDEF SPAM_FILTER_ENABLED}
1282 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1283 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1286 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1287 MouseGesture := TMouseGesture.Create;
1288 GikoSys.Setting.Gestures.LoadGesture(
1289 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1290 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1291 MouseGesture.OnGestureStart := OnGestureStart;
1292 MouseGesture.OnGestureMove := OnGestureMove;
1293 MouseGesture.OnGestureEnd := OnGestureEnd;
1294 if GikoSys.Setting.GestureEnabled then
1295 MouseGesture.SetHook( Handle );
1297 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1298 GikoSys.SetGikoMessage;
1300 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1301 if GikoSys.Setting.AutoLogin then
1302 GikoDM.LoginAction.Execute;
1304 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1306 //
\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è
1307 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1308 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1310 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1311 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1313 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1314 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1317 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1318 procedure TGikoForm.SaveCoolBarSettings;
1321 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1323 SaveMainCoolBarSettings;
1324 SaveBoardCoolBarSettings;
1325 SaveBrowserCoolBarSettings;
1328 procedure TGikoForm.SaveMainCoolBarSettings;
1333 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1334 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1335 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1336 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1337 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1338 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1341 procedure TGikoForm.SaveBoardCoolBarSettings;
1346 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1347 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1348 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1349 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1350 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1351 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1354 procedure TGikoForm.SaveBrowserCoolBarSettings;
1359 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1360 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1361 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1362 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1363 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1364 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1367 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1368 procedure TGikoForm.LoadCoolBarSettings;
1374 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1375 MainCoolBar.Bands.BeginUpdate;
1377 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1378 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1379 CoolSet := GikoSys.Setting.MainCoolSet[i];
1380 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1381 FIsIgnoreResize := rtNone;
1382 SaveCoolBarSettings;
1385 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1386 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1387 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1390 MainCoolBar.Bands.EndUpdate;
1393 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1394 ListCoolBar.Bands.BeginUpdate;
1396 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1397 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1398 CoolSet := GikoSys.Setting.ListCoolSet[i];
1399 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1400 FIsIgnoreResize := rtNone;
1401 SaveCoolBarSettings;
1404 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1405 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1406 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1409 ListCoolBar.Bands.EndUpdate;
1412 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1413 BrowserCoolBar.Bands.BeginUpdate;
1415 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1416 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1417 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1418 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1419 FIsIgnoreResize := rtNone;
1420 SaveCoolBarSettings;
1423 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1424 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1425 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1428 BrowserCoolBar.Bands.EndUpdate;
1433 procedure TGikoForm.FormShow(Sender: TObject);
1435 if FStartUp then begin
1436 ShowWindow(Application.Handle, SW_HIDE);
1438 //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½
1439 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1440 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1441 GikoDM.StdToolBarVisibleActionExecute( nil );
1442 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1443 GikoDM.AddressBarVisibleActionExecute( nil );
1444 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1445 GikoDM.LinkBarVisibleActionExecute( nil );
1446 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1447 GikoDM.ListToolBarVisibleActionExecute( nil );
1448 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1449 GikoDM.ListNameBarVisibleActionExecute( nil );
1450 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1451 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1452 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1453 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1455 // CoolBar
\95\9c\8c³
1456 LoadCoolBarSettings;
1458 //
\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é
1459 // ResetBandInfo( ListCoolBar, ListToolBar );
1460 FIsIgnoreResize := rtNone;
1462 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1463 if GikoSys.Setting.TabAutoLoadSave then begin
1464 GikoDM.TabsOpenAction.Tag := 1;
1465 GikoDM.TabsOpenAction.Execute;
1466 GikoDM.TabsOpenAction.Tag := 0;
1469 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1470 SetGroupIndex(GikoDM.GikoFormActionList);
1476 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1478 // if GikoForm.WindowState <> wsMinimized then
1479 // SaveCoolBarSettings;
1481 if ( GikoSys.Setting.ShowDialogForEnd ) and
1482 (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
1487 if GikoSys.Setting.TabAutoLoadSave then begin
1488 GikoDM.TabsSaveAction.Execute;
1491 if (SearchDialog <> nil) then begin
1492 if (SearchDialog.Visible) then begin
1495 SearchDialog.Release;
1498 SearchDialog := nil;
1502 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1503 GikoDM.CloseAllEditorAction.Execute;
1505 Application.UnhookMainWindow(Hook);
1506 Application.Terminate;
1509 procedure TGikoForm.FormDestroy(Sender: TObject);
1512 // CoolSet: TCoolSet;
1513 wp : TWindowPlacement;
1516 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1518 MouseGesture.UnHook;
1522 ActiveListColumnSave;
1526 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1527 wp.length := sizeof(wp);
1528 GetWindowPlacement(Handle, @wp);
1529 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1530 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1531 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1532 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1533 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1535 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1536 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1537 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1538 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1539 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1540 if GikoDM.ArrangeAction.Checked then
1541 GikoSys.Setting.ListOrientation := gloVertical
1543 GikoSys.Setting.ListOrientation := gloHorizontal;
1544 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1549 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1550 if not GikoSys.Setting.ResRangeHold then
1551 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1554 if WindowState <> wsNormal then
1555 WindowState := wsNormal;
1556 SaveCoolBarSettings;
1558 GikoSys.Setting.WriteWindowSettingFile;
1559 GikoSys.Setting.WriteNameMailSettingFile;
1562 //
\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è
1563 //
\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¢
1565 //
\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
1567 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1569 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1570 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1572 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1574 //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é
1575 FavoriteDM.WriteFavorite;
1579 LockWindowUpdate(Self.Handle);
1581 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1582 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1583 GikoSys.Setting.ShowDialogForAllTabClose := false;
1584 GikoDM.AllTabCloseAction.Execute;
1585 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1589 for i := FBrowsers.Count - 1 downto 0 do begin
1590 TWebBrowser(FBrowsers[i]).Free;
1593 FBrowsers.Capacity := 0;
1598 if BrowserNullTab <> nil then begin
1599 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1600 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1602 BrowserNullTab.Free;
1608 TreeView.Items.BeginUpdate;
1609 TreeView.Items.GetFirstNode.Free;
1610 TreeView.Items.Clear;
1611 TreeView.Items.EndUpdate;
1615 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1617 //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
1618 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1622 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1624 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1636 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1638 RoundList.SaveRoundFile;
1652 FControlThread.Terminate;
1653 FControlThread.WaitFor;
1657 FControlThread.Free;
1659 //
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82Á
\82Ä
\92Ç
\89Á
\82³
\82ê
\82½
\83\81\83j
\83\85\81[
\82ð
\8aJ
\95ú
\82·
\82é
1660 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1661 GikoForm.PlugInMenu.items[i].Free;
1663 GikoForm.PlugInMenu.Clear;
1666 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1667 // 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Å
1668 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1669 for i := Length(BoardGroups) - 1 downto 0 do begin
1670 //BoardGroups[i].Clear;
1671 BoardGroups[i].Free;
1675 for i := Length( BBSs ) - 1 downto 0 do begin
1676 if BBSs[ i ] <> nil then
1684 if FEvent <> nil then
1687 // TODO
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\82Ì
\94j
\8aü
1689 if FResPopupBrowser <> nil then begin
1690 TOleControl(FResPopupBrowser).Parent := nil;
1691 FResPopupBrowser.Free;
1697 if FPreviewBrowser <> nil then begin
1698 FPreviewBrowser.Free;
1699 FPreviewBrowser := nil;
1703 LockWindowUpdate(0);
1706 //
\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
1707 procedure TGikoForm.SetBBSMenu;
1710 item : TBBSMenuItem;
1713 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1714 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1716 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1717 CabinetSelectPopupMenu.Items[ i ].Free;
1718 CabinetMenu.Items[ i ].Free;
1719 BBSSelectPopupMenu.Items[ i ].Free;
1725 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1726 for i := Length( BBSs ) - 1 downto 0 do begin
1728 item := TBBSMenuItem.Create( PopupMenu );
1729 item.Caption := BBSs[ i ].Title;
1730 item.Data := BBSs[ i ];
1731 item.OnClick := BBSMenuItemOnClick;
1732 CabinetSelectPopupMenu.Items.Insert( 0, item );
1733 item := TBBSMenuItem.Create( PopupMenu );
1734 item.Caption := BBSs[ i ].Title;
1735 item.Data := BBSs[ i ];
1736 item.OnClick := BBSMenuItemOnClick;
1737 CabinetMenu.Insert( 0, item );
1738 item := TBBSMenuItem.Create( PopupMenu );
1739 item.Caption := BBSs[ i ].Title;
1740 item.Data := BBSs[ i ];
1741 item.OnClick := BBSMenuItemOnClick;
1742 BBSSelectPopupMenu.Items.Insert( 0, Item );
1749 procedure TGikoForm.ReloadBBS;
1754 LockWindowUpdate(Self.Handle);
1756 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1757 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1758 GikoSys.Setting.ShowDialogForAllTabClose := false;
1759 GikoDM.AllTabCloseAction.Execute;
1760 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1761 SetContent(BrowserNullTab);
1762 //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
1763 TreeView.Items.Clear;
1765 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1767 RoundList.SaveRoundFile;
1770 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1776 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1778 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1783 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1785 FavoriteDM.WriteFavorite;
1790 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1791 for i := Length(BoardGroups) - 1 downto 0 do begin
1793 BoardGroups[i].Free;
1799 for i := Length( BBSs ) - 1 downto 0 do begin
1800 if BBSs[ i ] <> nil then
1809 FTreeType := gttNone;
1811 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1813 //
\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Æ)
1814 InitializeBoardPlugIns;
1816 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1818 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1819 for i := Length(BBSs) - 1 downto 0 do begin
1820 if not BBSs[i].IsBoardFileRead then
1821 GikoSys.ReadBoardFile(BBSs[i]);
1824 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1827 ShowBBSTree( BBSs[ 0 ] );
1829 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1830 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1831 TreeView, FTreeType);
1833 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1834 FavoriteDM.ReadFavorite;
1838 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1839 RoundList.LoadRoundBoardFile;
1840 RoundList.LoadRoundThreadFile;
1842 LockWindowUpdate(0);
1846 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1847 (IE 7
\82ª about:..
\82ð
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©
\81A
\83M
\83R
\83i
\83r
\82ª
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©)
1848 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1850 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1858 threadItem : TThreadItem;
1860 Protocol, Host, Path, Document, Port, Bookmark: string;
1865 ActiveFileName: string;
1870 cResPopup: TResPopupBrowser;
1872 //
\83M
\83R
\83i
\83r
\82Í
\83\8c\83X
\83A
\83\93\83J
\81[
\82ª about:blank..
\82Å
\8en
\82Ü
\82é
\82±
\82Æ
\82ð
\8aú
\91Ò
\82µ
\82Ä
\82¢
\82é
\82ª
1873 // IE 7
\82Å
\82Í about:blank..
\82Å
\82Í
\82È
\82 about:..
\82É
\82È
\82é
\82Ì
\82Å
\81A
\92u
\8a·
\82·
\82é(
\93\8a\82°
\82â
\82è)
1874 if Pos('about:..', Text) = 1 then
1875 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1878 if not( TObject(Sender) is TWebBrowser )then
1882 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1883 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1884 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1891 if PreviewTimer.Enabled then
1892 PreviewTimer.Enabled := False;
1893 Application.CancelHint;
1895 if GetActiveContent <> nil then
1896 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1898 ActiveFileName := '';
1900 FActiveContent := nil;
1903 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1904 if (StatusBar.Panels[1].Text = Text2) then begin
1905 if Text2 = '' then begin
1906 if FResPopupBrowser <> nil then begin
1907 if not(Sender is TResPopupBrowser) then
1908 FResPopupBrowser.Clear
1910 TResPopupBrowser(Sender).ChildClear;
1916 StatusBar.Panels[1].Text := Text2;
1919 if FPreviewBrowser <> nil then
1920 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1922 if FResPopupBrowser <> nil then begin
1923 if not(Sender is TResPopupBrowser) then begin
1924 if (FResPopupBrowser.Visible) then begin
1925 FResPopupBrowser.Clear;
1928 TResPopupBrowser(Sender).ChildClear;
1933 if not(Sender is TResPopupBrowser) then
1934 if not GikoSys.Setting.UnActivePopup then
1935 if not GikoForm.Active then
1940 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1941 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1944 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1945 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1946 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1947 if FPreviewBrowser = nil then begin
1948 FPreviewBrowser := TPreviewBrowser.Create(Self);
1949 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1950 TOleControl(FPreviewBrowser).Parent := nil;
1952 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1953 FPreviewURL := Text2;
1954 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1955 PreviewTimer.Enabled := True;
1956 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1957 if Pos('mailto:', Text2) = 1 then begin
1958 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1959 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1961 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1962 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1963 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1964 if (Assigned(e)) then begin
1965 CreateResPopupBrowser;
1966 cResPopup := FResPopupBrowser.CreateNewBrowser;
1967 tmp2 := ZenToHan(e.Get_outerText);
1968 if (GikoSys.IsNumeric(tmp2)) then begin
1969 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1970 wkIntSt := StrToInt64(tmp2);
1971 wkIntTo := StrToInt64(tmp2);
1972 cResPopup.PopupType := gptThread;
1973 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent, wkIntSt, wkIntTo, False, False);
1975 cResPopup.PopupType := gptRaw;
1976 cResPopup.Title := s;
1980 threadItem := GetActiveContent;
1981 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1982 PathRec := Gikosys.Parse2chURL2(URL);
1983 if (PathRec.FNoParam) then begin
1987 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1989 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1991 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1993 URL := GikoSys.GetBrowsableThreadURL( URL );
1994 wkIntSt := PathRec.FSt;
1995 wkIntTo := PathRec.FTo;
1997 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2000 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2002 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2004 end else if wkIntSt > wkIntTo then begin
2009 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2014 threadItem := BBSsFindThreadFromURL( URL );
2016 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2017 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2018 if board <> nil then begin
2019 if not board.IsThreadDatRead then
2020 GikoSys.ReadSubjectFile( board );
2021 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2025 if threadItem <> nil then begin
2026 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2027 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2028 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2032 CreateResPopupBrowser;
2033 cResPopup := FResPopupBrowser.CreateNewBrowser;
2034 cResPopup.PopupType := gptThread;
2035 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2039 if (cResPopup <> nil) then begin
2040 if cResPopup.PopupType = gptRaw then begin
2041 if cResPopup.Title <> '' then begin
2042 cResPopup.TitlePopup;
2045 if cResPopup.RawDocument <> '' then begin
2047 end else if cResPopup.Title <> '' then begin
2048 cResPopup.TitlePopup;
2055 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2059 FEnabledCloseButton := Enabled;
2060 SysMenu := GetSystemMenu(Handle, False);
2062 if Enabled then begin
2063 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2065 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2068 DrawMenuBar(Handle);
2071 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2072 var AllowChange: Boolean);
2074 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2075 // if FTreeType = gtt2ch then
2076 // FSortIndex := -1;
2079 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2080 Shift: TShiftState);
2084 if GetActiveList is TBoard then begin
2086 VK_BACK:; // UpFolderButtonClick(Sender);
2087 VK_SPACE: ListDoubleClick(Shift);
2088 VK_RETURN: ListClick;
2091 if ListView.Selected <> nil then begin
2092 pos.X := ListView.Column[ 0 ].Width;
2093 pos.Y := ListView.Selected.Top;
2095 pos.X := ListView.Left;
2096 pos.Y := ListView.Top;
2098 Windows.ClientToScreen( ListView.Handle, pos );
2099 ListPopupMenu.Popup( pos.X, pos.Y );
2102 end else begin // TBBS, TCategory
2104 VK_BACK:; // UpFolderButtonClick(Sender);
2105 VK_SPACE: ListClick;
2106 VK_RETURN: ListDoubleClick(Shift);
2109 if ListView.Selected <> nil then begin
2110 pos.X := ListView.Column[ 0 ].Width;
2111 pos.Y := ListView.Selected.Top;
2113 pos.X := ListView.Left;
2114 pos.Y := ListView.Top;
2116 Windows.ClientToScreen( ListView.Handle, pos );
2117 ListPopupMenu.Popup( pos.X, pos.Y );
2123 function TGikoForm.GetHttpState: Boolean;
2125 Result := FHttpState;
2128 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2129 Column: TListColumn);
2133 vSortIndex : Integer;
2134 vSortOrder : Boolean;
2136 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2137 if TObject( FActiveList ) is TBBS then begin
2138 orderList := GikoSys.Setting.BBSColumnOrder;
2139 vSortIndex := GikoSys.Setting.BBSSortIndex;
2140 vSortOrder := GikoSys.Setting.BBSSortOrder;
2141 end else if TObject( FActiveList ) is TCategory then begin
2142 orderList := GikoSys.Setting.CategoryColumnOrder;
2143 vSortIndex := GikoSys.Setting.CategorySortIndex;
2144 vSortOrder := GikoSys.Setting.CategorySortOrder;
2145 end else if TObject( FActiveList ) is TBoard then begin
2146 orderList := GikoSys.Setting.BoardColumnOrder;
2147 vSortIndex := GikoSys.Setting.BoardSortIndex;
2148 vSortOrder := GikoSys.Setting.BoardSortOrder;
2152 id := Integer( orderList[ idx ] );
2155 if vSortIndex = id then
2156 vSortOrder := not vSortOrder
2158 vSortOrder := id = 0;
2161 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2164 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2165 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2169 DefaultDraw := True;
2171 DefaultDraw := False;
2172 if (cdsSelected in State) or (cdsHot in State) then begin
2173 Sender.Canvas.Brush.Color := clHighlight;
2174 Sender.Canvas.Font.Color := clHighlightText;
2176 Sender.Canvas.Brush.Color := clBtnFace;
2177 Sender.Canvas.Font.Color := clBtnText;
2179 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2180 Sender.Canvas.FillRect(ARect);
2181 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2184 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2189 Nodes := TreeView.Items;
2191 for i := 0 to Nodes.Count - 1 do begin
2192 if Nodes.Item[i].Data = Data then begin
2193 Result := Nodes.Item[i];
2200 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2201 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2202 Headers: OleVariant; var Cancel: WordBool);
2207 kMenuName: string = 'menu:';
2212 if Pos(kMenuName, URL) <> 0 then begin
2213 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2215 if not GikoSys.IsNumeric(sNo) then Exit;
2219 KokoPopupMenu.PopupComponent := nil;
2220 if (Sender is TComponent) then
2221 KokoPopupMenu.PopupComponent := TComponent(Sender);
2222 KokoPopupMenu.Tag := StrToInt(sNo);
2223 KokoPopupMenu.Popup(p.x, p.y);
2224 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2225 Cancel := not GikoSys.Setting.OpenMailer;
2230 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2231 const ARect: TRect; var DefaultDraw: Boolean);
2235 IsBoardNode: Boolean;
2241 Category: TCategory;
2245 DefaultDraw := True;
2247 if FTreeType = gttHistory then Exit;
2249 TreeView.Canvas.Font.Color := clBlue;
2250 IsBoardNode := False;
2251 for i := 0 to TreeView.Items.Count - 1 do begin
2253 if not TreeView.Items[i].IsVisible then
2256 if TObject(TreeView.Items[i].Data) is TCategory then begin
2257 if TreeView.Items[i].Expanded then
2260 IsBoardNode := False;
2261 Category := TCategory(TreeView.Items[i].Data);
2262 for j := 0 to Category.Count - 1 do begin
2263 Board := Category.Items[j];
2264 if Board <> nil then begin
2265 if Board.UnRead > 0 then begin
2273 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2274 IsBoardNode := True;
2275 Board := TBoard(TreeView.Items[i].Data);
2277 Cnt := Board.UnRead;
2283 Bitmap := TBitmap.Create;
2285 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2286 Bitmap.Canvas.Font.Style := [fsBold];
2287 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2292 NodeRect := TreeView.Items[i].DisplayRect(True);
2295 CntText := '(' + IntToStr(Cnt) + ')'
2296 else if Cnt = 1 then
2300 TextWidth := TreeView.Canvas.TextWidth(CntText);
2302 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2304 NodeRect.Left + NodeWidth + TextWidth + 8,
2306 DrawText(TreeView.Canvas.Handle,
2310 DT_SINGLELINE or DT_VCENTER);
2312 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2315 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2316 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2319 Category: TCategory;
2322 DefaultDraw := True;
2324 if FTreeType = gttHistory then Exit;
2326 TreeView.Canvas.Font.Style := [];
2327 if Node <> nil then begin
2328 if TObject(Node.Data) is TCategory then begin
2329 Category := TCategory(Node.Data);
2330 for i := 0 to Category.Count - 1 do begin
2331 Board := Category.Items[i];
2332 if Board <> nil then begin
2333 if Board.UnRead > 0 then begin
2334 TreeView.Canvas.Font.Style := [fsBold];
2339 end else if TObject(Node.Data) is TBoard then begin
2340 Board := TBoard(Node.Data);
2341 if Board.UnRead > 0 then
2342 TreeView.Canvas.Font.Style := [fsBold];
2347 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2349 TreeView.Invalidate;
2351 if TObject(Node.Data) is TBBS then begin
2352 TBBS(Node.Data).NodeExpand := True;
2353 end else if TObject(Node.Data) is TCategory then begin
2354 TCategory(Node.Data).NodeExpand := True;
2355 end else if TObject(Node.Data) is TBoard then begin
2356 TBoard(Node.Data).NodeExpand := True;
2360 procedure TGikoForm.ListViewAllSelect;
2365 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2367 AddMessageList(Msg, nil, Icon);
2369 // *************************************************************************
2370 //!
\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
2371 // *************************************************************************
2372 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2376 boardPlugIn : TBoardPlugIn;
2381 if Item.DownType = gdtBoard then
2382 ATitle := Item.Board.Title
2384 ATitle := Item.ThreadItem.Title;
2386 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2388 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2390 if Item.DownType = gdtBoard then begin
2393 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2394 if GetActiveList = Item.Board then begin
2396 //
\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é
2397 if (GikoSys.Setting.AutoSortThreadList) then begin
2398 GikoSys.Setting.BoardSortIndex := 0;
2399 GikoSys.Setting.BoardSortOrder := True;
2401 Sort.SetSortDate(Now());
2402 SetActiveList(Item.Board);
2404 Item.Board.Modified := True;
2405 Item.Board.IsThreadDatRead := True;
2408 end else if Item.DownType = gdtThread then begin
2411 Item.ThreadItem.NewArrival := True;
2412 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2413 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2414 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2415 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2416 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2417 Item.ThreadItem.Title := Res.FTitle;
2418 ATitle := Item.ThreadItem.Title;
2419 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2420 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2421 ATitle := Res.FTitle;
2423 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2424 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2425 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2429 if GikoSys.Setting.BrowserTabVisible then begin
2430 if GetActiveContent = Item.ThreadItem then
2431 InsertBrowserTab(Item.ThreadItem)
2432 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2433 InsertBrowserTab(Item.ThreadItem, True)
2435 InsertBrowserTab(Item.ThreadItem, False);
2438 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2439 InsertBrowserTab(Item.ThreadItem);
2442 Application.ProcessMessages;
2444 if Item.State = gdsComplete then begin
2446 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2450 PlaySound('NewDiff');
2451 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2456 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2457 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2458 Item.ThreadItem.Round := False;
2459 //Item.ThreadItem.RoundName := '';
2460 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);
2463 //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
2464 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2465 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2466 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2467 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2468 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2469 case GikoForm.ViewType of
2470 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2471 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2472 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2473 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2474 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2475 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2478 RefreshListView(Item.ThreadItem);
2481 end else if Item.State = gdsNotModify then begin
2483 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2484 //SetContent(Item.ThreadItem);
2485 InsertBrowserTab(Item.ThreadItem);
2487 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2488 PlaySound('NoChange');
2489 Screen.Cursor := crDefault;
2490 end else if Item.State = gdsAbort then begin
2492 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2493 end else if Item.State = gdsError then begin
2498 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2499 // if Item.ResponseCode = 302 then
2500 // 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);
2506 if FWorkCount < 0 then FWorkCount := 0;
2507 if FWorkCount = 0 then begin
2509 Animate.Active := False;
2511 Screen.Cursor := crDefault;
2518 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2520 // SetProgressValue(Number, 0, AWorkCountMax);
2521 // ProgressBar.Visible := True;
2522 ProgressBar.Position := 0;
2523 ProgressBar.Max := AWorkCountMax;
2524 FDownloadTitle := AWorkTitle;
2525 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2526 FDownloadMax := AWorkCountMax;
2529 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2531 ProgressBar.Position := 0;
2532 if FDownloadMax <> 0 then
2533 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2536 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2538 ProgressBar.Position := AWorkCount;
2539 // SetProgressValue(Number, AWorkCount);
2540 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2543 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2545 ListItem: TListItem;
2547 MessageListView.Items.BeginUpdate;
2549 ListItem := MessageListView.Items.Add;
2550 ListItem.Caption := ACaption;
2551 ListItem.Data := AObject;
2552 ListItem.MakeVisible(False);
2554 gmiOK: ListItem.ImageIndex := 0;
2555 gmiSAD: ListItem.ImageIndex := 1;
2556 gmiNG: ListItem.ImageIndex := 2;
2557 gmiWhat: ListItem.ImageIndex := 3;
2560 MessageListView.Items.EndUpdate;
2564 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2565 procedure TGikoForm.ReleaseOldestBrowser;
2569 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2570 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2571 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2572 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2578 function TGikoForm.InsertBrowserTab(
2579 ThreadItem : TThreadItem;
2580 ActiveTab : Boolean = True
2583 i, j, idx : Integer;
2584 favItem : TFavoriteThreadItem;
2585 newBrowser : TBrowserRecord;
2590 if Threaditem = nil then Exit;
2592 if ThreadItem.IsLogFile then begin
2593 //
\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é
2594 //
\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é
2595 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2596 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2597 j := FBrowsers.IndexOf(FActiveContent.Browser);
2598 if j = BROWSER_COUNT - 1 then
2599 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2601 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2602 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2605 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2606 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2607 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2608 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2609 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2610 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2611 ReleaseOldestBrowser;
2612 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2613 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2614 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2616 if ActiveTab then begin
2617 BrowserTab.TabIndex := i;
2618 BrowserTab.OnChange(nil);
2625 idx := BrowserTab.TabIndex;
2626 newBrowser := TBrowserRecord.Create;
2627 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2628 ReleaseOldestBrowser;
2629 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2630 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2631 newBrowser.thread := ThreadItem;
2632 newBrowser.Repaint := true;
2634 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2635 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2636 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2637 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2641 if ActiveTab then begin
2642 BrowserTab.TabIndex := 0;
2644 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2645 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2646 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2647 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2651 if ActiveTab then begin
2652 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2653 BrowserTab.TabIndex := 0
2655 BrowserTab.TabIndex := i;
2658 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2660 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2661 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2662 TWebBrowser(FBrowsers[1]) then begin
2667 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2670 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2671 if (ins < 0) then begin
2674 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2675 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2676 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2677 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2679 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2684 if ActiveTab then begin
2685 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2686 BrowserTab.TabIndex := 0
2688 BrowserTab.TabIndex := ins;
2691 Result := newBrowser;
2692 if(ActiveTab) or (idx = -1) then begin
2693 BrowserTab.OnChange(nil);
2696 if BrowserNullTab = nil then begin
2697 BrowserNullTab := TBrowserRecord.Create;
2698 BrowserNullTab.Browser := Browser;
2700 // if BrowserNullTab.thread <> ThreadItem then begin
2701 // BrowserNullTab.Movement := '';
2703 BrowserNullTab.thread := ThreadItem;
2704 Result := BrowserNullTab;
2705 BrowserTab.TabIndex := -1;
2706 SetContent(BrowserNullTab);
2709 if GikoSys.Setting.URLDisplay then
2710 AddressComboBox.Text := ThreadItem.URL;
2714 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2722 ThreadItem: TThreadItem;
2723 Thread: TBrowserRecord;
2724 ThreadTitle, ThreadPTitle: string;
2725 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2728 idx := BrowserTab.TabIndex;
2729 if (FActiveContent <> nil) and
2730 (FActiveContent.Thread <> Thread.Thread) and
2731 (FActiveContent.Browser <> nil) and
2732 (Assigned(FActiveContent.Browser.Document)) then begin
2735 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2738 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2743 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2744 Thread.Browser.Navigate(BLANK_HTML);
2745 BrowserBoardNameLabel.Caption := '';
2746 ItemBoardImage.Picture := nil;
2747 BrowserNameLabel.Caption := '';
2748 ItemImage.Picture := nil;
2749 BrowserNullTab.Thread := nil;
2750 //TOleControl(BrowserNullTab.Browser).Visible := true;
2751 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2752 FActiveContent := nil;
2754 end else if Thread.Browser = nil then begin
2755 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2756 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2757 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2758 ReleaseOldestBrowser;
2759 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2760 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2763 ThreadTitle := Thread.Thread.Title;
2764 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2765 //ThreadScrollTop := Thread.Thread.ScrollTop;
2766 ThreadIsLog := Thread.Thread.IsLogFile;
2767 ThreadItem := Thread.Thread;
2768 ThreadNewArraical := Thread.Thread.NewArrival;
2769 //ThreadUnRead := Thread.Thread.UnRead;
2770 BBSID := ThreadItem.ParentBoard.BBSID;
2771 FileName := ThreadItem.FileName;
2773 if GetCapture = ListView.Handle then
2776 Screen.Cursor := crHourGlass;
2780 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2781 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2782 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2784 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2785 if (not Assigned(Thread.Browser.Document)) then begin
2786 Thread.Browser.Navigate('about:blank');
2788 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2789 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2790 Application.ProcessMessages;
2791 if idx <> BrowserTab.TabIndex then begin
2796 if (Thread <> nil) and (ThreadItem <>nil) then begin
2797 BrowserBoardNameLabel.Caption := ThreadPTitle;
2798 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2799 BrowserNameLabel.Caption := ThreadTitle;
2800 ItemImage.Picture := nil;
2802 if ThreadNewArraical then
2803 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2805 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2807 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2809 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2810 BrowserNameLabel.Left := ItemImage.Left + 20;
2813 //ActiveContent
\81@
\82Ì
\8dX
\90V
2814 FActiveContent := Thread;
2816 if not ThreadIsLog then begin
2817 Self.Caption := GikoDataModule.CAPTION_NAME ;
2818 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2819 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2821 Thread.Browser.BringToFront;
2822 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2823 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2825 doc.charset := 'Shift_JIS';
2832 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2833 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2834 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2835 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2836 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2837 //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«
2838 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2839 if Thread.Repaint then begin
2840 Thread.Repaint := false;
2842 Thread.Browser.OnStatusTextChange := nil;
2843 LockWindowUpdate(Thread.Browser.ParentWindow);
2844 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2845 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2846 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2850 RefreshListView(ThreadItem);
2852 Screen.Cursor := crDefault;
2856 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2859 if FActiveContent <> nil then begin
2860 Result := FActiveContent.Thread;
2862 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2863 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2864 Result := FResPopupBrowser.CurrentBrowser.Thread;
2874 procedure TGikoForm.SetActiveList(Obj: TObject);
2878 // if FActiveList <> Obj then begin
2881 if ListView.Selected <> nil then
2882 idx := ListView.Selected.Index
2888 ListView.Items.Count := 0;
2889 ListView.Items.Clear;
2890 ListView.Selected := nil;
2891 // ListView.Columns.Clear;
2892 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2893 and (FActiveContent.Thread.IsLogFile) then begin
2895 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2897 on E: Exception do begin
2898 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2899 //
\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é
2900 ReleaseBrowser(FActiveContent);
2901 FActiveContent.Thread := nil;
2902 Self.Caption := GikoDataModule.CAPTION_NAME;
2906 Self.Caption := GikoDataModule.CAPTION_NAME;
2907 //Application.Title := CAPTION_NAME;
2909 // ActiveListColumnSave;
2911 Screen.Cursor := crHourGlass;
2913 if Obj is TBBS then begin
2914 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2915 end else if Obj is TCategory then begin
2916 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2917 end else if Obj is TBoard then begin
2918 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2921 Screen.Cursor := crDefault;
2924 if idx >= 0 then begin
2925 if idx >= ListView.Items.Count then
2926 idx := ListView.Items.Count - 1;
2927 ListView.ItemIndex := idx;
2928 ListView.ItemFocused := ListView.Items.Item[ idx ];
2934 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2935 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2936 function TGikoForm.GetActiveList: TObject;
2938 Result := FActiveList;
2941 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2943 SetListViewType(AViewType, '', False);
2946 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2951 for i := Length( BBSs ) - 1 downto 0 do begin
2952 BBSs[i].SelectText := SelectText;
2953 BBSs[i].KubetsuChk := KubetsuChk;
2955 ViewType := AViewType;
2956 if ActiveList is TBoard then begin
2957 Board := TBoard(ActiveList);
2959 //gvtAll: ListView.Items.Count := Board.Count;
2960 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2961 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2962 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2963 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2964 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2968 SetActiveList(Board);
2972 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2973 const ARect: TRect; var DefaultDraw: Boolean);
2979 if ListView.Items.Count = 0 then begin
2980 DefaultDraw := true;
2981 ListView.Canvas.Brush.Color := ListView.Color;
2982 ListView.Canvas.FillRect(ARect);
2986 ListView.Canvas.Font.Color := clWindowText;
2987 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2990 ListView.Canvas.Font.Color := clBlue;
2991 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';
2994 ListView.Canvas.Font.Color := clGreen;
2995 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2998 ListView.Canvas.Font.Color := clFuchsia;
2999 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';
3002 ListView.Canvas.Font.Color := clMaroon;
3003 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3006 ListView.Canvas.Font.Color := clNavy;
3007 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';
3008 if GetActiveList is TBoard then
3009 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3017 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3018 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3019 ListView.Canvas.TextOut(p.X, p.Y, s);
3021 DefaultDraw := True;
3025 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3027 Item: TDownloadItem;
3029 if not Board.IsThreadDatRead then
3030 GikoSys.ReadSubjectFile(Board);
3031 Item := TDownloadItem.Create;
3033 Item.Board := Board;
3034 Item.DownType := gdtBoard;
3035 Item.ForceDownload := ForceDownload;
3036 FControlThread.AddItem(Item);
3037 if FWorkCount = 0 then begin
3039 Animate.Active := True;
3042 Screen.Cursor := crAppStart;
3050 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3052 Item: TDownloadItem;
3054 Item := TDownloadItem.Create;
3056 Item.ThreadItem := ThreadItem;
3057 Item.DownType := gdtThread;
3058 Item.ForceDownload := ForceDownload;
3059 FControlThread.AddItem(Item);
3060 if FWorkCount = 0 then begin
3062 Animate.Active := True;
3065 Screen.Cursor := crAppStart;
3073 procedure TGikoForm.PlaySound(SoundEventName: string);
3077 if not GikoSys.Setting.Mute then begin
3078 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3079 if FileExists(FileName) then begin
3080 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3081 sndPlaySound(nil, SND_SYNC);
3082 Application.ProcessMessages;
3084 sndPlaySound(PChar(FileName), SND_ASYNC);
3090 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3091 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3093 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3096 procedure TGikoForm.ShowBBSTreeOld(
3104 FavoriteTreeView.Visible := False;
3105 FavoriteToolBar.Hide;
3106 TreeView.Visible := True;
3108 b := CabinetSelectPopupMenu.Items.Count - 1;
3109 for i := 0 to b do begin
3110 item := CabinetSelectPopupMenu.Items[ i ];
3111 if item is TBBSMenuItem then begin
3112 if TBBSMenuItem( item ).Data = inBBS then begin
3113 item.Checked := True;
3114 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3115 CabinetMenu.Items[ i ].Checked := True;
3116 GikoSys.Setting.CabinetIndex := i;
3120 item.Checked := False;
3121 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3122 CabinetMenu.Items[ i ].Checked := False;
3124 CabinetSelectToolButton.Caption := inBBS.Title;
3126 GikoDM.CabinetHistoryAction.Checked := False;
3127 GikoDM.CabinetFavoriteAction.Checked := False;
3129 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3130 FTreeType := gtt2ch;
3131 HistoryToolBar.Hide;
3132 FActiveBBS := inBBS;
3133 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3134 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3135 //?c???[??g?b?v?????I????
3136 if GetActiveList = nil then
3137 TreeView.Selected := TreeView.Items[0]
3139 for i := 0 to TreeView.Items.Count - 1 do begin
3140 if TreeView.Items[i].Data = GetActiveList then begin
3141 TreeView.Selected := TreeView.Items[i];
3145 TreeView.Selected := TreeView.Items[0]
3153 procedure TGikoForm.ShowBBSTree(
3162 FavoriteTreeView.Visible := False;
3163 FavoriteToolBar.Hide;
3164 TreeView.Visible := True;
3166 b := CabinetSelectPopupMenu.Items.Count - 1;
3167 for i := 0 to b do begin
3168 item := CabinetSelectPopupMenu.Items[ i ];
3169 if item is TBBSMenuItem then begin
3170 if TBBSMenuItem( item ).Data = inBBS then begin
3171 item.Checked := True;
3172 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3173 CabinetMenu.Items[ i ].Checked := True;
3174 GikoSys.Setting.CabinetIndex := i;
3178 item.Checked := False;
3179 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3180 CabinetMenu.Items[ i ].Checked := False;
3182 CabinetSelectToolButton.Caption := inBBS.Title;
3184 GikoDM.CabinetHistoryAction.Checked := False;
3185 GikoDM.CabinetFavoriteAction.Checked := False;
3187 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3188 or (not (CabinetPanel.Visible)) then begin
3189 FTreeType := gtt2ch;
3190 HistoryToolBar.Hide;
3191 FActiveBBS := inBBS;
3192 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3193 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3194 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3195 if GetActiveList = nil then begin
3197 TreeClick( TreeView.Items[0] );
3201 for i := 0 to TreeView.Items.Count - 1 do begin
3202 if TreeView.Items[i].Data = GetActiveList then begin
3203 TreeClick( TreeView.Items[i] );
3207 TreeClick( TreeView.Items[0] );
3215 procedure TGikoForm.ShowHistoryTree;
3220 if CabinetPanel.Visible then begin
3221 if FTreeType = gttHistory then begin
3222 CabinetVisible( False );
3223 GikoDM.CabinetHistoryAction.Checked := False;
3225 GikoDM.CabinetHistoryAction.Checked := True;
3228 CabinetVisible( True );
3229 GikoDM.CabinetHistoryAction.Checked := True;
3232 // BBS...BBS, History, Favorite
3233 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3235 FavoriteTreeView.Visible := False;
3236 TreeView.Visible := True;
3238 GikoDM.CabinetBBSAction.Checked := False;
3239 GikoDM.CabinetFavoriteAction.Checked := False;
3241 if FTreeType <> gttHistory then begin
3242 b := CabinetSelectPopupMenu.Items.Count - 1;
3243 for i := 0 to b do begin
3244 item := CabinetSelectPopupMenu.Items[ i ];
3245 if item is TBBSMenuItem then begin
3246 item.Checked := False;
3247 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3248 CabinetMenu.Items[ i ].Checked := False;
3252 FTreeType := gttHistory;
3253 HistoryToolBar.Show;
3254 FavoriteToolBar.Hide;
3255 FHistoryList.SetTreeNode( TreeView );
3256 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3260 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3262 ChangeEvent: TTVChangedEvent;
3263 ChangingEvent: TTVChangingEvent;
3267 if Item is TCategory then
3268 bbs := TCategory( Item ).ParenTBBS
3269 else if Item is TBoard then
3270 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3274 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3275 if Item <> FActiveList then begin
3277 ChangingEvent := nil;
3279 if not CallEvent then begin
3280 ChangeEvent := TreeView.OnChange;
3281 ChangingEvent := TreeView.OnChanging;
3284 if not CallEvent then begin
3285 TreeView.OnChange := nil;
3286 TreeView.OnChanging := nil;
3288 //Application.ProcessMessages;
3289 for i := 0 to TreeView.Items.Count - 1 do begin
3290 if TreeView.Items[i].Data = Item then begin
3291 TreeView.Items[i].Selected := True;
3293 TreeClick(TreeView.Items[i]);
3297 //Application.ProcessMessages;
3299 if not CallEvent then begin
3300 TreeView.OnChange := ChangeEvent;
3301 TreeView.OnChanging := ChangingEvent;
3306 if Item <> FActiveList then begin
3307 ActiveListColumnSave;
3308 if (Item is TBBS) or (Item is TCategory) then begin
3309 ListView.Columns.Clear;
3310 SetActiveList( Item );
3311 end else if Item is TBoard then begin
3312 if not TBoard( Item ).IsThreadDatRead then begin
3313 Screen.Cursor := crHourGlass;
3315 if not TBoard( Item ).IsThreadDatRead then
3316 GikoSys.ReadSubjectFile(TBoard( Item ));
3318 Screen.Cursor := crDefault;
3321 Sort.SetSortDate(Now());
3322 SetActiveList( Item );
3327 if Item is TBoard then begin // not TCategory
3328 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3329 if GikoSys.Setting.ListWidthState = glsMax then begin
3330 GikoDM.BrowserMinAction.Execute;
3331 if GikoForm.Visible then
3335 if GikoSys.Setting.ListHeightState = glsMax then begin
3336 GikoDM.BrowserMinAction.Execute;
3337 if GikoForm.Visible then
3344 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3345 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3347 listItem : TListItem;
3348 threadItem : TThreadItem;
3355 if not (GetActiveList is TBoard) then Exit;
3356 listItem := ListView.GetItemAt( X, Y );
3357 if listItem = nil then Exit;
3358 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3360 threadItem := TThreadItem(ListItem.Data);
3361 InsertBrowserTab(threadItem, False);
3362 if threadItem.IsLogFile then
3363 ListView.UpdateItems(listItem.Index, listItem.Index);
3367 //
\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Å
3368 if (ssDouble in Shift) then
3369 ListDoubleClick(Shift)
3377 Windows.ClientToScreen( ListView.Handle, pos );
3378 ListPopupMenu.Popup( pos.X, pos.Y );
3384 procedure TGikoForm.ListClick;
3386 ListItem: TListItem;
3387 ThreadItem: TThreadItem;
3389 if ListView.SelCount <> 1 then Exit;
3390 ListItem := ListView.Selected;
3391 if ListItem = nil then Exit;
3392 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3394 ThreadItem := TThreadItem(ListItem.Data);
3395 if ThreadItem.IsLogFile then begin
3396 InsertBrowserTab(ThreadItem);
3397 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3399 InsertBrowserTab(ThreadItem);
3402 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3403 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3404 if GikoSys.Setting.ListWidthState = glsMin then begin
3405 GikoDM.BrowserMaxAndFocusAction.Execute;
3408 if GikoSys.Setting.ListHeightState = glsMin then begin
3409 GikoDM.BrowserMaxAndFocusAction.Execute;
3415 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3417 ThreadItem: TThreadItem;
3420 shiftDown := (ssShift in Shift);
3422 if ListView.Selected = nil then Exit;
3424 if TObject(ListView.Selected.Data) is TCategory then begin
3425 SelectTreeNode(ListView.Selected.Data, True);
3426 end else if TObject(ListView.Selected.Data) is TBoard then begin
3427 SelectTreeNode(ListView.Selected.Data, True)
3428 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3429 Application.ProcessMessages;
3430 ThreadItem := TThreadItem(ListView.Selected.Data);
3431 DownloadContent(ThreadItem, shiftDown);
3433 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3434 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3435 if GikoSys.Setting.ListWidthState = glsMin then begin
3436 GikoDM.BrowserMaxAction.Execute;
3437 GikoDM.SetFocusForBrowserAction.Execute;
3440 if GikoSys.Setting.ListHeightState = glsMin then begin
3441 GikoDM.BrowserMaxAction.Execute;
3442 GikoDM.SetFocusForBrowserAction.Execute;
3449 procedure TGikoForm.BrowserMovement(const AName: string);
3451 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3452 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3453 and (FActiveContent <> nil) then begin
3454 FActiveContent.Move(AName);
3457 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3458 procedure TGikoForm.BrowserMovement(scroll: Integer);
3460 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3461 and (FActiveContent <> nil) then begin
3462 FActiveContent.Move(scroll);
3465 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3467 if TObject(Node.Data) is TBBS then begin
3468 TBBS(Node.Data).NodeExpand := False;
3469 end else if TObject(Node.Data) is TCategory then begin
3470 TCategory(Node.Data).NodeExpand := False;
3471 end else if TObject(Node.Data) is TBoard then begin
3472 TBoard(Node.Data).NodeExpand := False;
3474 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3475 TreeClick(TreeView.Selected);
3479 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3481 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3483 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3485 TreeSplitter.Visible := isVisible;
3486 CabinetPanel.Visible := isVisible;
3487 GikoDM.CabinetVisibleAction.Checked := isVisible;
3490 procedure TGikoForm.SelectListItem(List: TList);
3492 TmpListItem: TListItem;
3496 TmpListItem := ListView.Selected;
3497 while TmpListItem <> nil do begin
3498 List.Add(TmpListItem.Data);
3499 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3504 procedure TGikoForm.FormResize(Sender: TObject);
3507 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3508 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3510 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3511 if GikoSys.Setting.ListWidthState = glsMin then begin
3512 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3513 ViewPanel.Width := ThreadMainPanel.Width - 80;
3516 if GikoSys.Setting.ListHeightState = glsMin then begin
3517 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3518 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3522 FIsIgnoreResize := rtResizing;
3523 PostMessage( Handle, USER_RESIZED, 0, 0 );
3528 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3532 FTabHintIndex := -1;
3533 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3534 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3535 DeleteTab(i, BrowserTab.TabIndex);
3540 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3544 FTabHintIndex := -1;
3545 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3546 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3547 DeleteTab(i, BrowserTab.TabIndex);
3552 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3558 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3559 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3560 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3563 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3565 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3566 FActiveContent := nil;
3567 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3568 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3570 FBrowsers.Move(j, BROWSER_COUNT - 1);
3572 BrowserTab.Tabs.BeginUpdate;
3574 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3575 if ( BrowserTab.Tabs.Count - 1 = index ) and
3576 ( BrowserTab.TabRect(index).Left
3577 <= BrowserTab.DisplayRect.Left ) then begin
3578 BrowserTab.ScrollTabs(-1);
3580 BrowserTab.Tabs.Delete(index);
3581 if selectIndex > index then begin
3582 BrowserTab.TabIndex := selectIndex - 1;
3584 if BrowserTab.Tabs.Count -1 >= selectIndex then
3585 BrowserTab.TabIndex := selectIndex
3587 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3590 BrowserTab.Tabs.EndUpdate;
3592 if BrowserTab.Tabs.Count = 0 then begin
3593 BrowserNullTab.Thread := nil;
3595 if(BrowserTab.TabIndex <> -1) and
3596 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3597 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3598 ReleaseOldestBrowser;
3600 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3601 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3602 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3603 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3606 if( FActiveContent = nil) then
3607 BrowserTab.OnChange(nil);
3609 function TGikoForm.Hook(var Message: TMessage): Boolean;
3611 //
\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Ì
3612 //
\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ð
3616 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3618 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3622 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3624 bBoard, bCategory : Boolean;
3626 bBoard := (GetActiveList is TBoard);
3627 bCategory := (GetActiveList is TCategory);
3628 ItemRoundPMenu.Visible := bBoard;
3629 ItemReservPMenu.Visible := bBoard;
3630 LPMSep01.Visible := bBoard;
3631 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3632 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3633 LPMSep02.Visible := bCategory or bBoard;
3634 KidokuPMenu.Visible := bBoard;
3635 MidokuPMenu.Visible := bBoard;
3636 UrlCopyPMenu.Visible := bCategory or bBoard;
3637 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3638 AllSelectPMenu.Visible := bCategory or bBoard;
3639 LPMSep05.Visible := bCategory or bBoard;
3640 DeletePMenu.Visible := bBoard;
3641 LPMSep06.Visible := bCategory or bBoard;
3642 BoardFavoriteAddMenu.Visible := bCategory;
3643 ThreadFavoriteAddMenu.Visible := bBoard;
3644 SaveThreadFile.Visible := bBoard;
3645 AddRoundNameMenu(ItemReservPMenu);
3646 AddRoundNameMenu(ListReservPMenu);
3649 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3651 FClickNode := TreeView.Selected;
3652 if FClickNode = nil then begin
3653 TreeSelectThreadPupupMenu.Visible := False;
3654 TreeSelectBoardPupupMenu.Visible := False;
3655 TPMSep01.Visible := False;
3656 TreeSelectURLPupupMenu.Visible := False;
3657 TreeSelectNamePupupMenu.Visible := False;
3658 TreeSelectNameURLPupupMenu.Visible := False;
3659 TreeSelectFavoriteAddPupupMenu.Visible := False;
3660 TreeSelectLogDeleteSeparator.Visible := False;
3661 TreeSelectLogDeletePopupMenu.Visible := False;
3662 end else if TObject(FClickNode.Data) is TBoard then begin
3663 TreeSelectThreadPupupMenu.Visible := False;
3664 TreeSelectBoardPupupMenu.Visible := True;
3665 TPMSep01.Visible := True;
3666 TreeSelectURLPupupMenu.Visible := True;
3667 TreeSelectNamePupupMenu.Visible := True;
3668 TreeSelectNameURLPupupMenu.Visible := True;
3669 TreeSelectFavoriteAddPupupMenu.Visible := True;
3670 TreeSelectLogDeleteSeparator.Visible := False;
3671 TreeSelectLogDeletePopupMenu.Visible := False;
3672 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3673 TreeSelectThreadPupupMenu.Visible := False;
3674 TreeSelectBoardPupupMenu.Visible := True;
3675 TPMSep01.Visible := True;
3676 TreeSelectURLPupupMenu.Visible := True;
3677 TreeSelectNamePupupMenu.Visible := True;
3678 TreeSelectNameURLPupupMenu.Visible := True;
3679 TreeSelectFavoriteAddPupupMenu.Visible := True;
3680 TreeSelectLogDeleteSeparator.Visible := False;
3681 TreeSelectLogDeletePopupMenu.Visible := False;
3682 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3683 TreeSelectThreadPupupMenu.Visible := True;
3684 TreeSelectBoardPupupMenu.Visible := False;
3685 TPMSep01.Visible := True;
3686 TreeSelectURLPupupMenu.Visible := True;
3687 TreeSelectNamePupupMenu.Visible := True;
3688 TreeSelectNameURLPupupMenu.Visible := True;
3689 TreeSelectFavoriteAddPupupMenu.Visible := True;
3690 TreeSelectLogDeleteSeparator.Visible := True;
3691 TreeSelectLogDeletePopupMenu.Visible := True;
3692 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3693 TreeSelectThreadPupupMenu.Visible := True;
3694 TreeSelectBoardPupupMenu.Visible := False;
3695 TPMSep01.Visible := True;
3696 TreeSelectURLPupupMenu.Visible := True;
3697 TreeSelectNamePupupMenu.Visible := True;
3698 TreeSelectNameURLPupupMenu.Visible := True;
3699 TreeSelectFavoriteAddPupupMenu.Visible := True;
3700 TreeSelectLogDeleteSeparator.Visible := True;
3701 TreeSelectLogDeletePopupMenu.Visible := True;
3702 end else if (TObject(FClickNode.Data) is TCategory) then begin
3703 TreeSelectThreadPupupMenu.Visible := False;
3704 TreeSelectBoardPupupMenu.Visible := False;
3705 TPMSep01.Visible := False;
3706 TreeSelectURLPupupMenu.Visible := False;
3707 TreeSelectNamePupupMenu.Visible := True;
3708 TreeSelectNameURLPupupMenu.Visible := False;
3709 TreeSelectFavoriteAddPupupMenu.Visible := False;
3710 TreeSelectLogDeleteSeparator.Visible := False;
3711 TreeSelectLogDeletePopupMenu.Visible := False;
3712 end else if FClickNode.IsFirstNode then begin
3713 TreeSelectThreadPupupMenu.Visible := False;
3714 TreeSelectBoardPupupMenu.Visible := False;
3715 TPMSep01.Visible := False;
3716 TreeSelectURLPupupMenu.Visible := False;
3717 TreeSelectNamePupupMenu.Visible := True;
3718 TreeSelectNameURLPupupMenu.Visible := False;
3719 TreeSelectFavoriteAddPupupMenu.Visible := False;
3720 TreeSelectLogDeleteSeparator.Visible := False;
3721 TreeSelectLogDeletePopupMenu.Visible := False;
3723 TreeSelectThreadPupupMenu.Visible := False;
3724 TreeSelectBoardPupupMenu.Visible := False;
3725 TPMSep01.Visible := False;
3726 TreeSelectURLPupupMenu.Visible := False;
3727 TreeSelectNamePupupMenu.Visible := False;
3728 TreeSelectNameURLPupupMenu.Visible := False;
3729 TreeSelectFavoriteAddPupupMenu.Visible := False;
3730 TreeSelectLogDeleteSeparator.Visible := False;
3731 TreeSelectLogDeletePopupMenu.Visible := False;
3735 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3736 var ppDisp: IDispatch; var Cancel: WordBool);
3745 threadItem: TThreadItem;
3746 aElement : IHTMLElement;
3749 Writeln(IntToStr(Integer(ppDisp)));
3752 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3753 if ( aElement <> nil) then begin
3754 Text := aElement.Get_outerText;
3755 Html := aElement.Get_outerHTML;
3756 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3757 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3758 if GikoSys.Setting.ResAnchorJamp then begin
3760 Text := ZenToHan(Trim(Text));
3762 if(AnsiPos('>>', Text) = 1) then begin
3763 //Text := Copy(Text, 3, Length(Text) - 2);
3766 //Text := Copy(Text, 2, Length(Text) - 1);
3770 if AnsiPos('-', Text) <> 0 then begin
3771 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3772 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3773 wkIntTo := StrToIntDef(Text, 0);
3774 if wkIntTo < wkIntSt then
3777 wkIntSt := StrToIntDef(Text, 0);
3780 if wkIntSt <> 0 then begin
3781 if (Sender is TResPopupBrowser) then begin
3782 TResPopupBrowser(Sender).ChildClear
3784 FActiveContent.IDAnchorPopup('');
3785 MoveHisotryManager.pushItem(FActiveContent);
3786 BrowserMovement(IntToStr(wkIntSt));
3790 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3792 URL := GikoSys.GetHRefText(Html);
3793 URL := GikoSys.HTMLDecode(URL);
3794 if AnsiPos('BE:', URL) = 1 then begin
3795 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3796 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3797 threadItem := FActiveContent.Thread;
3798 if threadItem = nil then Exit;
3799 URL := BE_PHP_URL + BNum + '&u=d'
3800 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3803 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3804 ( AnsiPos('ftp://', URL) = 1) then begin
3805 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3806 if GikoSys.Setting.LinkAddAddressBar then begin
3807 idx := AddressComboBox.Items.IndexOf(URL);
3808 if idx = -1 then begin
3809 AddressComboBox.Items.Insert(0, URL);
3810 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3811 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3813 AddressComboBox.Items.Delete(idx);
3814 AddressComboBox.Items.Insert(0, URL);
3817 if (Sender is TResPopupBrowser) then begin
3818 TResPopupBrowser(Sender).ChildClear
3821 MoveHisotryManager.pushItem(FActiveContent);
3829 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3831 if Mouse.Capture <> 0 then
3833 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3834 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3835 FBrowserSizeWidth := ViewPanel.Width;
3837 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3838 FBrowserSizeHeight := ViewPanel.Height;
3840 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3841 if ViewPanel.Width < 2 then begin
3842 ViewPanel.Width := 1;
3843 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3844 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3845 GikoSys.Setting.ListWidthState := glsMax;
3846 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3847 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3848 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3849 GikoSys.Setting.ListWidthState := glsMin;
3851 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3852 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3853 GikoSys.Setting.ListWidthState := glsNormal;
3856 if ViewPanel.Height < 2 then begin
3857 ViewPanel.Height := 1;
3858 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3859 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3860 GikoSys.Setting.ListHeightState := glsMax;
3861 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3862 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3863 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3864 GikoSys.Setting.ListHeightState := glsMin;
3866 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3867 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3868 GikoSys.Setting.ListHeightState := glsNormal;
3871 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3872 FBrowserSizeHeight := ViewPanel.Height
3873 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3874 FBrowserSizeWidth := ViewPanel.Width;}
3877 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3882 BrowserTab.Tabs.BeginUpdate;
3884 if not BrowserTab.Dragging then begin
3885 FTabHintIndex := -1;
3886 BrowserTab.Hint := '';
3887 idx := BrowserTab.TabIndex;
3888 if idx = -1 then begin
3889 SetContent(BrowserNullTab);
3891 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3892 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3893 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3895 FBrowsers.Move(j ,0);
3897 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3898 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3899 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3900 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3902 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3903 ReleaseOldestBrowser;
3905 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3906 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3907 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3909 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3910 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3911 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3913 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3914 AddressComboBox.Text := GetActiveContent.URL;
3916 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3917 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3920 GikoDM.SetFocusForBrowserAction.Execute;
3924 BrowserTab.Tabs.EndUpdate;
3929 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3930 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3936 if Button = mbMiddle then begin
3937 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3940 p := BrowserTab.ScreenToClient(p);
3941 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3943 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3944 end else if Button = mbLeft then begin
3945 FDragWFirst := true;
3946 FMouseDownPos.X := X;
3947 FMouseDownPos.Y := Y;
3952 procedure TGikoForm.SetBrowserTabState;
3954 CoolBand: TCoolBand;
3956 BrowserBottomPanel.AutoSize := False;
3957 if GikoSys.Setting.BrowserTabVisible then begin
3959 BrowserTab.Tabs.BeginUpdate;
3961 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3962 BrowserTab.Style := tsTabs;
3963 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3964 BrowserTab.TabPosition := tpTop
3966 BrowserTab.TabPosition := tpBottom;
3967 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
3968 BrowserTab.TabPosition := tpTop;
3969 BrowserTab.Style := tsButtons;
3971 BrowserTab.TabPosition := tpTop;
3972 BrowserTab.Style := tsFlatButtons
3975 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
3976 BrowserTab.Parent := BrowserTabToolBar;
3977 BrowserBottomPanel.Hide;
3978 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3979 if CoolBand <> nil then
3980 CoolBand.Visible := True;
3982 BrowserTab.Parent := BrowserBottomPanel;
3983 BrowserTab.Top := 0;
3984 BrowserTab.Left := 0;
3985 BrowserBottomPanel.Show;
3986 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3987 if CoolBand <> nil then
3988 CoolBand.Visible := False;
3991 BrowserTab.Tabs.EndUpdate;
3995 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3996 if CoolBand <> nil then
3997 CoolBand.Visible := False;
3998 BrowserBottomPanel.Visible := False;
3999 GikoDM.AllTabCloseAction.Execute;
4003 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4004 Y: Integer; State: TDragState; var Accept: Boolean);
4008 idx := BrowserTab.IndexOfTabAt(X, Y);
4009 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4012 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4017 FDragWFirst := False;
4018 idx := BrowserTab.IndexOfTabAt(X, Y);
4020 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4023 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4024 Shift: TShiftState; X, Y: Integer);
4027 ThreadItem: TThreadItem;
4030 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4032 if ( ssLeft in Shift ) then begin
4033 if (FDragWFirst) then begin
4034 BrowserTab.EndDrag(false);
4035 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4038 BrowserTab.EndDrag(false);
4039 FDragWFirst := false;
4042 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4043 Application.CancelHint;
4044 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4045 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4046 BrowserTab.Hint := ThreadItem.Title;
4047 Application.ShowHint := True;
4049 BrowserTab.Hint := '';
4050 Application.ShowHint := True;
4052 FTabHintIndex := TabIdx;
4057 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4058 const pDisp: IDispatch; var URL: OleVariant);
4060 FDispHtmlDocument: DispHTMLDocument;
4061 BrowserRecord :TBrowserRecord;
4064 threadItem : TThreadItem;
4066 if TObject(Sender) is TWebBrowser then begin
4067 BrowserRecord := nil;
4068 if TWebBrowser(Sender) <> Browser then begin
4069 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4070 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4071 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4075 if BrowserRecord <> nil then begin
4076 if BrowserRecord.Event <> nil then
4077 BrowserRecord.Event.Free;
4078 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4079 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4080 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4081 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4084 if GetActiveContent <> nil then begin
4085 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4086 if FEvent <> nil then
4088 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4089 FEvent.OnContextMenu := OnDocumentContextMenu;
4090 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4092 if FEvent <> nil then begin
4100 if (BrowserRecord <> nil) and
4101 Assigned( BrowserRecord.Thread ) then begin
4102 threadItem := BrowserRecord.Thread;
4104 if (threadItem.JumpAddress > 0) then begin
4105 if threadItem.UnRead then begin
4106 threadItem.UnRead := False;
4108 RefreshListView(threadItem);
4110 //
\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®
4111 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4112 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4113 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4114 threadItem.JumpAddress := 0;
4116 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4119 end else if threadItem.UnRead then begin
4120 threadItem.UnRead := False;
4122 BrowserRecord.Move('new');
4123 RefreshListView(threadItem);
4124 end else if threadItem.ScrollTop <> 0 then begin
4126 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4127 doc.Body.ScrollTop := threadItem.ScrollTop;
4130 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4135 LockWindowUpdate(0);
4138 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4140 AddRoundNameMenu(RoundNamePopupMenu.Items);
4143 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4149 Item := TMenuItem.Create(Self);
4150 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4151 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4153 Item := TMenuItem.Create(Self);
4154 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4155 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4157 Item := TMenuItem.Create(Self);
4158 Item.Caption := '-';
4160 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4161 Item := TMenuItem.Create(Self);
4162 Item.Caption := RoundList.RoundNameList[i];
4163 Item.OnClick := SetSelectRoundName;
4168 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4170 threadItem : TThreadItem;
4172 if ParentName <> 'dummy1' then begin
4173 SetSelectItemRound(RoundFlag, RoundName);
4175 threadItem := GetActiveContent;
4176 if threadItem <> nil then begin
4177 threadItem.RoundName := RoundName;
4179 RoundList.RoundNameList.Add(RoundName);
4180 threadItem.Round := RoundFlag;
4185 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4190 List := TList.Create;
4192 SelectListItem(List);
4193 for i := 0 to List.Count - 1 do begin
4194 if TObject(List[i]) is TBoard then begin
4195 TBoard(List[i]).RoundName := RoundName;
4197 RoundList.RoundNameList.Add(RoundName);
4198 TBoard(List[i]).Round := RoundFlag;
4199 end else if TObject(List[i]) is TThreadItem then begin
4200 if TThreadItem(List[i]).IsLogFile then begin
4201 TThreadItem(List[i]).RoundName := RoundName;
4203 RoundList.RoundNameList.Add(RoundName);
4204 TThreadItem(List[i]).Round := RoundFlag;
4213 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4215 MenuItem: TMenuItem;
4217 if Sender is TMenuItem then begin
4218 MenuItem := TMenuItem(Sender);
4219 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4224 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4229 if CoolBar = nil then
4231 for i := 0 to CoolBar.Bands.Count - 1 do begin
4232 if CoolBar.Bands[i].Control = Control then begin
4233 Result := CoolBar.Bands[i];
4239 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4241 if BrowserTab.Parent = BrowserTabToolBar then
4242 BrowserTab.Width := BrowserTabToolBar.Width;
4245 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4250 procedure TGikoForm.SetMenuFont;
4252 // GikoSys.MenuFont(MenuToolBar.Font);
4253 // MenuToolBar.Buttons[0].AutoSize := False;
4254 // MenuToolBar.Buttons[0].AutoSize := True;
4255 // MenuToolBar.Font.Color := clMenuText;
4256 GikoSys.MenuFont(MainCoolBar.Font);
4257 MenuToolBar.Buttons[0].AutoSize := False;
4258 MenuToolBar.Buttons[0].AutoSize := True;
4259 MainCoolBar.AutoSize := False;
4260 MainCoolBar.AutoSize := True;
4262 GikoSys.MenuFont(ListCoolBar.Font);
4263 GikoSys.MenuFont(BrowserCoolBar.Font);
4264 // MenuToolBar.Font.Color := clMenuText;
4267 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4271 if FavoriteDM.Modified then begin
4274 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4275 NewMenu := TMenuItem.Create(MainMenu);
4276 NewMenu.Action := GikoDM.FavoriteAddAction;
4277 FavoriteMenu.Add(NewMenu);
4278 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4279 NewMenu := TMenuItem.Create(FavoriteMenu);
4280 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4281 FavoriteMenu.Add(NewMenu);
4282 //
\83Z
\83p
\83\8c\81[
\83^
4283 FavoriteMenu.InsertNewLineAfter(NewMenu);
4284 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4285 FavoriteDM.Modified := false;
4289 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4292 NewMenu: array of TMenuItem;
4294 SetLength(NewMenu, Node.Count);
4295 Node := Node.getFirstChild;
4297 while ( Node <> nil ) do begin
4298 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4299 NewMenu[i].AutoHotkeys := maAutomatic;
4300 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4301 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4303 if TObject(Node.Data) is TFavoriteFolder then begin
4304 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4305 CreateFavMenu(Node, NewMenu[i]);
4306 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4307 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4308 NewMenu[i].OnClick := FavoriteClick;
4309 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4310 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4311 NewMenu[i].OnClick := FavoriteClick;
4314 Node := Node.getNextSibling;
4316 MenuItem.Add(NewMenu);
4319 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4321 MsgAdd : String = '
\8aù
\82É
\82¨
\8bC
\82É
\93ü
\82è
\82É
\93o
\98^
\82³
\82ê
\82Ä
\82¢
\82Ü
\82·
\81B
\82»
\82ê
\82Å
\82à
\92Ç
\89Á
\82µ
\82Ü
\82·
\82©
\81H';
4322 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4324 Dlg : TFavoriteAddDialog;
4330 if Item is TFavoriteBoardItem then
4331 Item := TFavoriteBoardItem( Item ).Item
4332 else if Item is TFavoriteThreadItem then
4333 Item := TFavoriteThreadItem( Item ).Item;
4335 Node := FavoriteTreeView.Items.GetFirstNode;
4336 if Item is TBoard then begin
4337 ItemURL := TBoard( Item ).URL;
4338 while Node <> nil do begin
4340 if TObject( Data ) is TFavoriteBoardItem then begin
4341 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4342 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4347 Node := Node.GetNext;
4349 Dlg := TFavoriteAddDialog.Create(Self);
4351 Dlg.SetBoard( TBoard( Item ) );
4356 end else if Item is TThreadItem then begin
4357 ItemURL := TThreadItem( Item ).URL;
4358 while Node <> nil do begin
4360 if TObject( Data ) is TFavoriteThreadItem then begin
4361 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4362 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4367 Node := Node.GetNext;
4369 Dlg := TFavoriteAddDialog.Create(Self);
4371 Dlg.SetThreadItem( TThreadItem( Item ) );
4381 procedure TGikoForm.FavoriteClick(Sender: TObject);
4383 FavoriteClick( Sender, True );
4386 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4389 ThreadItem: TThreadItem;
4390 FavBoard: TFavoriteBoardItem;
4391 FavThread: TFavoriteThreadItem;
4395 if Sender is TFavoriteMenuItem then
4396 Item := TFavoriteMenuItem(Sender).Data
4397 else if Sender is TLinkToolButton then
4398 Item := TLinkToolButton(Sender).Data
4399 else if Sender is TTreeNode then
4400 Item := TTreeNode( Sender ).Data
4404 if TObject(Item) is TFavoriteBoardItem then begin
4405 FavBoard := TFavoriteBoardItem(Item);
4406 Board := FavBoard.Item;
4407 if Board <> nil then begin
4408 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4409 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4410 SelectTreeNode(Board, True);
4412 end else if TObject(Item) is TFavoriteThreadItem then begin
4413 FavThread := TFavoriteThreadItem(Item);
4414 ThreadItem := FavThread.Item;
4415 if ThreadItem = nil then
4418 InsertBrowserTab(ThreadItem, ActiveTab);
4420 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4421 if GikoSys.Setting.ListWidthState = glsMin then begin
4422 GikoDM.BrowserMaxAndFocusAction.Execute;
4425 if GikoSys.Setting.ListHeightState = glsMin then begin
4426 GikoDM.BrowserMaxAndFocusAction.Execute;
4432 procedure TGikoForm.BBSMenuItemOnClick(
4437 if Sender is TBBSMenuItem then
4438 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4442 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4444 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4447 //!
\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é)
4448 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4450 stRes, edRes : Int64;
4451 browserRec : TBrowserRecord;
4452 threadNumber : String;
4457 Thread.JumpAddress := 0;
4458 //
\83^
\83u
\82ð
\90¶
\90¬
4459 browserRec := InsertBrowserTab(Thread);
4460 if (browserRec <> nil) then begin
4461 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4462 threadNumber := ChangeFileExt(Thread.FileName, '');
4463 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4464 //
\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
4465 if (StrToInt64(threadNumber) = stRes) then begin
4466 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4467 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4471 if ( stRes > 0 ) then begin
4472 Thread.JumpAddress := stRes;
4474 //
\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é
4475 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4476 DownloadContent(Thread);
4477 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4478 browserRec.Move(IntToStr(stRes));
4479 Thread.JumpAddress := 0;
4481 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4482 Thread.ScrollTop := doc.Body.ScrollTop;
4489 procedure TGikoForm.MoveToURL(const inURL: string);
4491 protocol, host, path, document, port, bookmark : string;
4492 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4494 BBSID, BBSKey: string;
4495 {tmpBoard,} Board: TBoard;
4496 ThreadItem: TThreadItem;
4499 tmpThread : TThreadItem;
4500 shiftDown : Boolean;
4504 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4505 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4508 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4509 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4510 if shiftDown then begin
4511 GikoSys.OpenBrowser(inURL, gbtUserApp);
4513 end else if ctrlDown then begin
4514 GikoSys.OpenBrowser(inURL, gbtIE);
4518 //=====
\83v
\83\89\83O
\83C
\83\93
4521 bi := Length(BoardGroups) - 1;
4522 for i := 1 to bi do begin
4523 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4524 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4527 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4528 Board := BBSsFindBoardFromURL( boardURL );
4531 if Board = nil then begin
4533 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4534 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4537 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4538 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4539 ShowBBSTree( BBSs[ 1 ] );
4542 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4543 if not Board.IsThreadDatRead then begin
4544 GikoSys.ReadSubjectFile( Board );
4548 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4549 if ThreadItem = nil then begin
4550 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4551 ThreadItem := tmpThread;
4552 Board.Insert( 0, ThreadItem );
4553 if ActiveList is TBoard then begin
4554 if TBoard(ActiveList) = Board then
4555 ListView.Items.Count := ListView.Items.Count + 1;
4560 OpenThreadItem(ThreadItem, inURL);
4567 Board := BBSsFindBoardFromURL(
4568 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4570 if Board <> nil then begin
4571 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4572 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4573 SelectTreeNode( Board, True );
4581 // 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¢
4585 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4586 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4587 Board := BBSsFindBoardFromURL( boardURL );
4588 if Board = nil then begin
4589 //
\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
4590 GikoSys.OpenBrowser(inURL, gbtUserApp);
4593 //
\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é
4595 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4596 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4597 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4598 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4599 GikoSys.OpenBrowser(inURL, gbtUserApp);
4604 if not Board.IsThreadDatRead then
4605 GikoSys.ReadSubjectFile(Board);
4606 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4607 ThreadItem := Board.FindThreadFromURL( URL );
4608 //
\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)
4609 if ThreadItem = nil then begin
4610 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4613 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4614 if ThreadItem = nil then begin
4615 ThreadItem := TThreadItem.Create( nil, Board, URL );
4616 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4617 Board.Insert(0, ThreadItem);
4618 if ActiveList is TBoard then begin
4619 if TBoard(ActiveList) = Board then
4620 ListView.Items.Count := ListView.Items.Count + 1;
4623 //
\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é
4624 if (not ThreadItem.IsLogFile) then begin
4625 if AnsiPos(Host, Board.URL) = 0 then
4626 ThreadItem.DownloadHost := Host
4628 ThreadItem.DownloadHost := '';
4630 OpenThreadItem(ThreadItem, inURL);
4634 Board := BBSsFindBoardFromURL( inURL );
4635 if Board = nil then begin
4636 GikoSys.OpenBrowser(inURL, gbtAuto);
4638 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4639 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4640 SelectTreeNode( Board, True );
4645 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4647 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4648 CoolBarResized( Sender, MainCoolBar );
4651 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4652 Shift: TShiftState);
4654 if Key = VK_RETURN then
4655 GikoDM.MoveToAction.Execute;
4658 procedure TGikoForm.BrowserEnter(Sender: TObject);
4660 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4663 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4665 CDS:PCopyDataStruct;
4669 CDS := Message.CopyDataStruct;
4670 GetMem(PC, CDS^.cbData);
4672 lstrcpy(PC,CDS^.lpData);
4673 SetString(sURL, PC,lstrlen(PC));
4678 Message.Result := 1;
4681 procedure TGikoForm.WndProc(var Message: TMessage);
4683 senderBrowser : TWebBrowser;
4689 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4692 if Message.WParam = SC_MINIMIZE then begin
4694 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4697 TreeClick( TreeView.Selected );
4702 if (GikoSys.Setting.StoredTaskTray) then begin
4709 USER_DOCUMENTCOMPLETE:
4710 if (Message.WParam <> 0) and
4711 (TObject(Message.WParam) is TWebBrowser) then begin
4712 senderBrowser := TWebBrowser( Message.WParam );
4713 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4722 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4727 //
\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Í
4728 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4729 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4730 if Msg.CharCode in [VK_BACK] then begin
4731 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4732 if Msg.KeyData > 0 then begin
4735 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4739 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4740 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4743 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4746 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4747 if Msg.CharCode in [VK_BACK] then begin
4748 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4749 if Msg.KeyData > 0 then begin
4752 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4755 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4758 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4762 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4766 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4771 PreviewTimer.Enabled := False;
4775 ARect := FPreviewBrowser.GetWindowRect(p);
4777 FPreviewBrowser.PreviewImage(FPreviewURL);
4779 if ARect.Bottom > Screen.DesktopHeight then begin
4780 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4782 if (ARect.Right > Screen.DesktopWidth) then begin
4783 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4785 if (ARect.Left < Screen.DesktopLeft) then begin
4786 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4788 if (ARect.Top < Screen.DesktopTop) then begin
4789 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4792 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4793 ARect.Left, ARect.Top,
4794 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4795 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4797 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4798 FPreviewBrowserRect := ARect;
4801 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4805 if PreviewTimer.Enabled then
4806 PreviewTimer.Enabled := False;
4808 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4809 FResPopupBrowser.Clear;
4812 if (FPreviewBrowser <> nil)
4813 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4814 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4815 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4816 Pos := Mouse.CursorPos;
4817 Pos.X := Pos.X + Left;
4818 Pos.Y := Pos.Y + Top;
4819 if (FPreviewBrowserRect.Left > Pos.X) or
4820 (FPreviewBrowserRect.Right < Pos.X) or
4821 (FPreviewBrowserRect.Top > Pos.Y) or
4822 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4823 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4827 Message.Result := 1;
4830 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4832 GikoDM.MsgBarCloseAction.Execute;
4835 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4837 Doc: IHtmlDocument2;
4838 Range: IHTMLTxtRange;
4841 ThreadItem: TThreadItem;
4844 FactiveContent.IDAnchorPopup('');
4845 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4846 if Assigned(Doc) then begin
4847 Range := Doc.selection.createRange as IHTMLTxtRange;
4848 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4849 s := ZenToHan(Trim(s));
4850 if GikoSys.IsNumeric(s) then begin
4851 Num := StrToInt64(s);
4852 ThreadItem := GetActiveContent;
4853 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
4854 and (Num > 0)then begin
4855 CreateResPopupBrowser;
4856 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
4857 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
4858 FResPopupBrowser.Popup;
4868 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4870 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4871 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4873 if FTreeType = gttHistory then begin
4874 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4875 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4878 TreeView.Items.Clear;
4882 procedure TGikoForm.SetLinkBar;
4886 ToolButton: TLinkToolButton;
4887 MenuItem: TMenuItem;
4888 oldIgnoreResize : TResizeType;
4890 oldIgnoreResize := FIsIgnoreResize;
4891 FIsIgnoreResize := rtResizing;
4892 MainCoolBar.Bands.BeginUpdate;
4894 LinkBarPopupMenu.Items.Clear;
4895 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4896 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4897 LinkToolBar.Buttons[i].Free;
4898 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4899 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4900 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4901 ToolButton := TLinkToolButton.Create(LinkToolBar);
4902 // ToolButton.Parent := LinkToolBar;
4903 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4904 MenuItem := TMenuItem.Create(Self);
4905 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4906 LinkBarPopupMenu.Items.Add(MenuItem);
4907 ToolButton.MenuItem := MenuItem;
4908 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4909 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4910 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4911 ToolButton.OnClick := FavoriteClick;
4912 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4913 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4914 ToolButton.OnClick := FavoriteClick;
4916 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4917 ToolButton.Left := 10000;
4918 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4919 ToolButton.AutoSize := True;
4920 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4921 ToolButton.OnDragOver := FavoriteDragOver;
4922 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4923 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4924 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4925 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4926 //ToolButton.DragMode := dmAutomatic;
4927 ToolButton.DragMode := dmManual;
4928 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4930 LinkToolBar.InsertControl(ToolButton);
4935 { if LinkToolBar.ButtonCount = 0 then begin
4936 ToolButton := TLinkToolButton.Create(LinkToolBar);
4937 ToolButton.Style := tbsButton;
4938 ToolButton.ImageIndex := -1;
4939 ToolButton.Caption := '';
4940 LinkToolBar.InsertControl(ToolButton);
4943 MainCoolBar.Bands.EndUpdate;
4944 LoadCoolBarSettings;
4945 FIsIgnoreResize := oldIgnoreResize;
4949 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4957 if Sender = FavoriteTreeView then begin
4958 Node := FavoriteTreeView.GetNodeAt(X, Y);
4963 bound := Node.DisplayRect( False );
4964 height := bound.Bottom - bound.Top;
4965 if (bound.Top + height / 2) <= Y then
4966 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
4971 if Node.IsFirstNode then
4976 if FDropSpaceNode <> nil then
4977 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
4980 if Change then begin
4981 if FDropSpaceNode <> nil then
4982 FDropSpaceNode.Free;
4984 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
4985 FDropSpaceNode.MoveTo( Node, naInsert );
4986 FDropSpaceNode.ImageIndex := -1;
4987 FDropSpaceNode.SelectedIndex := -1;
4991 if Source = FavoriteTreeView then begin
4992 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
4997 end else if Source = BrowserTab then
4999 else if Source = ListView then
5001 else if Source is TLinkToolButton then
5003 else if Source = TreeView then
5009 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5012 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5015 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5017 // FDragging := true;
5020 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5022 SenderNode: TTreeNode;
5023 LinkToolButton: TLinkToolButton;
5026 LinkToolButton := TLinkToolButton( Sender );
5027 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5028 SenderNode.Selected := False;
5029 FavoriteDragDrop( SenderNode, Source );
5035 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5037 favButton : TLinkToolButton;
5038 favThreadItem : TFavoriteThreadItem;
5044 if Sender is TLinkToolButton then begin
5045 favButton := TLinkToolButton( Sender );
5046 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5047 favThreadItem := TFavoriteThreadItem( favButton.Data );
5048 if favThreadItem.Item <> nil then
5049 InsertBrowserTab( favThreadItem.Item, False );
5057 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5061 TToolButton( Sender ).DragMode := dmManual;
5062 if ssLeft in Shift then begin
5063 // 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)
5064 if FDragTime = 0 then begin
5065 FDragTime := GetTickCount();
5067 Now := GetTickCount();
5068 if (Now - FDragTime) > 500 then begin
5069 if FDragButton <> TToolButton( Sender ) then begin
5071 FDragButton := TToolButton( Sender );
5072 TToolButton(Sender).BeginDrag(false ,5);
5075 {$IF Defined(debug)}
5076 ShowMessage('Error');
5087 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5092 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5097 for i := 0 to ToolBar.ButtonCount - 1 do
5098 if ToolBar.Buttons[i].Visible then
5099 Result := Result + ToolBar.Buttons[i].Width;
5102 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5104 Control : TWinControl;
5107 Control := FindControl(BandInfo^.hwndChild);
5108 if Control = nil then
5111 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5112 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5113 idx := MainCoolBar.Bands[ i ].ID;
5117 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5118 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5119 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5120 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5121 BandInfo^.cxMinChild := 0;
5122 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5123 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5124 end else if Control = LinkToolBar then begin
5125 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5126 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5127 BandInfo^.cxMinChild := 0;
5128 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5129 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5130 end else begin // AddressToolBar
5131 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5132 BandInfo^.cxMinChild := 0;
5133 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5137 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5143 ChevronPopupMenu.Items.Clear;
5145 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5146 if MainCoolBar.Bands[ i ].Visible then begin
5147 if Idx = Int64(RebarChevron^.uBand) then begin
5154 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5155 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5157 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5158 ToolBarChevronMenu(StdToolBar);
5159 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5163 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5164 ChevronPopupMenu.Popup(p.x, p.y);
5168 procedure TGikoForm.MenuBarChevronMenu;
5169 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5175 for i := 0 to MenuItem.Count - 1 do begin
5177 if MenuItem[i] is TFavoriteMenuItem then begin
5178 Item := TFavoriteMenuItem.Create(Self);
5179 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5181 Item := TMenuItem.Create(Self);
5182 Item.Caption := MenuItem[i].Caption;
5183 Item.Action := MenuItem[i].Action;
5184 Item.ImageIndex := MenuItem[i].ImageIndex;
5185 Item.OnClick := MenuItem[i].OnClick;
5186 PopupItem.Add(Item);
5187 if MenuItem[i].Count > 0 then
5188 SetSubMenu(MenuItem[i], Item);
5197 ChevronPopupMenu.Items.Clear;
5198 ChevronPopupMenu.Images := MainMenu.Images;
5199 bw := GetWidthAllToolButton(MenuToolBar);
5200 if MenuToolBar.Width < bw then begin
5202 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5203 w := w + MenuToolBar.Buttons[i].Width;
5204 if MenuToolBar.Width <= w then begin
5205 Item := TMenuItem.Create(Self);
5206 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5207 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5208 ChevronPopupMenu.Items.Add(Item);
5209 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5215 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5216 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5221 if Assigned(PopupMenu.OnPopup) then
5222 PopupMenu.OnPopup(nil);
5223 for i := 0 to PopupMenu.Items.Count - 1 do begin
5225 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5226 Item := TFavoriteMenuItem.Create(Self);
5227 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5229 Item := TMenuItem.Create(Self);
5230 Item.Caption := PopupMenu.Items[i].Caption;
5231 Item.Action := PopupMenu.Items[i].Action;
5232 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5233 Item.OnClick := PopupMenu.Items[i].OnClick;
5234 PopupItem.Add(Item);
5243 ChevronPopupMenu.Items.Clear;
5244 ChevronPopupMenu.Images := ToolBar.HotImages;
5245 bw := GetWidthAllToolButton(ToolBar);
5246 if ToolBar.Width < bw then begin
5248 for i := 0 to ToolBar.ButtonCount - 1 do begin
5249 if ToolBar.Buttons[i].Visible then
5250 w := w + ToolBar.Buttons[i].Width;
5251 if ToolBar.Width <= w then begin
5252 if ToolBar.Buttons[i].Tag = 0 then begin
5253 Item := TMenuItem.Create(Self);
5254 if ToolBar.Buttons[i].Style = tbsSeparator then
5257 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5258 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5261 Item.Caption := ToolBar.Buttons[i].Caption;
5262 Item.Action := ToolBar.Buttons[i].Action;
5264 //Item.Visible := True;
5266 ChevronPopupMenu.Items.Add(Item);
5267 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5269 Item.OnClick := nil;
5270 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5278 procedure TGikoForm.LinkBarChevronMenu;
5283 Item: TFavoriteMenuItem;
5285 Button: TLinkToolButton;
5287 ChevronPopupMenu.Items.Clear;
5288 ChevronPopupMenu.Images := LinkToolBar.Images;
5289 bw := GetWidthAllToolButton(LinkToolBar);
5290 if LinkToolBar.Width < bw then begin
5292 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5293 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5294 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5295 w := w + LinkToolBar.Buttons[j].Width;
5296 if LinkToolBar.Width <= w then begin
5297 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5298 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5299 Item := TFavoriteMenuItem.Create(Self);
5300 if TObject(Button.Data) is TFavoriteFolder then begin
5301 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5302 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5303 Item.OnClick := FavoriteClick;
5304 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5305 Item.OnClick := FavoriteClick;
5307 Item.Data := Button.Data;
5308 Item.Caption := LinkToolBar.Buttons[j].Caption;
5309 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5310 ChevronPopupMenu.Items.Add(Item);
5321 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5322 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5323 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5325 \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É
5326 \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
5328 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5330 bandInfo : tagREBARBANDINFOA;
5331 pBandInfo : PReBarBandInfoA;
5338 pBandInfo := @bandInfo;
5339 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5340 bandInfo.cbSize := sizeof( bandInfo );
5341 bandInfo.hwndChild := h;
5342 bandInfo.cyMinChild := bar.Height;
5343 bar.OnBandInfo( nil, pBandInfo );
5344 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5346 for i := bar.Bands.Count - 1 downto 0 do begin
5347 if bar.Bands[ i ].Control.Handle = h then begin
5353 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5357 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5359 Control: TWinControl;
5362 Control := FindControl(BandInfo^.hwndChild);
5363 if Control = nil then
5366 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5367 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5368 idx := ListCoolBar.Bands[ i ].ID;
5372 if Control = ListToolBar then begin
5373 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5374 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5375 BandInfo^.cxMinChild := 0;
5376 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5377 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5379 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5380 BandInfo^.cxMinChild := 0;
5381 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5385 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5390 ChevronPopupMenu.Items.Clear;
5391 Idx := RebarChevron^.uBand;
5392 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5393 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5394 ToolBarChevronMenu(ListToolBar);
5397 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5398 ChevronPopupMenu.Popup(p.x, p.y);
5402 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5404 Control: TWinControl;
5407 Control := FindControl(BandInfo^.hwndChild);
5408 if Control = nil then
5411 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5412 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5413 idx := BrowserCoolBar.Bands[ i ].ID;
5417 if Control = BrowserToolBar then begin
5418 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5419 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5420 BandInfo^.cxMinChild := 0;
5421 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5422 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5424 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5425 BandInfo^.cxMinChild := 0;
5426 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5430 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5435 ChevronPopupMenu.Items.Clear;
5436 Idx := RebarChevron^.uBand;
5437 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5438 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5439 ToolBarChevronMenu(BrowserToolBar)
5442 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5443 ChevronPopupMenu.Popup(p.x, p.y);
5447 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5449 if Column^.iImage = -1 then begin
5450 Column^.mask := Column^.mask or LVCF_FMT;
5452 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5453 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5457 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5462 for i := bar.ButtonCount - 1 downto 0 do begin
5463 if bar.Buttons[ i ].Action = action then begin
5464 Result := bar.Buttons[ i ];
5470 procedure TGikoForm.SetToolBarPopup;
5473 aIEButton : TToolButton;
5474 aCabinetBBSButton : TToolButton;
5475 aResRangeButton : TToolButton;
5476 aThreadRangeButton: TToolButton;
5478 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5480 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5481 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5482 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5483 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5484 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5486 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5487 if aIEButton <> nil then
5488 aIEButton.DropdownMenu := BrowserPopupMenu;
5489 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5490 if aCabinetBBSButton <> nil then
5491 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5492 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5493 if aResRangeButton <> nil then
5494 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5495 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5496 if aThreadRangeButton <> nil then
5497 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5500 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5501 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5505 // browserPos : TPoint;
5509 Wnd := WindowFromPoint(Mouse.CursorPos);
5511 if WheelDelta > 0 then
5516 if (Wnd = BrowserTab.Handle) or
5517 (Wnd = BrowserTab.Parent.Handle) then begin
5518 BrowserTab.ScrollTabs(Delta);
5520 if FIsHandledWheel then begin
5521 FIsHandledWheel := False;
5524 FIsHandledWheel := True;
5525 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5526 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5528 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5536 procedure TGikoForm.SetSelectWord( const text : string );
5538 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5539 ClearThreadRengeAction;
5541 if Length( text ) = 0 then
5543 GikoDM.AllItemAction.Checked := True;
5544 SetListViewType( gvtAll )
5546 SetListViewType( gvtUser, text, false );
5550 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5553 SetSelectWord( SelectComboBox.Text );
5557 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5558 Shift: TShiftState);
5566 if Key = VK_Return then
5569 end else if Key = 229 then begin
5570 if GikoSys.Setting.UseUndecided then begin
5571 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5572 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5573 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5574 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5575 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5576 SetLength(Str, Len);
5577 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5578 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5579 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5581 Str := SelectComboBox.Text + Str;
5583 if (Length(Str) > 0) then begin
5587 end else if Length( SelectComboBox.Text ) = 0 then
5589 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5590 *
\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
5591 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5594 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5595 ClearThreadRengeAction;
5599 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5600 procedure TGikoForm.ClearThreadRengeAction;
5602 //
\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é
5603 if GikoDM.AllItemAction.Checked then
5604 GikoDM.AllItemAction.Checked := False;
5605 if GikoDM.LogItemAction.Checked then
5606 GikoDM.LogItemAction.Checked := False;
5607 if GikoDM.NewItemAction.Checked then
5608 GikoDM.NewItemaction.Checked := False;
5609 if GikoDM.LiveItemAction.Checked then
5610 GikoDM.LiveItemAction.Checked := False;
5611 if GikoDM.ArchiveItemAction.Checked then
5612 GikoDM.ArchiveItemAction.Checked := False;
5616 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5621 if Length( SelectComboBox.Text ) = 0 then
5623 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5624 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5629 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5630 procedure TGikoForm.ModifySelectList;
5637 if not SelectComboBoxPanel.Visible then
5640 if Length( SelectComboBox.Text ) > 0 then
5642 oldText := SelectComboBox.Text;
5643 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5645 GikoSys.Setting.SelectTextList.Delete( idx );
5646 idx := SelectComboBox.Items.IndexOf( oldText );
5648 SelectComboBox.Items.Delete( idx );
5649 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5650 SelectComboBox.Items.Insert( 0, oldText );
5651 SelectComboBox.Text := oldText;
5659 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5660 Shift: TShiftState; X, Y: Integer);
5665 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5668 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5669 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5670 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5672 If w <= 50 Then Begin
5673 //
\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
5674 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5675 pos.X := pos.X + (50 - w);
5677 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5681 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5682 //If SelectComboBox.Width <> w Then Begin
5683 If SelectComboBoxPanel.Width <> w Then Begin
5684 SelectComboBoxPanel.Width := w;
5685 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5686 GikoSys.Setting.SelectComboBoxWidth := w;
5687 DraggingSelectComboBoxPosition := pos;
5689 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5690 ResetBandInfo( ListCoolBar, ListToolBar );
5696 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5697 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5701 IsDraggingSelectComboBox := True;
5704 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5708 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5709 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5711 IsDraggingSelectComboBox := False;
5715 procedure TGikoForm.StatusBarResize(Sender: TObject);
5717 StatusBar.Panels[1].Width := StatusBar.Width -
5718 StatusBar.Panels[0].Width -
5719 StatusBar.Panels[THREADSIZE_PANEL].Width -
5720 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5722 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5725 if (Length( SelectComboBox.Text ) = 0) or
5726 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5728 SelectComboBox.Text := '';
5729 SelectComboBox.Color := clWindow;
5734 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5737 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5740 if TObject(SenderNode.Data) is TFavoriteFolder then
5741 SourceNode.MoveTo(SenderNode, naAddChild)
5743 SourceNode.MoveTo(SenderNode, naInsert);
5747 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5751 FavoBoardItem: TFavoriteBoardItem;
5752 FavoThreadItem: TFavoriteThreadItem;
5754 ThreadItem: TThreadItem;
5757 if (SenderNode = nil) or (Source = nil) then
5760 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5761 FavNode := SenderNode.Parent
5763 FavNode := SenderNode;
5767 if Source is TBoard then begin
5768 Board := TBoard( Source );
5769 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5770 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5771 Node.ImageIndex := 15;
5772 Node.SelectedIndex := 15;
5773 end else if Source is TFavoriteBoardItem then begin
5774 FavoBoardItem := TFavoriteBoardItem( Source );
5775 Board := FavoBoardItem.Item;
5776 if Board <> nil then
5777 if not Board.IsThreadDatRead then
5778 GikoSys.ReadSubjectFile(Board);
5779 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5780 Node.ImageIndex := 15;
5781 Node.SelectedIndex := 15;
5782 end else if Source is TThreadItem then begin
5783 ThreadItem := TThreadItem( Source );
5784 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5785 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5786 Node.ImageIndex := 16;
5787 Node.SelectedIndex := 16;
5788 end else if Source is TBrowserRecord then begin
5789 ThreadItem := TBrowserRecord( Source ).Thread;
5790 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5791 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5792 Node.ImageIndex := 16;
5793 Node.SelectedIndex := 16;
5794 end else if Source is TFavoriteThreadItem then begin
5795 FavoThreadItem := TFavoriteThreadItem( Source );
5796 ThreadItem := FavoThreadItem.Item;
5797 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5798 Node.ImageIndex := 16;
5799 Node.SelectedIndex := 16;
5802 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5804 FavoriteMoveTo( SenderNode, Node );
5808 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5811 SourceNode: TTreeNode;
5812 LinkToolButton: TLinkToolButton;
5815 if SenderNode = nil then
5818 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5819 if FDropSpaceNode <> nil then
5820 SenderNode := FDropSpaceNode;
5822 if Source = FavoriteTreeView then begin
5823 SourceNode := FavoriteTreeView.Selected;
5824 FavoriteMoveTo( SenderNode, SourceNode );
5825 end else if Source is TLinkToolButton then begin
5826 LinkToolButton := TLinkToolButton( Source );
5827 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5828 FavoriteMoveTo( SenderNode, SourceNode );
5829 end else if Source = BrowserTab then begin
5830 idx := BrowserTab.TabIndex;
5831 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5832 end else if Source = ListView then begin
5833 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5834 end else if Source = TreeView then begin
5835 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5839 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5842 SenderNode: TTreeNode;
5845 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5846 if SenderNode <> nil then begin
5847 FavoriteDragDrop( SenderNode, Source );
5850 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5851 if FDropSpaceNode <> nil then begin
5853 FDropSpaceNode.Delete;
5855 FDropSpaceNode := nil;
5858 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5859 FavoriteDM.Modified := true;
5865 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5866 Node: TTreeNode; var S: String);
5868 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5869 FavoriteDM.Modified := true;
5871 FavoriteTreeView.ReadOnly := True;
5876 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5877 Shift: TShiftState);
5879 if not TTreeView(Sender).IsEditing then begin
5883 FClickNode := FavoriteTreeView.Selected;
5884 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5888 FClickNode := FavoriteTreeView.Selected;
5889 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5893 FavoriteClick( FavoriteTreeView.Selected );
5894 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5898 FClickNode := FavoriteTreeView.Selected;
5899 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5903 //
\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·
5904 if Key = VK_ESCAPE then begin
5905 if (TTreeView(Sender).Selected <> nil) then begin
5906 TTreeView(Sender).Selected.Text := FOrigenCaption;
5908 TTreeView(Sender).Selected.Focused := False;
5914 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5917 LinkToolButton: TLinkToolButton;
5920 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5922 FClickNode := FavoriteTreeView.Selected;
5924 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5926 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5927 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5928 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5929 FClickNode := FavoriteTreeView.Items[i];
5933 for i := 0 to FClickNode.Count - 1 do begin
5934 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5935 FClickNode := FClickNode.Item[i];
5942 if FClickNode = nil then begin
5943 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5944 FavoriteTreeDeletePopupMenu.Visible := False;
5945 FavoriteTreeRenamePopupMenu.Visible := False;
5946 FavoriteTreeNewFolderPopupMenu.Visible := False;
5947 FavoriteTreeURLCopyPopupMenu.Visible := False;
5948 FavoriteTreeNameCopyPopupMenu.Visible := False;
5949 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5950 FavoriteTreeReloadPopupMenu.Visible := False;
5951 FavoriteTreeLogDeletePopupMenu.Visible := False;
5952 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5953 end else if FClickNode.IsFirstNode then begin
5954 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5955 FavoriteTreeDeletePopupMenu.Visible := False;
5956 FavoriteTreeRenamePopupMenu.Visible := False;
5957 FavoriteTreeNewFolderPopupMenu.Visible := True;
5958 FavoriteTreeURLCopyPopupMenu.Visible := False;
5959 FavoriteTreeNameCopyPopupMenu.Visible := False;
5960 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5961 FavoriteTreeReloadPopupMenu.Visible := False;
5962 FavoriteTreeLogDeletePopupMenu.Visible := False;
5963 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5964 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
5965 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5966 FavoriteTreeDeletePopupMenu.Visible := True;
5967 FavoriteTreeRenamePopupMenu.Visible := False;
5968 FavoriteTreeNewFolderPopupMenu.Visible := True;
5969 FavoriteTreeURLCopyPopupMenu.Visible := False;
5970 FavoriteTreeNameCopyPopupMenu.Visible := False;
5971 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5972 FavoriteTreeReloadPopupMenu.Visible := False;
5973 FavoriteTreeLogDeletePopupMenu.Visible := False;
5974 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5975 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
5976 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5977 FavoriteTreeDeletePopupMenu.Visible := True;
5978 FavoriteTreeRenamePopupMenu.Visible := True;
5979 FavoriteTreeNewFolderPopupMenu.Visible := True;
5980 FavoriteTreeURLCopyPopupMenu.Visible := False;
5981 FavoriteTreeNameCopyPopupMenu.Visible := True;
5982 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5983 FavoriteTreeReloadPopupMenu.Visible := False;
5984 FavoriteTreeLogDeletePopupMenu.Visible := False;
5985 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5986 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
5987 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5988 FavoriteTreeDeletePopupMenu.Visible := True;
5989 FavoriteTreeRenamePopupMenu.Visible := True;
5990 FavoriteTreeNewFolderPopupMenu.Visible := True;
5991 FavoriteTreeURLCopyPopupMenu.Visible := True;
5992 FavoriteTreeNameCopyPopupMenu.Visible := True;
5993 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5994 FavoriteTreeReloadPopupMenu.Visible := True;
5995 FavoriteTreeLogDeletePopupMenu.Visible := True;
5996 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5997 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
5998 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5999 FavoriteTreeDeletePopupMenu.Visible := True;
6000 FavoriteTreeRenamePopupMenu.Visible := True;
6001 FavoriteTreeNewFolderPopupMenu.Visible := True;
6002 FavoriteTreeURLCopyPopupMenu.Visible := True;
6003 FavoriteTreeNameCopyPopupMenu.Visible := True;
6004 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6005 FavoriteTreeReloadPopupMenu.Visible := True;
6006 FavoriteTreeLogDeletePopupMenu.Visible := False;
6007 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6009 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6010 FavoriteTreeDeletePopupMenu.Visible := False;
6011 FavoriteTreeRenamePopupMenu.Visible := False;
6012 FavoriteTreeNewFolderPopupMenu.Visible := False;
6013 FavoriteTreeURLCopyPopupMenu.Visible := False;
6014 FavoriteTreeNameCopyPopupMenu.Visible := False;
6015 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6016 FavoriteTreeReloadPopupMenu.Visible := False;
6017 FavoriteTreeLogDeletePopupMenu.Visible := False;
6018 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6023 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6028 if not (TObject(node.Data) is TFavoriteFolder) then
6031 for i := 0 to node.Count - 1 do
6033 if TObject(node.Item[i].Data) is TFavoriteFolder then
6034 FavoriteBrowseFolder( node.Item[i] )
6035 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6036 FavoriteClick( node.Item[i], False );
6040 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6046 for i := 0 to Node.Count - 1 do begin
6047 if Node.Item[i].Data = FindPointer then begin
6048 Result := Node.Item[i];
6050 end else if Node.Item[i].Count > 0 then begin
6051 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6052 if Found <> nil then begin
6063 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6067 SenderNode: TTreeNode;
6071 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6072 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6073 SenderNode := FavoriteTreeView.Items[i];
6077 SenderNode.Selected := False;
6079 FavoriteDragDrop( SenderNode, Source );
6084 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6085 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6087 if FDragWFirst = true then
6088 FDragWFirst := false;
6090 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6091 if GikoSys.Setting.ListWidthState = glsMin then begin
6092 GikoDM.BrowserMaxAndFocusAction.Execute;
6095 if GikoSys.Setting.ListHeightState = glsMin then begin
6096 GikoDM.BrowserMaxAndFocusAction.Execute;
6101 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6102 Y: Integer; State: TDragState; var Accept: Boolean);
6105 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6109 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6113 if FDropSpaceNode <> nil then begin
6115 FDropSpaceNode.Delete;
6117 FDropSpaceNode := nil;
6119 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6120 FavoriteDM.Modified := true;
6126 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6128 if FListViewBackGroundColor <> value then begin
6129 FListViewBackGroundColor := value;
6130 ListView.Color := FListViewBackGroundColor;
6133 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6135 threadItem : TThreadItem;
6139 if FClickNode = nil then Exit;
6141 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6143 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6144 if threadItem = nil then
6146 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6148 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6150 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6151 if boardItem = nil then
6153 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6159 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6160 MousePos: TPoint; var Handled: Boolean);
6164 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6165 if BrowserTab.TabIndex <> idx then begin
6166 BrowserTab.TabIndex := idx;
6167 BrowserTab.OnChange(nil);
6171 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6173 ThreadItem: TThreadItem;
6179 boardPlugIn : TBoardPlugIn;
6181 if Number = 0 then Exit;
6182 ThreadItem := GetActiveContent(True);
6184 if ThreadItem <> nil then begin
6185 //if ThreadItem.IsBoardPlugInAvailable then begin
6186 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6187 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6188 //boardPlugIn := ThreadItem.BoardPlugIn;
6189 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6191 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6192 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6193 //
\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
6194 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6196 FileName := ThreadItem.FilePath;
6197 tmp := GikoSys.ReadThreadFile(FileName, Number);
6199 if tmp <> '' then begin
6200 THTMLCreate.DivideStrLine(tmp, @Res);
6202 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6203 if ReplaceTag then begin
6204 Header := CustomStringReplace(Header, '</b>', '',true);
6205 Header := CustomStringReplace(Header, '<b>', '',true);
6206 Header := CustomStringReplace(Header, '<br>', '',true);
6207 Header := DeleteFontTag(Header);
6209 //if ThreadItem.IsBoardPlugInAvailable then begin
6210 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6211 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6212 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6214 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6215 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6216 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6217 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6220 Body := CustomStringReplace(Body, '</a>', '',true);
6222 Body := HTMLCreater.DeleteLink(Body);
6223 if ReplaceTag then begin
6224 Body := CustomStringReplace(Body, '<', '<');
6225 Body := CustomStringReplace(Body, '>', '>');
6226 Body := CustomStringReplace(Body, '"', '"');
6227 Body := CustomStringReplace(Body, '&', '&');
6228 //Body := CustomStringReplace(Body, ' ', ' ');
6231 Header := Header + Body;
6233 Clipboard.SetTextBuf( PChar(Header) );
6239 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6241 AddRoundNameMenu(dummy1);
6242 AddMenuSameBoardThread;
6244 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
6245 procedure TGikoForm.AddMenuSameBoardThread;
6250 SameBoardThreadItem.Clear;
6251 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6252 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6253 if (FActiveContent.Thread.ParentBoard =
6254 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6255 //
\8e©
\95ª
\82Í
\8aO
\82·
6256 if FActiveContent.Thread <>
6257 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6258 Item := TMenuItem.Create(Self);
6259 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6260 Item.OnClick := SameBoardThreadSubItemOnClick;
6261 SameBoardThreadItem.Add(Item);
6265 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6266 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6268 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6269 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6272 MenuItem: TMenuItem;
6274 if Sender is TMenuItem then begin
6277 MenuItem := TMenuItem(Sender);
6278 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6279 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6280 if (FActiveContent.Thread.ParentBoard =
6281 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6282 if FActiveContent.Thread <>
6283 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6284 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6285 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6297 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6299 FavoriteDM.URLReplace(oldURLs, newURLs);
6302 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6304 RoundList.URLReplace(oldURLs, newURLs);
6307 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6309 Filename = 'tab.sav';
6310 bFilename = '~tab.sav';
6316 oldBoardName: string;
6318 newBoardName: string;
6319 TabList: TStringList;
6322 if oldURLs.Count <> newURLs.Count then begin
6325 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6326 TabList := TStringList.Create;
6328 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6330 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6331 //
\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
6332 for i := 0 to oldURLs.Count - 1 do begin
6333 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6334 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6335 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6336 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6337 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6338 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6340 for j := 0 to TabList.Count - 1 do begin
6341 tempString := TabList[j];
6342 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6343 tempString := StringReplace(tempString, oldHost, newHost,[]);
6344 TabList[j] := tempString;
6348 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6350 if FileExists( GikoSys.GetAppDir + Filename) then begin
6351 if FileExists( GikoSys.GetAppDir + bFilename) then
6352 DeleteFile(GikoSys.GetAppDir + bFilename);
6354 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6355 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6358 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6366 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6367 procedure TGikoForm.OnMinimize;
6369 if FActiveContent <> nil then begin
6370 FIsMinimize := mtMinimizing;
6371 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6375 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6376 procedure TGikoForm.OnMinimized;
6378 FIsMinimize := mtMinimized;
6382 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6384 CoolBarResized( Sender, BrowserCoolBar );
6387 // *************************************************************************
6388 // ExternalBoardPlugInMain
6389 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6390 // *************************************************************************
6391 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6394 boardPlugIn : TBoardPlugIn;
6397 if not (Sender is TMenuItem) then
6400 item := TMenuItem( Sender );
6401 if not Assigned( Pointer( item.Tag ) ) then
6404 //
\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·
6405 boardPlugIn := TBoardPlugIn( item.Tag );
6406 boardPlugIn.PlugInMenu( item.Handle );
6409 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6410 procedure TGikoForm.TreeClick( Node : TTreeNode );
6416 if FTreeType = gttHistory then begin
6418 if TObject( Node.Data ) is TFavoriteThreadItem then
6419 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6420 FavoriteClick( Node );
6423 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6424 if ActiveList = Node.Data then
6427 ActiveListColumnSave;
6429 if TObject(Node.Data) is TBBS then begin
6430 SetActiveList(Node.data);
6431 end else if TObject(Node.Data) is TCategory then begin
6432 SetActiveList(Node.data);
6433 end else if TObject(Node.Data) is TBoard then begin
6434 if not TBoard(Node.Data).IsThreadDatRead then begin
6435 Screen.Cursor := crHourGlass;
6437 if not TBoard(Node.Data).IsThreadDatRead then
6438 GikoSys.ReadSubjectFile(Node.Data);
6440 Screen.Cursor := crDefault;
6443 Sort.SetSortDate(Now());
6444 SetActiveList(Node.data);
6447 if TObject( Node.Data ) is TBoard then begin // not TCategory
6448 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6449 if GikoSys.Setting.ListWidthState = glsMax then begin
6450 GikoDM.BrowserMinAction.Execute;
6451 if GikoForm.Visible then
6455 if GikoSys.Setting.ListHeightState = glsMax then begin
6456 GikoDM.BrowserMinAction.Execute;
6457 if GikoForm.Visible then
6465 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6466 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6469 ThreadItem : TThreadItem;
6470 shiftDown : Boolean;
6473 if Node = nil then Exit;
6475 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6477 if FTreeType = gtt2ch then begin
6478 if not (TObject(Node.Data) is TBoard) then Exit;
6479 Board := TBoard(Node.Data);
6480 DownloadList(Board, shiftDown);
6481 end else if FTreeType = gttHistory then begin
6482 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6483 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6484 DownloadContent(ThreadItem, shiftDown);
6488 // *************************************************************************
6489 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6490 // *************************************************************************
6491 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6492 Shift: TShiftState);
6494 if Key = VK_BACK then begin
6495 // UpFolderButtonClick(Sender);
6496 end else if Key = VK_SPACE then begin
6497 TreeDoubleClick( TreeView.Selected );
6498 end else if Key = VK_RETURN then begin
6499 TreeClick( TreeView.Selected );
6500 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6501 if (TreeView.Selected <> nil) then begin
6502 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6506 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6507 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6508 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6510 favItem : TTreeNode;
6511 favThreadItem : TFavoriteThreadItem;
6517 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6518 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6519 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6520 rect := FavoriteTreeView.Selected.DisplayRect(true);
6521 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6522 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6523 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6524 if ssDouble in Shift then begin
6525 FClickNode := FavoriteTreeView.Selected;
6526 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6530 TObject(FavoriteTreeView.Selected));
6537 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6538 if favItem = nil then Exit;
6540 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6541 favThreadItem := TFavoriteThreadItem( favItem.Data );
6542 if favThreadItem.Item <> nil then
6543 InsertBrowserTab( favThreadItem.Item, False );
6550 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6553 if FIsIgnoreResize <> rtNone then
6556 if GikoSys.Setting.ListOrientation = gloVertical then begin
6557 if GikoSys.Setting.ListHeightState = glsMin then begin
6558 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6559 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6565 procedure TGikoForm.OnResized;
6570 FOldFormWidth := Width;
6571 FIsIgnoreResize := rtNone;
6576 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6577 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6582 //
\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)
6583 if FActiveContent <> nil then begin
6584 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6585 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6587 FIsMinimize := mtNone;
6592 // *************************************************************************
6593 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6594 // *************************************************************************
6595 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6602 stlist : TStringList;
6606 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6610 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6611 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6612 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6615 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6616 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6617 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6618 if (Assigned(e)) then begin
6619 if (e.className = 'date') or (e.id = 'date') then begin
6621 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6622 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6623 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6624 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6627 stlist := TStringList.Create;
6629 stList.DelimitedText := AID;
6631 for i := 0 to stList.Count - 1 do
6632 if Length(WideString(stList[i])) = 8 then begin
6633 if GikoSys.NotDateorTimeString(stList[i]) then begin
6642 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6644 if count > LIMIT then begin
6645 if (GikoUtil.MsgBox(Handle,
6646 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6647 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6648 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6652 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6653 FActiveContent.IDAnchorPopup(body);
6662 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6663 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6665 SelectTimer.Interval := 0;
6666 if not (ListView.Selected = nil) then
6667 if( FActiveContent = nil) or
6668 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6673 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6674 procedure TGikoForm.ActiveListColumnSave;
6676 ActivListObj : TObject;
6677 i, id, idx : Integer;
6678 BBSOrder : TGikoBBSColumnList;
6679 CategoryOrder : TGikoCategoryColumnList;
6680 BoardOrder : TGikoBoardColumnList;
6683 ActivListObj := ActiveList;
6684 if ActivListObj is TBBS then begin
6685 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6686 BBSOrder := TGikoBBSColumnList.Create;
6688 for i := 0 to ListView.Columns.Count - 1 do begin
6689 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6690 idx := ListView.Column[ i ].Tag;
6691 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6692 BBSOrder.Add( TGikoBBSColumnID( id ) );
6693 //
\95\9d\82Ì
\95Û
\91¶
6694 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6696 for i := 0 to ListView.Columns.Count - 1 do
6697 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6698 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6702 end else if ActivListObj is TCategory then begin
6703 //=====
\94Â
\83\8a\83X
\83g =====
6704 CategoryOrder := TGikoCategoryColumnList.Create;
6706 for i := 0 to ListView.Columns.Count - 1 do begin
6707 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6708 idx := ListView.Column[ i ].Tag;
6709 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6710 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6711 //
\95\9d\82Ì
\95Û
\91¶
6712 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6714 for i := 0 to ListView.Columns.Count - 1 do
6715 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6716 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6720 end else if ActivListObj is TBoard then begin
6721 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6722 BoardOrder := TGikoBoardColumnList.Create;
6724 for i := 0 to ListView.Columns.Count - 1 do begin
6725 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6726 idx := ListView.Column[ i ].Tag;
6727 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6728 BoardOrder.Add( TGikoBoardColumnID( id ) );
6729 //
\95\9d\82Ì
\95Û
\91¶
6730 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6732 for i := 0 to ListView.Columns.Count - 1 do
6733 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6734 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6742 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6743 Column: TListColumn; Point: TPoint);
6749 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6750 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6751 ListColumnPopupMenu.Items.Items[ i ].Free;
6753 //
\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¢)
6754 if TObject( FActiveList ) is TBBS then begin
6756 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6757 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6758 item := TMenuItem.Create( ListColumnPopupMenu );
6759 item.Caption := GikoBBSColumnCaption[ i ];
6761 item.OnClick := ListColumnPopupMenuOnClick;
6762 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6763 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6764 item.Checked := True;
6768 ListColumnPopupMenu.Items.Add( item );
6771 end else if TObject( FActiveList ) is TCategory then begin
6773 //=====
\94Â
\83\8a\83X
\83g =====
6774 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6775 item := TMenuItem.Create( ListColumnPopupMenu );
6776 item.Caption := GikoCategoryColumnCaption[ i ];
6778 item.OnClick := ListColumnPopupMenuOnClick;
6779 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6780 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6781 item.Checked := True;
6785 ListColumnPopupMenu.Items.Add( item );
6788 end else if TObject( FActiveList ) is TBoard then begin
6790 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6791 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6792 item := TMenuItem.Create( ListColumnPopupMenu );
6793 item.Caption := GikoBoardColumnCaption[ i ];
6795 item.OnClick := ListColumnPopupMenuOnClick;
6796 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6797 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6798 item.Checked := True;
6802 ListColumnPopupMenu.Items.Add( item );
6807 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6808 Point := ListView.ClientToScreen( Point );
6809 if ListColumnPopupMenu.Items.Count > 0 then
6810 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6814 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6815 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6822 if not (Sender is TMenuItem) then
6825 ActiveListColumnSave;
6826 item := TMenuItem( Sender );
6828 if TObject( FActiveList ) is TBBS then
6829 orderList := GikoSys.Setting.BBSColumnOrder
6830 else if TObject( FActiveList ) is TCategory then
6831 orderList := GikoSys.Setting.CategoryColumnOrder
6832 else if TObject( FActiveList ) is TBoard then
6833 orderList := GikoSys.Setting.BoardColumnOrder
6837 if item.Checked then begin
6838 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6839 for i := orderList.Count - 1 downto 0 do begin
6840 if Integer( orderList[ i ] ) = item.Tag then begin
6841 orderList.Delete( i );
6846 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6847 orderList.Add( Pointer( item.Tag ) );
6850 SetActiveList( FActiveList );
6854 procedure TGikoForm.OnGestureStart(Sender: TObject);
6859 procedure TGikoForm.OnGestureMove(Sender: TObject);
6866 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6868 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6869 s := MouseGesture.GetGestureStr;
6871 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6872 if Action <> nil then
6873 ActStr := '
\81i' + Action.Caption + '
\81j';
6874 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6875 StatusBar.Panels[1].Text := s;
6878 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6883 s := MouseGesture.GetGestureStr;
6885 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6886 if Action <> nil then
6888 StatusBar.Panels[1].Text := '';
6891 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6892 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6894 ThreadItem: TThreadItem;
6896 DefaultDraw := true;
6897 if TObject(Item.Data) is TThreadItem then begin
6898 ThreadItem := TThreadItem(Item.Data);
6899 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6900 ListView.Canvas.Brush.Color := FOddColor;
6901 //
\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
6902 if (GikoSys.Setting.UnFocusedBold) and
6903 (Item.Selected) and (not ListView.Focused) then begin
6904 ListView.Canvas.Font.Style := [fsBold];
6907 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6910 if ThreadItem.UnRead then
6911 ListView.Canvas.Font.Style := [fsBold];
6916 procedure TGikoForm.FormActivate(Sender: TObject);
6918 if GikoSys.Setting.GestureEnabled then begin
6919 GikoSys.Setting.Gestures.ClearGesture;
6920 GikoSys.Setting.Gestures.LoadGesture(
6921 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6922 MouseGesture.UnHook;
6923 MouseGesture.OnGestureStart := OnGestureStart;
6924 MouseGesture.OnGestureMove := OnGestureMove;
6925 MouseGesture.OnGestureEnd := OnGestureEnd;
6926 MouseGesture.SetHook(Handle);
6928 //MouseGesture.UnHook;
6929 MouseGesture.OnGestureStart := nil;
6930 MouseGesture.OnGestureMove := nil;
6931 MouseGesture.OnGestureEnd := nil;
6935 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6937 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6938 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6942 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6947 affectedBand : TCoolBand;
6950 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6951 FIsIgnoreResize := rtResizing;
6952 PostMessage( Handle, USER_RESIZED, 0, 0 );
6954 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6955 if CoolBar = MainCoolBar then begin
6956 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6957 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6958 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6959 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6960 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6962 end else if CoolBar = ListCoolBar then begin
6963 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
6964 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6965 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6966 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6967 GikoSys.Setting.ListCoolSet[i] := CoolSet;
6969 end else if CoolBar = BrowserCoolBar then begin
6970 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
6971 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6972 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6973 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6974 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
6977 if not (Sender is TToolBar) or (CoolBar = nil) then
6979 toolbar := TToolBar( Sender );
6980 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
6981 affectedBand := nil;
6982 for i := CoolBar.Bands.Count - 1 downto 0 do begin
6983 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
6984 band := CoolBar.Bands[ i ];
6985 if band.Break or (i = 0) then begin
6986 if i + 1 < CoolBar.Bands.Count then
6987 if not CoolBar.Bands[ i + 1 ].Break then
6988 affectedBand := CoolBar.Bands[ i + 1 ];
6991 affectedBand := CoolBar.Bands[ i - 1 ];
6996 //
\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·
6997 if CoolBar = MainCoolBar then begin
6998 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
6999 coolSet.FCoolWidth := toolbar.Width + 25;
7000 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7001 if affectedBand <> nil then begin
7002 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7003 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7004 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7006 end else if CoolBar = ListCoolBar then begin
7007 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7008 coolSet.FCoolWidth := toolbar.Width + 25;
7009 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7010 if affectedBand <> nil then begin
7011 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7012 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7013 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7015 end else if CoolBar = BrowserCoolBar then begin
7016 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7017 coolSet.FCoolWidth := toolbar.Width + 25;
7018 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7019 if affectedBand <> nil then begin
7020 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7021 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7022 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7029 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7031 CoolBarResized( Sender, MainCoolBar );
7034 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7036 CoolBarResized( Sender, ListCoolBar );
7039 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7041 CoolBarResized( Sender, BrowserCoolBar );
7044 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7045 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7047 ThreadItem : TThreadItem;
7048 ReadList : TStringList;
7049 wordCount : TWordCount;
7051 ThreadItem := GetActiveContent(True);
7052 ReadList := TStringList.Create;
7053 wordCount := TWordCount.Create;
7055 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7056 {$IFDEF SPAM_FILTER_ENABLED}
7057 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7058 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7059 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7060 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7061 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7063 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7064 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7069 FActiveContent.Repaint := true;
7070 if ThreadItem <> nil then
7071 InsertBrowserTab( ThreadItem, True );
7074 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7075 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7077 ThreadItem : TThreadItem;
7080 ReadList : TStringList;
7081 wordCount : TWordCount;
7083 No := KokoPopupMenu.Tag;
7084 if No = 0 then Exit;
7085 ThreadItem := GetActiveContent(True);
7086 if ThreadItem = nil then Exit;
7087 body := TStringList.Create;
7089 GikoSys.GetSameIDRes(No, ThreadItem, body);
7091 ReadList := TStringList.Create;
7092 wordCount := TWordCount.Create;
7094 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7095 {$IFDEF SPAM_FILTER_ENABLED}
7096 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7097 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7099 for i := 0 to body.Count - 1 do begin
7100 {$IFDEF SPAM_FILTER_ENABLED}
7101 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7102 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7103 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7105 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7106 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7112 FActiveContent.Repaint := true;
7113 if ThreadItem <> nil then
7114 InsertBrowserTab( ThreadItem, True );
7121 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7123 firstElement: IHTMLElement;
7124 document: IHTMLDocument2;
7126 document := FActiveContent.Browser.Document as IHTMLDocument2;
7127 if Assigned(document) then
7128 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7129 if Assigned(firstElement) then
7130 if firstElement.style.visibility <> 'hidden' then
7131 firstElement.style.visibility := 'hidden';
7134 procedure TGikoForm.RepaintAllTabsBrowser();
7137 ThreadItem: TThreadItem;
7139 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7140 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7142 ThreadItem := GetActiveContent;
7143 if ThreadItem <> nil then
7144 InsertBrowserTab( ThreadItem, True );
7148 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7149 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7150 Shift: TShiftState);
7152 //
\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Ì
7153 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7154 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7155 SelectTimer.Interval := 0;
7156 if not (GikoSys.Setting.BrowserTabVisible) then begin
7157 if (GetActiveList is TBoard) then begin
7158 //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
7159 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7160 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7161 (Key = VK_UP) or (Key = VK_DOWN)) then
7162 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7166 // *************************************************************************
7167 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7168 // *************************************************************************
7169 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7170 Node: TTreeNode; var AllowEdit: Boolean);
7172 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7173 FOrigenCaption := Node.Text;
7175 // *************************************************************************
7176 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7177 // *************************************************************************
7178 function TGikoForm.GetMainForm(): TComponent;
7180 Result := Application.MainForm;
7182 // *************************************************************************
7183 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7184 // *************************************************************************
7185 function TGikoForm.GetScreenCursor(): TCursor;
7187 Result := Screen.Cursor;
7189 // *************************************************************************
7190 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7191 // *************************************************************************
7192 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7194 if (Screen.Cursor <> Cursor) then
7195 Screen.Cursor := Cursor;
7197 // *************************************************************************
7198 //!
\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
7199 // *************************************************************************
7200 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7202 //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Ì
7203 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7204 if GikoDM.CabinetVisibleAction.Enabled then begin
7205 GikoDM.CabinetVisibleAction.Execute;
7208 // *************************************************************************
7209 //!
\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
7210 // *************************************************************************
7211 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7213 if GikoDM.FavoriteArrangeAction.Enabled then begin
7214 GikoDM.FavoriteArrangeAction.Execute;
7217 // *************************************************************************
7218 //!
\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
7219 // *************************************************************************
7220 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7221 var Handled: Boolean);
7225 //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ß
7226 if Self.Active then begin
7228 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7229 WM_KEYFIRST..WM_KEYLAST :
7231 //
\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ç
7232 if (Msg.message <> WM_KEYUP)
7233 and (Msg.message <> WM_CHAR)
7234 and (Msg.message <> WM_SYSKEYUP) then begin
7235 wmMsg.Msg := Msg.message;
7236 wmMsg.CharCode := Word(Msg.wParam);
7237 wmMsg.KeyData := Msg.lParam;
7238 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7239 Self.OnShortCut(wmMsg, Handled);
7245 // *************************************************************************
7246 //!
\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
7247 // *************************************************************************
7248 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7250 Application.ProcessMessages;
7251 if not Application.Terminated then begin
7252 if PreviewTimer.Enabled then
7253 PreviewTimer.Enabled := False;
7254 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e
7255 if (FResPopupBrowser <> nil) then
7256 FResPopupBrowser.Clear;
7258 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7259 if FPreviewBrowser <> nil then
7260 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7264 // *************************************************************************
7265 //!
\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
7266 // *************************************************************************
7267 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7272 if (Sender <> nil) then begin
7273 s := ' [' + Sender.ClassName + ']' + #13#10;
7275 s := ' [ Sender is nil ] ' + #13#10;
7278 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7280 // *************************************************************************
7281 //!
\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¬
7282 // *************************************************************************
7283 procedure TGikoForm.CreateControlThread();
7285 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7286 FControlThread := TThreadControl.Create(True);
7287 FControlThread.MaxThreadCount := 1;
7288 FControlThread.Resume;
7289 FControlThread.OnDownloadEnd := DownloadEnd;
7290 FControlThread.OnDownloadMsg := DownloadMsg;
7291 FControlThread.OnWork := Work;
7292 FControlThread.OnWorkBegin := WorkBegin;
7293 FControlThread.OnWorkEnd := WorkEnd;
7295 // *************************************************************************
7296 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7297 // *************************************************************************
7298 procedure TGikoForm.CreateBrowsers(count: Integer);
7301 newBrowser: TWebBrowser;
7303 BrowserNullTab := TBrowserRecord.Create;
7304 BrowserNullTab.Browser := Browser;
7305 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7307 FBrowsers := TList.Create;
7308 for i := 0 to count -1 do begin
7309 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7310 newBrowser := FBrowsers[FBrowsers.Count - 1];
7311 TOleControl(newBrowser).Parent := BrowserPanel;
7312 TOleControl(newBrowser).Align := alNone;
7313 TOleControl(newBrowser).Left := 0;
7314 TOleControl(newBrowser).Top := 0;
7315 newBrowser.RegisterAsDropTarget := False;
7316 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7317 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7318 newBrowser.OnEnter := BrowserEnter;
7319 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7320 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7321 newBrowser.Navigate(BLANK_HTML);
7322 ShowWindow(newBrowser.Handle, SW_HIDE);
7324 BrowserNullTab.Browser.BringToFront;
7325 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7327 //
\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Ì
7328 //
\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Å
7329 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7330 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7331 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7332 Application.ProcessMessages;
7335 // *************************************************************************
7336 //!
\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é
7337 // *************************************************************************
7338 procedure TGikoForm.SetSelectComboBox();
7340 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7343 ToolButton: TToolButton;
7345 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7346 SelectComboBoxPanel.Visible := False;
7348 for i := ListToolBar.ControlCount - 1 downto 0 do
7350 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7352 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7353 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7354 SelectComboBoxPanel.Parent := ListToolBar;
7355 SelectComboBoxPanel.Visible := True;
7357 SelectComboBox.Left := 0;
7358 SelectComboBox.Top := 0;
7359 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7360 SelectComboBox.Width := SelectComboBoxPanel.Width -
7361 SelectComboBoxSplitter.Width;
7363 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7364 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7365 if ToolButton = nil then begin
7366 ToolButton := TToolButton.Create(ListToolBar);
7367 ToolButton.Name := DUMMYCOMPNAME;
7369 ToolButton.Style := tbsSeparator;
7370 ToolButton.Width := 0;
7371 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7372 ListToolBar.InsertControl(ToolButton);
7373 ToolButton.Visible := False;
7375 //
\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·
7376 if (i + 1) < ListToolBar.ControlCount then
7377 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7378 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7379 ListToolBar.Controls[ i + 1 ].Visible := False;
7382 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7383 ListToolBar.Controls[ i ].Visible := False;
7391 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7392 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7393 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7400 if (TreeView.Selected <> nil) and
7401 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7402 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7403 rect := TreeView.Selected.DisplayRect(true);
7404 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7405 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7406 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7407 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7408 if ssDouble in Shift then begin
7409 TreeDoubleClick( TreeView.Selected );
7411 TreeClick(TreeView.Selected);
7418 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7419 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7423 if ActionList <> nil then begin
7424 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7426 for i := 0 to ActionList.ActionCount - 1 do begin
7428 FActionListGroupIndexes[i] :=
7429 TCustomAction(ActionList.Actions[i]).GroupIndex;
7430 TCustomAction(ActionList.Actions[i]).GroupIndex
7433 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7439 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7440 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7444 if ActionList <> nil then begin
7445 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7446 for i := 0 to ActionList.ActionCount - 1 do begin
7448 TCustomAction(ActionList.Actions[i]).GroupIndex
7449 := FActionListGroupIndexes[i];
7451 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7457 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7458 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7462 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7463 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7465 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7466 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7471 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7472 MousePos: TPoint; var Handled: Boolean);
7475 coolBar: TGikoCoolBar;
7478 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7479 coolBar := TGikoCoolBar(Sender);
7480 if (coolBar = MainCoolBar) then begin
7481 FToolBarSettingSender := tssMain;
7482 end else if (coolBar = ListCoolBar) then begin
7483 FToolBarSettingSender := tssList;
7484 end else if (coolBar = BrowserCoolBar) then begin
7485 FToolBarSettingSender := tssBrowser;
7487 FToolBarSettingSender := tssNone;
7489 pos := coolBar.ClientToScreen( MousePos );
7490 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7495 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7497 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7498 if (Msg.wParam = WM_LBUTTONUP) then begin
7502 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7503 procedure TGikoForm.StoredTaskTray;
7506 if (FIconData.uID = 0) then begin
7507 FIconData.cbSize := SizeOf(TNotifyIconData);
7508 FIconData.uID := Self.Handle;
7509 FIconData.Wnd := Handle;
7510 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7511 FIconData.uCallbackMessage := USER_TASKTRAY;
7512 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7513 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7514 Shell_NotifyIcon(NIM_ADD, @FIconData);
7515 ShowEditors(SW_HIDE);
7516 ShowWindow(Self.Handle, SW_HIDE);
7521 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
7522 procedure TGikoForm.UnStoredTaskTray;
7526 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7527 SetForegroundWindow(Application.Handle);
7532 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7533 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7534 ShowWindow(Self.Handle, SW_RESTORE);
7536 ShowWindow(Self.Handle, SW_SHOW);
7538 ShowEditors(SW_SHOW);
7539 GikoDM.StoredTaskTrayAction.Tag := 0;
7543 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7544 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7546 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7550 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7551 for i := 0 to Screen.CustomFormCount - 1 do begin
7552 if TObject(Screen.CustomForms[i]) is TEditorForm then
7553 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7557 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7558 procedure TGikoForm.CreateResPopupBrowser;
7560 if (FResPopupBrowser = nil) then begin
7561 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);