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,
29 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
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;
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;
419 procedure FormCreate(Sender: TObject);
420 procedure FormDestroy(Sender: TObject);
421 procedure BrowserStatusTextChange(Sender: TObject;
422 const Text: WideString);
423 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
424 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
425 var AllowChange: Boolean);
426 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
428 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
429 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
430 Button: TToolButton; State: TCustomDrawState;
431 var DefaultDraw: Boolean);
432 procedure BrowserBeforeNavigate2(Sender: TObject;
433 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
434 Headers: OleVariant; var Cancel: WordBool);
435 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
436 const ARect: TRect; var DefaultDraw: Boolean);
437 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
438 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
439 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
440 procedure ListViewCustomDraw(Sender: TCustomListView;
441 const ARect: TRect; var DefaultDraw: Boolean);
442 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
443 Shift: TShiftState; X, Y: Integer);
444 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
445 procedure MessageListViewResize(Sender: TObject);
446 procedure CabinetVisible( isVisible : Boolean );
447 procedure FormResize(Sender: TObject);
448 procedure ListPopupMenuPopup(Sender: TObject);
449 procedure TreePopupMenuPopup(Sender: TObject);
450 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
451 var Cancel: WordBool);
452 procedure ListSplitterMoved(Sender: TObject);
453 procedure BrowserTabChange(Sender: TObject);
454 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
455 Shift: TShiftState; X, Y: Integer);
456 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
457 State: TDragState; var Accept: Boolean);
458 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
459 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
461 procedure BrowserDocumentComplete(Sender: TObject;
462 const pDisp: IDispatch; var URL: OleVariant);
463 procedure RoundNamePopupMenuPopup(Sender: TObject);
464 procedure FormShow(Sender: TObject);
465 procedure BrowserTabToolBarResize(Sender: TObject);
466 procedure FavoriteMenuClick(Sender: TObject);
467 procedure MainCoolBarResize(Sender: TObject);
468 procedure AddressToolBarResize(Sender: TObject);
469 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
471 procedure BrowserEnter(Sender: TObject);
472 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
473 procedure PreviewTimerTimer(Sender: TObject);
474 procedure MessageHideButtonClick(Sender: TObject);
475 procedure HistoryAllClearToolButtonClick(Sender: TObject);
476 procedure MainCoolBarBandInfo(Sender: TObject;
477 var BandInfo: PReBarBandInfoA);
478 procedure MainCoolBarChevronClick(Sender: TObject;
479 RebarChevron: PNMRebarChevron);
480 procedure ListCoolBarBandInfo(Sender: TObject;
481 var BandInfo: PReBarBandInfoA);
482 procedure ListCoolBarChevronClick(Sender: TObject;
483 RebarChevron: PNMRebarChevron);
484 procedure BrowserCoolBarBandInfo(Sender: TObject;
485 var BandInfo: PReBarBandInfoA);
486 procedure BrowserCoolBarChevronClick(Sender: TObject;
487 RebarChevron: PNMRebarChevron);
488 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
489 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
490 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
491 procedure SelectComboBoxChange(Sender: TObject);
492 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
494 procedure SelectComboBoxExit(Sender: TObject);
495 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
496 Shift: TShiftState; X, Y: Integer);
497 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
498 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
499 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
500 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
501 procedure StatusBarResize(Sender: TObject);
502 procedure SelectComboBoxEnter(Sender: TObject);
503 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
505 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
506 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
508 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
510 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
511 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
512 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
513 Shift: TShiftState; X, Y: Integer);
514 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
515 State: TDragState; var Accept: Boolean);
516 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
518 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
519 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
520 var Handled: Boolean);
521 procedure BrowserTabPopupMenuPopup(Sender: TObject);
522 procedure BrowserTabResize(Sender: TObject);
523 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
525 procedure FavoriteTreeViewMouseDown(Sender: TObject;
526 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
527 procedure MessagePanelResize(Sender: TObject);
529 procedure SelectTimerTimer(Sender: TObject);
530 procedure ListViewColumnRightClick(Sender: TObject;
531 Column: TListColumn; Point: TPoint);
532 procedure ListViewCustomDrawItem(Sender: TCustomListView;
533 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
534 procedure FormActivate(Sender: TObject);
535 procedure BrowserPanelResize(Sender: TObject);
536 procedure MenuToolBarResize(Sender: TObject);
537 procedure ListToolBarResize(Sender: TObject);
538 procedure BrowserToolBarResize(Sender: TObject);
539 procedure KokoPopupMenuPopup(Sender: TObject);
540 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
542 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
543 var AllowEdit: Boolean);
544 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
545 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
546 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
547 var Handled: Boolean);
548 procedure GikoApplicationEventsDeactivate(Sender: TObject);
549 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
550 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
551 Shift: TShiftState; X, Y: Integer);
552 procedure GetResURLMenuClick(Sender: TObject);
553 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
554 var Handled: Boolean);
557 FEnabledCloseButton: Boolean;
558 FClickNode: TTreeNode;
561 FPreviewBrowser: TPreviewBrowser;
563 FBrowserSizeHeight: Integer;
564 FBrowserSizeWidth: Integer;
565 FTabHintIndex: Integer;
566 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
567 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
568 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
569 FActiveList: TObject;
570 FActiveContent: TBrowserRecord; //
572 FHistoryList: TList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
573 FTreeType: TGikoTreeType;
577 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
578 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
579 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
580 IsDraggingSelectComboBox : Boolean;
581 DraggingSelectComboBoxPosition : TPoint;
582 FSearchDialog: TSearchDialog;
583 FDropSpaceNode: TTreeNode;
584 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
585 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
586 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
587 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
588 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¦
589 FOddColor : TColor; ///<
\82»
\82Ì
\90F
590 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
591 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
592 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
593 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
594 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
595 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
597 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
599 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
600 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
601 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ñ
602 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
603 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ñ
605 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
606 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
607 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
608 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
609 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
611 procedure ListDoubleClick(Shift: TShiftState);
612 function Hook(var Message: TMessage): Boolean;
613 procedure AddRoundNameMenu(MenuItem: TMenuItem);
614 procedure SetMenuFont;
615 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
616 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
617 procedure FavoriteClick(Sender: TObject); overload;
618 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
619 function OnDocumentContextMenu(Sender: TObject): WordBool;
620 procedure ShowTextPopup;
621 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
622 procedure MenuBarChevronMenu;
623 procedure LinkBarChevronMenu;
624 procedure ToolBarChevronMenu(ToolBar: TToolBar);
625 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
626 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
627 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
630 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
631 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
632 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
633 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
635 procedure SetListViewBackGroundColor(value: TColor);
636 procedure BBSMenuItemOnClick( Sender : TObject );
637 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
638 procedure SaveCoolBarSettings;
639 procedure SaveMainCoolBarSettings;
640 procedure SaveBoardCoolBarSettings;
641 procedure SaveBrowserCoolBarSettings;
642 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
643 procedure LoadCoolBarSettings;
644 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
645 procedure OnMinimize;
646 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
647 procedure OnMinimized;
648 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
649 procedure TreeClick( Node : TTreeNode );
650 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
651 procedure TreeDoubleClick( Node : TTreeNode );
652 ///
\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
653 procedure SetBBSMenu;
654 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
655 procedure ListColumnPopupMenuOnClick( Sender : TObject );
656 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
657 procedure SetSelectWord( const text : string );
658 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
659 function GetScreenCursor(): TCursor;
660 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
661 procedure SetScreenCursor(Cursor : TCursor);
662 //!
\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¬
663 procedure CreateControlThread();
664 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
665 procedure CreateBrowsers(count: Integer);
666 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
667 procedure GetGroupIndex(ActionList: TActionList);
668 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
669 procedure SetGroupIndex(ActionList: TActionList);
670 //!
\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é)
671 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
672 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
673 procedure RefreshListView(Thread: TThreadItem);
674 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
675 procedure ClearThreadRengeAction;
676 //!
\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¦
677 procedure UnStoredTaskTray;
678 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
679 procedure ShowEditors(nCmdShow: Integer);
681 procedure CreateParams(var Params: TCreateParams); override;
682 procedure WndProc(var Message: TMessage); override;
683 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
684 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
685 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
689 LastRoundTime: TDateTime;
690 BrowserNullTab: TBrowserRecord;
691 FControlThread: TThreadControl;
692 FIconData : TNotifyIconData;
693 procedure MoveToURL(const inURL: string);
694 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
696 function GetHttpState: Boolean;
697 procedure SetEnabledCloseButton(Enabled: Boolean);
698 function GetTreeNode(Data: TObject): TTreeNode;
699 procedure ListViewAllSelect;
700 property ListStyle: TViewStyle read FListStyle write FListStyle;
701 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
702 property ViewType: TGikoViewType read FViewType write FViewType;
703 property NameCookie: string read FNameCookie write FNameCookie;
704 property MailCookie: string read FMailCookie write FMailCookie;
705 property ClickNode: TTreeNode read FClickNode write FClickNode;
706 property TreeType: TGikoTreeType read FTreeType write FTreeType;
707 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
708 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
709 property SelectResWord : string read FSelectResWord write FSelectResWord;
710 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
711 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
712 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
713 property ToolBarSettingSender : TToolBarSettingSenderType
714 read FToolBarSettingSender write FToolBarSettingSender;
715 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
716 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
717 property WorkCount: Integer read FWorkCount write FWorkCount;
718 procedure SetContent(inThread: TBrowserRecord);
719 function GetActiveContent: TThreadItem;
720 function GetActiveList: TObject;
722 procedure SetListViewType(AViewType: TGikoViewType); overload;
723 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
724 procedure PlaySound(SoundEventName: string);
725 function AddHistory( FavItem: TFavoriteThreadItem ): Boolean;
726 procedure ClearHistory;
727 procedure SaveHistory;
728 procedure LoadHistory;
729 procedure ShowBBSTree( inBBS : TBBS );
730 procedure ShowBBSTreeOld( inBBS : TBBS );
731 procedure ShowHistoryTree;
732 procedure SetHistoryTreeNode;
733 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
734 procedure SetBrowserTabState;
735 procedure SetToolBarPopup;
736 procedure ShowFavoriteAddDialog( Item : TObject );
737 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
738 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
739 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
740 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
741 property OddColor : TColor read FOddColor write FOddColor;
742 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
743 procedure OnPlugInMenuItem( Sender : TObject );
744 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
745 /// 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Å
746 procedure ActiveListColumnSave;
747 procedure SetActiveList(Obj: TObject);
748 property ActiveList: TObject read GetActiveList write SetActiveList;
749 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
750 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
751 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
752 procedure IndividualAbonID(Atype : Integer);
753 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
754 procedure IndividualAbon(Atag, Atype : Integer);
755 //
\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Ý
756 procedure RepaintAllTabsBrowser();
757 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
758 procedure SetLinkBar;
759 procedure FavoriteBrowseFolder( node: TTreeNode );
760 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
761 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
762 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
763 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
764 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
765 procedure DeleteHistory( threadItem: TThreadItem );
766 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
767 procedure DeleteTab(ThreadItem: TThreadItem); overload;
768 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
769 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
770 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
771 procedure DeleteTab(index, selectIndex: Integer); overload;
772 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
773 procedure BrowserMovement(const AName: string);
774 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
775 function GetMainForm(): TComponent;
776 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
777 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
778 procedure OnGestureStart(Sender: TObject);
779 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
780 procedure OnGestureMove(Sender: TObject);
781 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
782 procedure OnGestureEnd(Sender: TObject);
783 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
784 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
785 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
786 procedure SelectListItem(List: TList);
787 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
788 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
790 procedure ModifySelectList;
792 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
794 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
796 procedure SetSelectRoundName(Sender: TObject);
798 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
800 function WebBrowserClick(Sender: TObject): WordBool;
801 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
802 procedure SetSelectComboBox();
804 //!
\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
805 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
806 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
807 procedure StoredTaskTray;
809 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
812 TFavoriteMenuItem = class(TMenuItem)
816 property Data: Pointer read FData write FData;
819 TBBSMenuItem = class(TMenuItem)
823 property Data: Pointer read FData write FData;
826 TLinkToolButton = class(TToolButton)
830 property Data: Pointer read FData write FData;
839 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
840 YofUtils, ToolBarUtil, ToolBarSetting,
841 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
842 FavoriteArrange, AddressHistory, Gesture,
843 About, Option, Round, Splash, Sort, ListSelect, Imm,
844 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
845 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
846 InputAssistDataModule, Types;
849 BLANK_HTML: string = 'about:blank';
850 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
852 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
853 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
854 HTML_FILE_NAME = 'temp_preview.html';
855 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
856 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
857 //
\83\81\83b
\83Z
\81[
\83WID
858 USER_TREECLICK = WM_USER + 2000;
859 USER_RESIZED = WM_USER + 2001;
860 USER_MINIMIZED = WM_USER + 2002;
861 USER_SETLINKBAR = WM_USER + 2003;
862 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
863 USER_TASKTRAY = WM_USER + 2010;
866 procedure TGikoForm.CreateParams(var Params: TCreateParams);
869 if FormStyle in [fsNormal, fsStayOnTop] then begin
870 if BorderStyle in [bsSingle, bsSizeable] then begin
871 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
872 Params.WndParent := 0;
877 procedure TGikoForm.FormCreate(Sender: TObject);
879 TVS_NOTOOLTIPS = $0080;
885 wp: TWindowPlacement;
889 Writeln('============================================================');
890 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
892 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
893 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¢');
894 Writeln('============================================================');
897 Sort.SetSortDate(Now());
899 FTreeType := gttNone;
900 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
902 Application.HookMainWindow(Hook);
903 FIsIgnoreResize := rtResizing;
904 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
905 //(
\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¢)
906 //
\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
907 GetGroupIndex(GikoDM.GikoFormActionList);
908 FSearchDialog := nil;
909 CreateBrowsers(BROWSER_COUNT);
912 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
915 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
916 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
918 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
919 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
921 EnabledCloseButton := True;
923 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
924 ListView.ViewStyle := GikoSys.Setting.ListStyle;
926 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
928 AnimePanel.Left := 0;
930 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
932 //
\83L
\83\83\83r
\83l
\83b
\83g
933 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
935 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
936 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
937 GikoDM.MsgBarVisibleActionExecute(nil);
938 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
940 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
941 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
942 GikoDM.StatusBarVisibleActionExecute(nil);
944 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
945 TreeView.Items.BeginUpdate;
946 FavoriteTreeView.Items.BeginUpdate;
947 ListView.Items.BeginUpdate;
949 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
950 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
951 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
952 TreeView.Color := GikoSys.Setting.CabinetBackColor;
953 FavoriteTreeView.Font.Assign(TreeView.Font);
954 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
956 ListView.Font.Name := GikoSys.Setting.ListFontName;
957 ListView.Font.Size := GikoSys.Setting.ListFontSize;
958 ListView.Font.Color := GikoSys.Setting.ListFontColor;
959 ListView.Font.Style := [];
960 if GikoSys.Setting.ListFontBold then
961 ListView.Font.Style := [fsbold];
962 if GikoSys.Setting.ListFontItalic then
963 ListView.Font.Style := ListView.Font.Style + [fsitalic];
965 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
966 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
967 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
968 FOddColor := GikoSys.Setting.OddColor;
971 TreeView.Items.EndUpdate;
972 FavoriteTreeView.Items.EndUpdate;
973 ListView.Items.EndUpdate;
975 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
976 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
978 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
979 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
981 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
982 FResRangeMenuSelect := GikoSys.ResRange;
983 case GikoSys.ResRange of
986 GikoDM.AllResAction.Execute;
990 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
991 GikoDM.SelectResAction.Checked := True;
994 case FResRangeMenuSelect of
995 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
996 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
997 100: GikoDM.OnlyAHundredResAction.Checked := True;
1001 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1002 case GikoSys.Setting.ThreadRange of
1005 GikoDM.AllItemAction.Checked := True;
1010 GikoDM.LogItemAction.Checked := True;
1015 GikoDM.NewItemAction.Checked := True;
1020 GikoDM.LiveItemAction.Checked := True;
1021 ViewType := gvtLive;
1025 GikoDM.ArchiveItemAction.Checked := True;
1026 ViewType := gvtArch;
1031 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1032 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1033 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1034 BrowserTab.Font.Style := [];
1035 if GikoSys.Setting.BrowserTabFontBold then
1036 BrowserTab.Font.Style := [fsBold];
1037 if GikoSys.Setting.BrowserTabFontItalic then
1038 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1039 BrowserTab.DoubleBuffered := True;
1040 FDragWFirst := false;
1041 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1043 //
\83u
\83\89\83E
\83U
\83^
\83u
1044 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1046 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1047 GikoDM.BrowserTabTopAction.Checked := True;
1049 GikoDM.BrowserTabBottomAction.Checked := True;
1052 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1053 GikoDM.BrowserTabTabStyleAction.Checked := True;
1054 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1055 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1057 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1060 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1061 ProgressBar.Parent := StatusBar;
1062 ProgressBar.Top := 2;
1063 ProgressBar.Left := 0;
1064 ProgressBar.Width := StatusBar.Panels[0].Width;
1065 ProgressBar.Height := StatusBar.Height - 2;
1066 ProgressBar.Position := 0;
1068 //
\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Æ)
1069 InitializeBoardPlugIns;
1071 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1072 GikoSys.ListBoardFile;
1073 //
\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É
1075 //
\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è
1076 if (SplashWindow <> nil) then begin
1077 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1081 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1082 for i := Length(BBSs) - 1 downto 0 do begin
1083 if not BBSs[i].IsBoardFileRead then
1084 GikoSys.ReadBoardFile(BBSs[i]);
1086 if SplashWindow <> nil then begin
1087 SplashWindow.ProgressBar.StepBy(20);
1088 SplashWindow.Update;
1092 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1093 RoundList := TRoundList.Create;
1094 RoundList.LoadRoundBoardFile;
1095 RoundList.LoadRoundThreadFile;
1097 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1098 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1099 Style := Style or TVS_NOTOOLTIPS;
1100 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1102 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1103 TreeView.Align := alClient;
1104 FavoriteTreeView.Align := alClient;
1105 FavoriteTreeView.Visible := False;
1107 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1110 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1111 wp.length := sizeof(wp);
1112 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1113 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1114 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1115 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1116 wp.showCmd := SW_HIDE;
1117 SetWindowPlacement(Handle, @wp);
1120 if GikoSys.Setting.WindowMax then
1121 WindowState := wsMaximized;
1123 //
\83M
\83R
\83A
\83j
\83\81
1125 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1126 if FileExists(FileName) then
1127 Animate.FileName := FileName;
1135 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1136 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1137 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1140 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1141 FHistoryList := TList.Create;
1143 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1146 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1147 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1148 FavoriteDM.ReadFavorite;
1150 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1151 GikoDM.ArrangeAction.Execute;
1153 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1154 case GikoSys.Setting.ListWidthState of
1156 ViewPanel.Width := 1;
1157 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1158 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1161 ViewPanel.Width := GikoSys.Setting.ListWidth;
1162 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1163 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1166 ViewPanel.Width := GikoSys.Setting.ListWidth;
1167 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1168 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1172 case GikoSys.Setting.ListHeightState of
1174 ViewPanel.Height := 1;
1175 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1176 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1179 ViewPanel.Height := GikoSys.Setting.ListHeight;
1180 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1181 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1184 ViewPanel.Height := GikoSys.Setting.ListHeight;
1185 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1186 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1191 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1192 CreateControlThread();
1194 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1195 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1197 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1200 BrowserBoardNameLabel.Caption := '';
1201 BrowserNameLabel.Caption := '';
1204 FTabHintIndex := -1;
1206 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1207 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1208 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1210 MakeDefaultINIFile();
1211 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1212 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1213 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1214 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1217 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1218 SetSelectComboBox();
1220 //
\83A
\83h
\83\8c\83X
\83o
\81[
1221 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1223 //
\83\8a\83\93\83N
\83o
\81[
1225 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1227 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1228 if not FileExists(GikoSys.GetBoardFileName) then begin
1229 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
1230 + '
\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
1231 + '
\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';
1232 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1233 GikoDM.NewBoardAction.Execute;
1236 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1237 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1239 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1240 // FLastRoundTime := 0;
1243 FHint := TResPopup.Create(Self);
1245 ListView.OnData := TListViewUtils.ListViewData;
1247 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1248 CabinetVisible( False );
1249 if GikoSys.Setting.CabinetVisible then begin
1250 i := CabinetSelectPopupMenu.Items.Count - 1;
1251 if GikoSys.Setting.CabinetIndex = i - 1 then
1252 GikoDM.CabinetHistoryAction.Execute
1253 else if GikoSys.Setting.CabinetIndex = i then
1254 GikoDM.CabinetFavoriteAction.Execute
1256 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1257 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1258 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1259 FIsIgnoreResize := rtResizing;
1260 GikoDM.CabinetBBSAction.Execute;
1263 ShowBBSTreeOld( BBSs[ 0 ] );
1264 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1267 //
\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
1268 for i := 1 to ParamCount do begin
1269 MoveToURL(ParamStr(i));
1272 GikoDM.RepaintStatusBar;
1273 StatusBarResize(Sender);
1275 dummy1.Caption := ItemReservPMenu.Caption;
1276 dummy1.Hint := ItemReservPMenu.Hint;
1278 {$IFDEF SPAM_FILTER_ENABLED}
1279 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1280 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1283 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1284 MouseGesture := TMouseGesture.Create;
1285 GikoSys.Setting.Gestures.LoadGesture(
1286 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1287 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1288 MouseGesture.OnGestureStart := OnGestureStart;
1289 MouseGesture.OnGestureMove := OnGestureMove;
1290 MouseGesture.OnGestureEnd := OnGestureEnd;
1291 if GikoSys.Setting.GestureEnabled then
1292 MouseGesture.SetHook( Handle );
1294 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1295 GikoSys.SetGikoMessage;
1297 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1298 if GikoSys.Setting.AutoLogin then
1299 GikoDM.LoginAction.Execute;
1301 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1303 //
\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è
1304 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1305 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1307 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1308 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1312 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1313 procedure TGikoForm.SaveCoolBarSettings;
1316 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1318 SaveMainCoolBarSettings;
1319 SaveBoardCoolBarSettings;
1320 SaveBrowserCoolBarSettings;
1323 procedure TGikoForm.SaveMainCoolBarSettings;
1328 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1329 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1330 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1331 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1332 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1333 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1336 procedure TGikoForm.SaveBoardCoolBarSettings;
1341 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1342 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1343 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1344 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1345 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1346 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1349 procedure TGikoForm.SaveBrowserCoolBarSettings;
1354 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1355 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1356 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1357 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1358 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1359 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1362 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1363 procedure TGikoForm.LoadCoolBarSettings;
1369 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1370 MainCoolBar.Bands.BeginUpdate;
1372 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1373 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1374 CoolSet := GikoSys.Setting.MainCoolSet[i];
1375 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1376 FIsIgnoreResize := rtNone;
1377 SaveCoolBarSettings;
1380 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1381 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1382 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1385 MainCoolBar.Bands.EndUpdate;
1388 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1389 ListCoolBar.Bands.BeginUpdate;
1391 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1392 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1393 CoolSet := GikoSys.Setting.ListCoolSet[i];
1394 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1395 FIsIgnoreResize := rtNone;
1396 SaveCoolBarSettings;
1399 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1400 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1401 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1404 ListCoolBar.Bands.EndUpdate;
1407 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1408 BrowserCoolBar.Bands.BeginUpdate;
1410 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1411 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1412 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1413 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1414 FIsIgnoreResize := rtNone;
1415 SaveCoolBarSettings;
1418 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1419 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1420 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1423 BrowserCoolBar.Bands.EndUpdate;
1428 procedure TGikoForm.FormShow(Sender: TObject);
1430 if FStartUp then begin
1431 ShowWindow(Application.Handle, SW_HIDE);
1433 //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½
1434 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1435 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1436 GikoDM.StdToolBarVisibleActionExecute( nil );
1437 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1438 GikoDM.AddressBarVisibleActionExecute( nil );
1439 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1440 GikoDM.LinkBarVisibleActionExecute( nil );
1441 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1442 GikoDM.ListToolBarVisibleActionExecute( nil );
1443 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1444 GikoDM.ListNameBarVisibleActionExecute( nil );
1445 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1446 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1447 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1448 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1450 // CoolBar
\95\9c\8c³
1451 LoadCoolBarSettings;
1453 //
\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é
1454 // ResetBandInfo( ListCoolBar, ListToolBar );
1455 FIsIgnoreResize := rtNone;
1457 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1458 if GikoSys.Setting.TabAutoLoadSave then begin
1459 GikoDM.TabsOpenAction.Tag := 1;
1460 GikoDM.TabsOpenAction.Execute;
1461 GikoDM.TabsOpenAction.Tag := 0;
1464 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1465 SetGroupIndex(GikoDM.GikoFormActionList);
1471 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1473 // if GikoForm.WindowState <> wsMinimized then
1474 // SaveCoolBarSettings;
1476 if ( GikoSys.Setting.ShowDialogForEnd ) and
1477 (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
1482 if GikoSys.Setting.TabAutoLoadSave then begin
1483 GikoDM.TabsSaveAction.Execute;
1486 if (SearchDialog <> nil) then begin
1487 if (SearchDialog.Visible) then begin
1490 SearchDialog.Release;
1493 SearchDialog := nil;
1497 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1498 GikoDM.CloseAllEditorAction.Execute;
1500 Application.UnhookMainWindow(Hook);
1501 Application.Terminate;
1504 procedure TGikoForm.FormDestroy(Sender: TObject);
1507 // CoolSet: TCoolSet;
1508 wp : TWindowPlacement;
1511 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1513 MouseGesture.UnHook;
1517 ActiveListColumnSave;
1521 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1522 wp.length := sizeof(wp);
1523 GetWindowPlacement(Handle, @wp);
1524 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1525 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1526 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1527 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1528 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1530 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1531 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1532 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1533 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1534 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1535 if GikoDM.ArrangeAction.Checked then
1536 GikoSys.Setting.ListOrientation := gloVertical
1538 GikoSys.Setting.ListOrientation := gloHorizontal;
1539 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1544 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1545 if not GikoSys.Setting.ResRangeHold then
1546 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1549 if WindowState <> wsNormal then
1550 WindowState := wsNormal;
1551 SaveCoolBarSettings;
1553 GikoSys.Setting.WriteWindowSettingFile;
1554 GikoSys.Setting.WriteNameMailSettingFile;
1557 //
\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è
1558 //
\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¢
1560 //
\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
1562 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1564 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1565 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1567 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1569 //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é
1570 FavoriteDM.WriteFavorite;
1574 LockWindowUpdate(Self.Handle);
1576 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1577 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1578 GikoSys.Setting.ShowDialogForAllTabClose := false;
1579 GikoDM.AllTabCloseAction.Execute;
1580 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1584 for i := FBrowsers.Count - 1 downto 0 do begin
1585 TWebBrowser(FBrowsers[i]).Free;
1588 FBrowsers.Capacity := 0;
1593 if BrowserNullTab <> nil then begin
1594 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1595 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1597 BrowserNullTab.Free;
1603 TreeView.Items.BeginUpdate;
1604 TreeView.Items.GetFirstNode.Free;
1605 TreeView.Items.Clear;
1606 TreeView.Items.EndUpdate;
1610 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1612 //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
1613 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1617 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1631 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1633 RoundList.SaveRoundFile;
1647 FControlThread.Terminate;
1648 FControlThread.WaitFor;
1652 FControlThread.Free;
1654 //
\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é
1655 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1656 GikoForm.PlugInMenu.items[i].Free;
1658 GikoForm.PlugInMenu.Clear;
1661 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1662 // 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Å
1663 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1664 for i := Length(BoardGroups) - 1 downto 0 do begin
1665 //BoardGroups[i].Clear;
1666 BoardGroups[i].Free;
1670 for i := Length( BBSs ) - 1 downto 0 do begin
1671 if BBSs[ i ] <> nil then
1679 if FEvent <> nil then
1683 if FHint <> nil then begin
1684 FHint.ReleaseHandle;
1689 if TPreviewBrowser <> nil then begin
1690 FPreviewBrowser.Free;
1691 FPreviewBrowser := nil;
1695 LockWindowUpdate(0);
1698 //
\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
1699 procedure TGikoForm.SetBBSMenu;
1702 item : TBBSMenuItem;
1705 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1706 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1708 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1709 CabinetSelectPopupMenu.Items[ i ].Free;
1710 CabinetMenu.Items[ i ].Free;
1711 BBSSelectPopupMenu.Items[ i ].Free;
1717 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1718 for i := Length( BBSs ) - 1 downto 0 do begin
1720 item := TBBSMenuItem.Create( PopupMenu );
1721 item.Caption := BBSs[ i ].Title;
1722 item.Data := BBSs[ i ];
1723 item.OnClick := BBSMenuItemOnClick;
1724 CabinetSelectPopupMenu.Items.Insert( 0, item );
1725 item := TBBSMenuItem.Create( PopupMenu );
1726 item.Caption := BBSs[ i ].Title;
1727 item.Data := BBSs[ i ];
1728 item.OnClick := BBSMenuItemOnClick;
1729 CabinetMenu.Insert( 0, item );
1730 item := TBBSMenuItem.Create( PopupMenu );
1731 item.Caption := BBSs[ i ].Title;
1732 item.Data := BBSs[ i ];
1733 item.OnClick := BBSMenuItemOnClick;
1734 BBSSelectPopupMenu.Items.Insert( 0, Item );
1741 procedure TGikoForm.ReloadBBS;
1746 LockWindowUpdate(Self.Handle);
1748 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1749 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1750 GikoSys.Setting.ShowDialogForAllTabClose := false;
1751 GikoDM.AllTabCloseAction.Execute;
1752 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1753 SetContent(BrowserNullTab);
1754 //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
1755 TreeView.Items.Clear;
1757 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1759 RoundList.SaveRoundFile;
1762 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1768 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1775 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1777 FavoriteDM.WriteFavorite;
1782 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1783 for i := Length(BoardGroups) - 1 downto 0 do begin
1785 BoardGroups[i].Free;
1791 for i := Length( BBSs ) - 1 downto 0 do begin
1792 if BBSs[ i ] <> nil then
1801 FTreeType := gttNone;
1803 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1805 //
\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Æ)
1806 InitializeBoardPlugIns;
1808 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1810 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1811 for i := Length(BBSs) - 1 downto 0 do begin
1812 if not BBSs[i].IsBoardFileRead then
1813 GikoSys.ReadBoardFile(BBSs[i]);
1816 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1819 ShowBBSTree( BBSs[ 0 ] );
1821 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1824 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1825 FavoriteDM.ReadFavorite;
1829 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1830 RoundList.LoadRoundBoardFile;
1831 RoundList.LoadRoundThreadFile;
1833 LockWindowUpdate(0);
1837 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1838 (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©)
1839 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1841 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1849 threadItem : TThreadItem;
1851 Protocol, Host, Path, Document, Port, Bookmark: string;
1856 ActiveFileName: string;
1862 //
\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ª
1863 // 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è)
1864 if Pos('about:..', Text) = 1 then
1865 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1868 if not( TObject(Sender) is TWebBrowser )then
1872 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1873 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1874 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1881 if PreviewTimer.Enabled then
1882 PreviewTimer.Enabled := False;
1883 Application.CancelHint;
1885 if GetActiveContent <> nil then
1886 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1888 ActiveFileName := '';
1890 FActiveContent := nil;
1894 StatusBar.Panels[1].Text := Text2;
1896 if FHint <> nil then begin
1897 FHint.ReleaseHandle;
1900 if FPreviewBrowser <> nil then
1901 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1903 if not GikoSys.Setting.UnActivePopup then
1904 if not GikoForm.Active then
1907 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1908 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1911 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1912 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1913 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1914 if FPreviewBrowser = nil then begin
1915 FPreviewBrowser := TPreviewBrowser.Create(Self);
1916 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1917 TOleControl(FPreviewBrowser).Parent := nil;
1919 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1920 FPreviewURL := Text2;
1921 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1922 PreviewTimer.Enabled := True;
1923 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1924 if Pos('mailto:', Text2) = 1 then begin
1925 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1926 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1928 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1929 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1930 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1931 if (Assigned(e)) then begin
1932 tmp2 := ZenToHan(e.Get_outerText);
1933 if (GikoSys.IsNumeric(tmp2)) then begin
1934 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1935 wkIntSt := StrToInt64(tmp2);
1936 wkIntTo := StrToInt64(tmp2);
1937 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1938 FHint.PopupType := gptThread;
1939 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1941 FHint.PopupType := gptRaw;
1946 threadItem := GetActiveContent;
1947 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1948 PathRec := Gikosys.Parse2chURL2(URL);
1949 if (PathRec.FNoParam) then begin
1953 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1955 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1957 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1959 URL := GikoSys.GetBrowsableThreadURL( URL );
1960 wkIntSt := PathRec.FSt;
1961 wkIntTo := PathRec.FTo;
1963 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1966 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1968 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1970 end else if wkIntSt > wkIntTo then begin
1975 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1980 threadItem := BBSsFindThreadFromURL( URL );
1982 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1983 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1984 if board <> nil then begin
1985 if not board.IsThreadDatRead then
1986 GikoSys.ReadSubjectFile( board );
1987 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1991 if threadItem <> nil then begin
1992 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1993 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1994 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1998 FHint.PopupType := gptThread;
1999 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2004 if FHint.PopupType = gptRaw then begin
2005 if FHint.Caption <> '' then
2008 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2014 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2018 FEnabledCloseButton := Enabled;
2019 SysMenu := GetSystemMenu(Handle, False);
2021 if Enabled then begin
2022 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2024 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2027 DrawMenuBar(Handle);
2030 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2031 var AllowChange: Boolean);
2033 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2034 // if FTreeType = gtt2ch then
2035 // FSortIndex := -1;
2038 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2039 Shift: TShiftState);
2043 if GetActiveList is TBoard then begin
2045 VK_BACK:; // UpFolderButtonClick(Sender);
2046 VK_SPACE: ListDoubleClick(Shift);
2047 VK_RETURN: ListClick;
2050 if ListView.Selected <> nil then begin
2051 pos.X := ListView.Column[ 0 ].Width;
2052 pos.Y := ListView.Selected.Top;
2054 pos.X := ListView.Left;
2055 pos.Y := ListView.Top;
2057 Windows.ClientToScreen( ListView.Handle, pos );
2058 ListPopupMenu.Popup( pos.X, pos.Y );
2061 end else begin // TBBS, TCategory
2063 VK_BACK:; // UpFolderButtonClick(Sender);
2064 VK_SPACE: ListClick;
2065 VK_RETURN: ListDoubleClick(Shift);
2068 if ListView.Selected <> nil then begin
2069 pos.X := ListView.Column[ 0 ].Width;
2070 pos.Y := ListView.Selected.Top;
2072 pos.X := ListView.Left;
2073 pos.Y := ListView.Top;
2075 Windows.ClientToScreen( ListView.Handle, pos );
2076 ListPopupMenu.Popup( pos.X, pos.Y );
2082 function TGikoForm.GetHttpState: Boolean;
2084 Result := FHttpState;
2087 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2088 Column: TListColumn);
2092 vSortIndex : Integer;
2093 vSortOrder : Boolean;
2095 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2096 if TObject( FActiveList ) is TBBS then begin
2097 orderList := GikoSys.Setting.BBSColumnOrder;
2098 vSortIndex := GikoSys.Setting.BBSSortIndex;
2099 vSortOrder := GikoSys.Setting.BBSSortOrder;
2100 end else if TObject( FActiveList ) is TCategory then begin
2101 orderList := GikoSys.Setting.CategoryColumnOrder;
2102 vSortIndex := GikoSys.Setting.CategorySortIndex;
2103 vSortOrder := GikoSys.Setting.CategorySortOrder;
2104 end else if TObject( FActiveList ) is TBoard then begin
2105 orderList := GikoSys.Setting.BoardColumnOrder;
2106 vSortIndex := GikoSys.Setting.BoardSortIndex;
2107 vSortOrder := GikoSys.Setting.BoardSortOrder;
2111 id := Integer( orderList[ idx ] );
2114 if vSortIndex = id then
2115 vSortOrder := not vSortOrder
2117 vSortOrder := id = 0;
2120 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2123 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2124 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2128 DefaultDraw := True;
2130 DefaultDraw := False;
2131 if (cdsSelected in State) or (cdsHot in State) then begin
2132 Sender.Canvas.Brush.Color := clHighlight;
2133 Sender.Canvas.Font.Color := clHighlightText;
2135 Sender.Canvas.Brush.Color := clBtnFace;
2136 Sender.Canvas.Font.Color := clBtnText;
2138 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2139 Sender.Canvas.FillRect(ARect);
2140 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2143 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2148 Nodes := TreeView.Items;
2150 for i := 0 to Nodes.Count - 1 do begin
2151 if Nodes.Item[i].Data = Data then begin
2152 Result := Nodes.Item[i];
2159 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2160 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2161 Headers: OleVariant; var Cancel: WordBool);
2166 kMenuName: string = 'menu:';
2169 if Pos(kMenuName, URL) <> 0 then begin
2170 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2172 if not GikoSys.IsNumeric(sNo) then Exit;
2176 KokoPopupMenu.Tag := StrToInt(sNo);
2177 KokoPopupMenu.Popup(p.x, p.y);
2178 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2179 Cancel := not GikoSys.Setting.OpenMailer;
2184 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2185 const ARect: TRect; var DefaultDraw: Boolean);
2189 IsBoardNode: Boolean;
2195 Category: TCategory;
2199 DefaultDraw := True;
2201 if FTreeType = gttHistory then Exit;
2203 TreeView.Canvas.Font.Color := clBlue;
2204 IsBoardNode := False;
2205 for i := 0 to TreeView.Items.Count - 1 do begin
2207 if not TreeView.Items[i].IsVisible then
2210 if TObject(TreeView.Items[i].Data) is TCategory then begin
2211 if TreeView.Items[i].Expanded then
2214 IsBoardNode := False;
2215 Category := TCategory(TreeView.Items[i].Data);
2216 for j := 0 to Category.Count - 1 do begin
2217 Board := Category.Items[j];
2218 if Board <> nil then begin
2219 if Board.UnRead > 0 then begin
2227 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2228 IsBoardNode := True;
2229 Board := TBoard(TreeView.Items[i].Data);
2231 Cnt := Board.UnRead;
2237 Bitmap := TBitmap.Create;
2239 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2240 Bitmap.Canvas.Font.Style := [fsBold];
2241 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2246 NodeRect := TreeView.Items[i].DisplayRect(True);
2249 CntText := '(' + IntToStr(Cnt) + ')'
2250 else if Cnt = 1 then
2254 TextWidth := TreeView.Canvas.TextWidth(CntText);
2256 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2258 NodeRect.Left + NodeWidth + TextWidth + 8,
2260 DrawText(TreeView.Canvas.Handle,
2264 DT_SINGLELINE or DT_VCENTER);
2266 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2269 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2270 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2273 Category: TCategory;
2276 DefaultDraw := True;
2278 if FTreeType = gttHistory then Exit;
2280 TreeView.Canvas.Font.Style := [];
2281 if Node <> nil then begin
2282 if TObject(Node.Data) is TCategory then begin
2283 Category := TCategory(Node.Data);
2284 for i := 0 to Category.Count - 1 do begin
2285 Board := Category.Items[i];
2286 if Board <> nil then begin
2287 if Board.UnRead > 0 then begin
2288 TreeView.Canvas.Font.Style := [fsBold];
2293 end else if TObject(Node.Data) is TBoard then begin
2294 Board := TBoard(Node.Data);
2295 if Board.UnRead > 0 then
2296 TreeView.Canvas.Font.Style := [fsBold];
2301 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2303 TreeView.Invalidate;
2305 if TObject(Node.Data) is TBBS then begin
2306 TBBS(Node.Data).NodeExpand := True;
2307 end else if TObject(Node.Data) is TCategory then begin
2308 TCategory(Node.Data).NodeExpand := True;
2309 end else if TObject(Node.Data) is TBoard then begin
2310 TBoard(Node.Data).NodeExpand := True;
2314 procedure TGikoForm.ListViewAllSelect;
2319 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2321 AddMessageList(Msg, nil, Icon);
2323 // *************************************************************************
2324 //!
\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
2325 // *************************************************************************
2326 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2330 boardPlugIn : TBoardPlugIn;
2335 if Item.DownType = gdtBoard then
2336 ATitle := Item.Board.Title
2338 ATitle := Item.ThreadItem.Title;
2340 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2342 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2344 if Item.DownType = gdtBoard then begin
2347 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2348 if GetActiveList = Item.Board then begin
2350 //
\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é
2351 if (GikoSys.Setting.AutoSortThreadList) then begin
2352 GikoSys.Setting.BoardSortIndex := 0;
2353 GikoSys.Setting.BoardSortOrder := True;
2355 Sort.SetSortDate(Now());
2356 SetActiveList(Item.Board);
2358 Item.Board.Modified := True;
2359 Item.Board.IsThreadDatRead := True;
2362 end else if Item.DownType = gdtThread then begin
2365 Item.ThreadItem.NewArrival := True;
2366 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2367 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2368 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2369 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2370 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2371 Item.ThreadItem.Title := Res.FTitle;
2372 ATitle := Item.ThreadItem.Title;
2373 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2374 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2375 ATitle := Res.FTitle;
2377 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2378 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2379 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2383 if GikoSys.Setting.BrowserTabVisible then begin
2384 if GetActiveContent = Item.ThreadItem then
2385 InsertBrowserTab(Item.ThreadItem)
2386 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2387 InsertBrowserTab(Item.ThreadItem, True)
2389 InsertBrowserTab(Item.ThreadItem, False);
2392 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2393 InsertBrowserTab(Item.ThreadItem);
2396 Application.ProcessMessages;
2398 if Item.State = gdsComplete then begin
2400 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2404 PlaySound('NewDiff');
2405 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2410 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2411 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2412 Item.ThreadItem.Round := False;
2413 //Item.ThreadItem.RoundName := '';
2414 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);
2417 //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
2418 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2419 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2420 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2421 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2422 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2423 case GikoForm.ViewType of
2424 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2425 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2426 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2427 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2428 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2429 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2432 RefreshListView(Item.ThreadItem);
2435 end else if Item.State = gdsNotModify then begin
2437 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2438 //SetContent(Item.ThreadItem);
2439 InsertBrowserTab(Item.ThreadItem);
2441 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2442 PlaySound('NoChange');
2443 Screen.Cursor := crDefault;
2444 end else if Item.State = gdsAbort then begin
2446 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2447 end else if Item.State = gdsError then begin
2452 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2453 // if Item.ResponseCode = 302 then
2454 // 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);
2460 if FWorkCount < 0 then FWorkCount := 0;
2461 if FWorkCount = 0 then begin
2463 Animate.Active := False;
2465 Screen.Cursor := crDefault;
2472 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2474 // SetProgressValue(Number, 0, AWorkCountMax);
2475 // ProgressBar.Visible := True;
2476 ProgressBar.Position := 0;
2477 ProgressBar.Max := AWorkCountMax;
2478 FDownloadTitle := AWorkTitle;
2479 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2480 FDownloadMax := AWorkCountMax;
2483 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2485 ProgressBar.Position := 0;
2486 if FDownloadMax <> 0 then
2487 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2490 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2492 ProgressBar.Position := AWorkCount;
2493 // SetProgressValue(Number, AWorkCount);
2494 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2497 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2499 ListItem: TListItem;
2501 MessageListView.Items.BeginUpdate;
2503 ListItem := MessageListView.Items.Add;
2504 ListItem.Caption := ACaption;
2505 ListItem.Data := AObject;
2506 ListItem.MakeVisible(False);
2508 gmiOK: ListItem.ImageIndex := 0;
2509 gmiSAD: ListItem.ImageIndex := 1;
2510 gmiNG: ListItem.ImageIndex := 2;
2511 gmiWhat: ListItem.ImageIndex := 3;
2514 MessageListView.Items.EndUpdate;
2519 function TGikoForm.InsertBrowserTab(
2520 ThreadItem : TThreadItem;
2521 ActiveTab : Boolean = True
2524 i, j, idx : Integer;
2525 favItem : TFavoriteThreadItem;
2526 newBrowser : TBrowserRecord;
2530 if Threaditem = nil then Exit;
2532 if ThreadItem.IsLogFile then begin
2533 //
\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é
2534 //
\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é
2535 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2536 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2537 j := FBrowsers.IndexOf(FActiveContent.Browser);
2538 if j = BROWSER_COUNT - 1 then
2539 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2541 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2542 if not AddHistory( favItem ) then
2545 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2546 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2547 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2548 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2549 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2550 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2551 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2552 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2556 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2557 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2558 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2560 if ActiveTab then begin
2561 BrowserTab.TabIndex := i;
2562 BrowserTab.OnChange(nil);
2569 idx := BrowserTab.TabIndex;
2570 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2571 newBrowser := TBrowserRecord.Create;
2572 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2573 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2574 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2578 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2579 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2580 //newBrowser.Browser.Navigate(BLANK_HTML);
2581 newBrowser.thread := ThreadItem;
2582 newBrowser.Repaint := true;
2583 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2585 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2586 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2587 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2591 if ActiveTab then begin
2592 BrowserTab.TabIndex := 0;
2596 newBrowser := TBrowserRecord.Create;
2597 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2598 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2599 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2603 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2604 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2605 //newBrowser.Browser.Navigate(BLANK_HTML);
2606 newBrowser.thread := ThreadItem;
2607 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2608 newBrowser.Repaint := true;
2610 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2611 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2612 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2616 if ActiveTab then begin
2617 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2618 BrowserTab.TabIndex := 0
2620 BrowserTab.TabIndex := i;
2623 Result := newBrowser;
2624 if(ActiveTab) or (idx = -1) then begin
2625 BrowserTab.OnChange(nil);
2628 if BrowserNullTab = nil then begin
2629 BrowserNullTab := TBrowserRecord.Create;
2630 BrowserNullTab.Browser := Browser;
2632 // if BrowserNullTab.thread <> ThreadItem then begin
2633 // BrowserNullTab.Movement := '';
2635 BrowserNullTab.thread := ThreadItem;
2636 Result := BrowserNullTab;
2637 BrowserTab.TabIndex := -1;
2638 SetContent(BrowserNullTab);
2641 if GikoSys.Setting.URLDisplay then
2642 AddressComboBox.Text := ThreadItem.URL;
2646 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2655 ThreadItem: TThreadItem;
2656 Thread: TBrowserRecord;
2657 ThreadTitle, ThreadPTitle: string;
2658 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2661 idx := BrowserTab.TabIndex;
2662 if (FActiveContent <> nil) and
2663 (FActiveContent.Thread <> Thread.Thread) and
2664 (FActiveContent.Browser <> nil) and
2665 (Assigned(FActiveContent.Browser.Document)) then begin
2668 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2671 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2676 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2677 Thread.Browser.Navigate(BLANK_HTML);
2678 BrowserBoardNameLabel.Caption := '';
2679 ItemBoardImage.Picture := nil;
2680 BrowserNameLabel.Caption := '';
2681 ItemImage.Picture := nil;
2682 BrowserNullTab.Thread := nil;
2683 //TOleControl(BrowserNullTab.Browser).Visible := true;
2684 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2685 FActiveContent := nil;
2687 end else if Thread.Browser = nil then begin
2688 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2689 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2690 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2691 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2692 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2696 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2697 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2700 ThreadTitle := Thread.Thread.Title;
2701 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2702 //ThreadScrollTop := Thread.Thread.ScrollTop;
2703 ThreadIsLog := Thread.Thread.IsLogFile;
2704 ThreadItem := Thread.Thread;
2705 ThreadNewArraical := Thread.Thread.NewArrival;
2706 //ThreadUnRead := Thread.Thread.UnRead;
2707 BBSID := ThreadItem.ParentBoard.BBSID;
2708 FileName := ThreadItem.FileName;
2710 if GetCapture = ListView.Handle then
2713 Screen.Cursor := crHourGlass;
2717 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2718 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2719 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2721 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2722 if (not Assigned(Thread.Browser.Document)) then begin
2723 Thread.Browser.Navigate('about:blank');
2725 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2726 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2727 Application.ProcessMessages;
2728 if idx <> BrowserTab.TabIndex then begin
2733 if (Thread <> nil) and (ThreadItem <>nil) then begin
2734 BrowserBoardNameLabel.Caption := ThreadPTitle;
2735 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2736 BrowserNameLabel.Caption := ThreadTitle;
2737 ItemImage.Picture := nil;
2739 if ThreadNewArraical then
2740 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2742 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2744 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2746 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2747 BrowserNameLabel.Left := ItemImage.Left + 20;
2750 //ActiveContent
\81@
\82Ì
\8dX
\90V
2751 FActiveContent := Thread;
2753 if not ThreadIsLog then begin
2754 Self.Caption := GikoDataModule.CAPTION_NAME ;
2755 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2756 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2758 Thread.Browser.BringToFront;
2759 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2760 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2762 doc.charset := 'Shift_JIS';
2769 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2770 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2771 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2772 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2773 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2774 //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«
2775 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2776 if Thread.Repaint then begin
2777 Thread.Repaint := false;
2779 Thread.Browser.OnStatusTextChange := nil;
2780 LockWindowUpdate(Thread.Browser.ParentWindow);
2781 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2782 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2783 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2787 RefreshListView(ThreadItem);
2789 Screen.Cursor := crDefault;
2793 function TGikoForm.GetActiveContent: TThreadItem;
2796 if FActiveContent <> nil then
2797 Result := FActiveContent.Thread
2806 procedure TGikoForm.SetActiveList(Obj: TObject);
2810 // if FActiveList <> Obj then begin
2813 if ListView.Selected <> nil then
2814 idx := ListView.Selected.Index
2820 ListView.Items.Count := 0;
2821 ListView.Items.Clear;
2822 ListView.Selected := nil;
2823 // ListView.Columns.Clear;
2824 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2825 and (FActiveContent.Thread.IsLogFile) then begin
2827 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2829 on E: Exception do begin
2830 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2831 //
\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é
2832 ReleaseBrowser(FActiveContent);
2833 FActiveContent.Thread := nil;
2834 Self.Caption := GikoDataModule.CAPTION_NAME;
2838 Self.Caption := GikoDataModule.CAPTION_NAME;
2839 //Application.Title := CAPTION_NAME;
2841 // ActiveListColumnSave;
2843 Screen.Cursor := crHourGlass;
2845 if Obj is TBBS then begin
2846 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2847 end else if Obj is TCategory then begin
2848 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2849 end else if Obj is TBoard then begin
2850 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2853 Screen.Cursor := crDefault;
2856 if idx >= 0 then begin
2857 if idx >= ListView.Items.Count then
2858 idx := ListView.Items.Count - 1;
2859 ListView.ItemIndex := idx;
2860 ListView.ItemFocused := ListView.Items.Item[ idx ];
2866 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2867 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2868 function TGikoForm.GetActiveList: TObject;
2870 Result := FActiveList;
2873 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2875 SetListViewType(AViewType, '', False);
2878 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2883 for i := Length( BBSs ) - 1 downto 0 do begin
2884 BBSs[i].SelectText := SelectText;
2885 BBSs[i].KubetsuChk := KubetsuChk;
2887 ViewType := AViewType;
2888 if ActiveList is TBoard then begin
2889 Board := TBoard(ActiveList);
2891 //gvtAll: ListView.Items.Count := Board.Count;
2892 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2893 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2894 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2895 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2896 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2900 SetActiveList(Board);
2904 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2905 const ARect: TRect; var DefaultDraw: Boolean);
2911 if ListView.Items.Count = 0 then begin
2912 DefaultDraw := true;
2913 ListView.Canvas.Brush.Color := ListView.Color;
2914 ListView.Canvas.FillRect(ARect);
2918 ListView.Canvas.Font.Color := clWindowText;
2919 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2922 ListView.Canvas.Font.Color := clBlue;
2923 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';
2926 ListView.Canvas.Font.Color := clGreen;
2927 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2930 ListView.Canvas.Font.Color := clFuchsia;
2931 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';
2934 ListView.Canvas.Font.Color := clMaroon;
2935 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2938 ListView.Canvas.Font.Color := clNavy;
2939 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';
2940 if GetActiveList is TBoard then
2941 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2949 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2950 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2951 ListView.Canvas.TextOut(p.X, p.Y, s);
2953 DefaultDraw := True;
2957 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2959 Item: TDownloadItem;
2961 if not Board.IsThreadDatRead then
2962 GikoSys.ReadSubjectFile(Board);
2963 Item := TDownloadItem.Create;
2965 Item.Board := Board;
2966 Item.DownType := gdtBoard;
2967 Item.ForceDownload := ForceDownload;
2968 FControlThread.AddItem(Item);
2969 if FWorkCount = 0 then begin
2971 Animate.Active := True;
2974 Screen.Cursor := crAppStart;
2982 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2984 Item: TDownloadItem;
2986 Item := TDownloadItem.Create;
2988 Item.ThreadItem := ThreadItem;
2989 Item.DownType := gdtThread;
2990 Item.ForceDownload := ForceDownload;
2991 FControlThread.AddItem(Item);
2992 if FWorkCount = 0 then begin
2994 Animate.Active := True;
2997 Screen.Cursor := crAppStart;
3005 procedure TGikoForm.PlaySound(SoundEventName: string);
3009 if not GikoSys.Setting.Mute then begin
3010 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3011 if FileExists(FileName) then begin
3012 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3013 sndPlaySound(nil, SND_SYNC);
3014 Application.ProcessMessages;
3016 sndPlaySound(PChar(FileName), SND_ASYNC);
3022 function TGikoForm.AddHistory( favItem : TFavoriteThreadItem ): Boolean;
3025 Item: TFavoriteThreadItem;
3029 // if (GetActiveContent = ThreadItem) and
3030 // (ThreadItem.Count <= ThreadItem.Kokomade) then
3032 // if GetActiveContent = ThreadItem then
3036 if FTreeType = gttHistory then
3037 TreeView.Selected := nil;
3039 for i := 0 to FHistoryList.Count - 1 do begin
3040 if TObject(FHistoryList[i]) is TFavoriteThreadItem then begin
3041 Item := TFavoriteThreadItem(FHistoryList[i]);
3042 if Item.URL = favItem.URL then begin
3043 // SetContent(ThreadItem);
3044 FHistoryList.Move(i, 0);
3045 if FTreeType = gttHistory then
3046 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
3047 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
3054 if FHistoryList.Count > 0 then
3055 FHistoryList.Insert( 0, favItem )
3057 FHistoryList.Add( favItem );
3058 // SetContent(ThreadItem);
3059 // while GikoSys.Setting.AddressHistoryCount < FHistoryList.Count do begin
3060 while GikoSys.Setting.MaxRecordCount < FHistoryList.Count do begin
3061 i := FHistoryList.Count - 1;
3062 TObject( FHistoryList.Items[ i ] ).Free;
3063 FHistoryList.Delete( i );
3066 if FTreeType = gttHistory then begin
3067 Node := TreeView.Items.Add( nil, favItem.Title );
3068 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
3070 if favItem.NewArrival then begin
3071 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3072 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3074 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3075 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3078 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3079 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3080 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3081 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3082 Node.Data := favItem;
3083 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
3084 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
3085 i := TreeView.Items.Count - 1;
3086 TreeView.Items.Item[ i ].Delete;
3091 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3096 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
3097 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
3098 if (FTreeType = gttHistory) then begin
3099 node := TreeView.Items.GetFirstNode;
3100 while (node <> nil) do begin
3101 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
3102 TreeView.Items.Delete(node);
3106 node := node.GetNext;
3110 for i := 0 to FHistoryList.Count - 1 do begin
3111 if threadItem = TFavoriteThreadItem( FHistoryList.Items[i] ).Item then begin
3112 TFavoriteThreadItem( FHistoryList.Items[ i ] ).Free;
3113 FHistoryList.Delete(i);
3114 FHistoryList.Capacity := FHistoryList.Count;
3120 procedure TGikoForm.ClearHistory;
3124 //FHistoryList.Clear;
3127 for i := FHistoryList.Count - 1 downto 0 do begin
3128 if TObject(FHistoryList[ i ]) is TFavoriteThreadItem then
3129 TFavoriteThreadItem(FHistoryList[ i ]).Free
3130 else if TObject(FHistoryList[ i ]) is TFavoriteBoardItem then
3131 TFavoriteBoardItem(FHistoryList[ i ]).Free;
3133 //FHistoryList.Delete(i);
3139 FHistoryList.Capacity := FHistoryList.Count;
3143 procedure TGikoForm.SaveHistory;
3146 saveList : TstringList;
3149 saveList := TStringList.Create;
3152 FHistoryList.Capacity := FHistoryList.Count;
3153 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
3154 saveList.Add('<address>');
3155 bound := FHistoryList.Count - 1;
3156 for i := bound downto 0 do begin
3157 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
3159 '<history url="' + HtmlEncode( TFavoriteThreadItem( FHistoryList[ i ] ).URL ) + '"' +
3160 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( FHistoryList[ i ] ).Title )) + '"/>');
3162 saveList.Add('</address>');
3163 saveList.SaveToFile( GikoSys.GetConfigDir + 'History.xml' );
3170 procedure TGikoForm.LoadHistory;
3174 XMLDoc : IXMLDocument;
3176 HistoryNode : IXMLNode;
3178 favItem : TFavoriteThreadItem;
3187 fileName := GikoSys.GetConfigDir + 'History.xml';
3189 if FileExists( fileName ) then begin
3191 XMLDoc := IXMLDocument.Create;
3192 //XMLDoc := LoadXMLDocument(FileName);
3193 LoadXMLDocument(FileName, XMLDoc);
3195 XMLNode := XMLDoc.DocumentElement;
3197 if XMLNode.NodeName = 'address' then begin
3198 bound := XMLNode.ChildNodes.Count - 1;
3199 for i := 0 to bound do begin
3200 HistoryNode := XMLNode.ChildNodes[i];
3201 if HistoryNode.NodeName = 'history' then begin
3202 //if FReadCount >= sl.Count then begin
3203 s := Trim(HistoryNode.Attributes['url']);
3204 if s <> '' then begin
3205 favItem := TFavoriteThreadItem.Create(
3206 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
3207 if not AddHistory( favItem ) then
3221 rt := GetTickCount - st;
3222 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
3227 procedure TGikoForm.ShowBBSTreeOld(
3235 FavoriteTreeView.Visible := False;
3236 FavoriteToolBar.Hide;
3237 TreeView.Visible := True;
3239 b := CabinetSelectPopupMenu.Items.Count - 1;
3240 for i := 0 to b do begin
3241 item := CabinetSelectPopupMenu.Items[ i ];
3242 if item is TBBSMenuItem then begin
3243 if TBBSMenuItem( item ).Data = inBBS then begin
3244 item.Checked := True;
3245 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3246 CabinetMenu.Items[ i ].Checked := True;
3247 GikoSys.Setting.CabinetIndex := i;
3251 item.Checked := False;
3252 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3253 CabinetMenu.Items[ i ].Checked := False;
3255 CabinetSelectToolButton.Caption := inBBS.Title;
3257 GikoDM.CabinetHistoryAction.Checked := False;
3258 GikoDM.CabinetFavoriteAction.Checked := False;
3260 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3261 FTreeType := gtt2ch;
3262 HistoryToolBar.Hide;
3263 FActiveBBS := inBBS;
3264 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3265 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3266 //?c???[??g?b?v?????I????
3267 if GetActiveList = nil then
3268 TreeView.Selected := TreeView.Items[0]
3270 for i := 0 to TreeView.Items.Count - 1 do begin
3271 if TreeView.Items[i].Data = GetActiveList then begin
3272 TreeView.Selected := TreeView.Items[i];
3276 TreeView.Selected := TreeView.Items[0]
3284 procedure TGikoForm.ShowBBSTree(
3293 FavoriteTreeView.Visible := False;
3294 FavoriteToolBar.Hide;
3295 TreeView.Visible := True;
3297 b := CabinetSelectPopupMenu.Items.Count - 1;
3298 for i := 0 to b do begin
3299 item := CabinetSelectPopupMenu.Items[ i ];
3300 if item is TBBSMenuItem then begin
3301 if TBBSMenuItem( item ).Data = inBBS then begin
3302 item.Checked := True;
3303 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3304 CabinetMenu.Items[ i ].Checked := True;
3305 GikoSys.Setting.CabinetIndex := i;
3309 item.Checked := False;
3310 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3311 CabinetMenu.Items[ i ].Checked := False;
3313 CabinetSelectToolButton.Caption := inBBS.Title;
3315 GikoDM.CabinetHistoryAction.Checked := False;
3316 GikoDM.CabinetFavoriteAction.Checked := False;
3318 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3319 or (not (CabinetPanel.Visible)) then begin
3320 FTreeType := gtt2ch;
3321 HistoryToolBar.Hide;
3322 FActiveBBS := inBBS;
3323 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3324 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3325 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3326 if GetActiveList = nil then begin
3328 TreeClick( TreeView.Items[0] );
3332 for i := 0 to TreeView.Items.Count - 1 do begin
3333 if TreeView.Items[i].Data = GetActiveList then begin
3334 TreeClick( TreeView.Items[i] );
3338 TreeClick( TreeView.Items[0] );
3346 procedure TGikoForm.ShowHistoryTree;
3351 if CabinetPanel.Visible then begin
3352 if FTreeType = gttHistory then begin
3353 CabinetVisible( False );
3354 GikoDM.CabinetHistoryAction.Checked := False;
3356 GikoDM.CabinetHistoryAction.Checked := True;
3359 CabinetVisible( True );
3360 GikoDM.CabinetHistoryAction.Checked := True;
3363 // BBS...BBS, History, Favorite
3364 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3366 FavoriteTreeView.Visible := False;
3367 TreeView.Visible := True;
3369 GikoDM.CabinetBBSAction.Checked := False;
3370 GikoDM.CabinetFavoriteAction.Checked := False;
3372 if FTreeType <> gttHistory then begin
3373 b := CabinetSelectPopupMenu.Items.Count - 1;
3374 for i := 0 to b do begin
3375 item := CabinetSelectPopupMenu.Items[ i ];
3376 if item is TBBSMenuItem then begin
3377 item.Checked := False;
3378 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3379 CabinetMenu.Items[ i ].Checked := False;
3383 FTreeType := gttHistory;
3384 HistoryToolBar.Show;
3385 FavoriteToolBar.Hide;
3387 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3391 procedure TGikoForm.SetHistoryTreeNode;
3395 Item: TFavoriteThreadItem;
3397 TreeView.Items.BeginUpdate;
3399 TreeView.Items.Clear;
3400 for i := 0 to FHistoryList.Count - 1 do begin
3401 Item := TFavoriteThreadItem(FHistoryList[i]);
3402 Node := TreeView.Items.Add(nil, Item.Title);
3404 if Item.Item.NewArrival then begin
3405 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3406 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3408 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3409 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3412 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3413 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3414 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3415 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3419 TreeView.Items.EndUpdate;
3423 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3425 ChangeEvent: TTVChangedEvent;
3426 ChangingEvent: TTVChangingEvent;
3430 if Item is TCategory then
3431 bbs := TCategory( Item ).ParenTBBS
3432 else if Item is TBoard then
3433 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3437 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3438 if Item <> FActiveList then begin
3440 ChangingEvent := nil;
3442 if not CallEvent then begin
3443 ChangeEvent := TreeView.OnChange;
3444 ChangingEvent := TreeView.OnChanging;
3447 if not CallEvent then begin
3448 TreeView.OnChange := nil;
3449 TreeView.OnChanging := nil;
3451 //Application.ProcessMessages;
3452 for i := 0 to TreeView.Items.Count - 1 do begin
3453 if TreeView.Items[i].Data = Item then begin
3454 TreeView.Items[i].Selected := True;
3456 TreeClick(TreeView.Items[i]);
3460 //Application.ProcessMessages;
3462 if not CallEvent then begin
3463 TreeView.OnChange := ChangeEvent;
3464 TreeView.OnChanging := ChangingEvent;
3469 if Item <> FActiveList then begin
3470 ActiveListColumnSave;
3471 if (Item is TBBS) or (Item is TCategory) then begin
3472 ListView.Columns.Clear;
3473 SetActiveList( Item );
3474 end else if Item is TBoard then begin
3475 if not TBoard( Item ).IsThreadDatRead then begin
3476 Screen.Cursor := crHourGlass;
3478 if not TBoard( Item ).IsThreadDatRead then
3479 GikoSys.ReadSubjectFile(TBoard( Item ));
3481 Screen.Cursor := crDefault;
3484 Sort.SetSortDate(Now());
3485 SetActiveList( Item );
3490 if Item is TBoard then begin // not TCategory
3491 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3492 if GikoSys.Setting.ListWidthState = glsMax then begin
3493 GikoDM.BrowserMinAction.Execute;
3494 if GikoForm.Visible then
3498 if GikoSys.Setting.ListHeightState = glsMax then begin
3499 GikoDM.BrowserMinAction.Execute;
3500 if GikoForm.Visible then
3507 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3508 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3510 listItem : TListItem;
3511 threadItem : TThreadItem;
3518 if not (GetActiveList is TBoard) then Exit;
3519 listItem := ListView.GetItemAt( X, Y );
3520 if listItem = nil then Exit;
3521 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3523 threadItem := TThreadItem(ListItem.Data);
3524 InsertBrowserTab(threadItem, False);
3525 if threadItem.IsLogFile then
3526 ListView.UpdateItems(listItem.Index, listItem.Index);
3530 //
\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Å
3531 if (ssDouble in Shift) then
3532 ListDoubleClick(Shift)
3540 Windows.ClientToScreen( ListView.Handle, pos );
3541 ListPopupMenu.Popup( pos.X, pos.Y );
3547 procedure TGikoForm.ListClick;
3549 ListItem: TListItem;
3550 ThreadItem: TThreadItem;
3552 if ListView.SelCount <> 1 then Exit;
3553 ListItem := ListView.Selected;
3554 if ListItem = nil then Exit;
3555 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3557 ThreadItem := TThreadItem(ListItem.Data);
3558 if ThreadItem.IsLogFile then begin
3559 InsertBrowserTab(ThreadItem);
3560 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3562 InsertBrowserTab(ThreadItem);
3565 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3566 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3567 if GikoSys.Setting.ListWidthState = glsMin then begin
3568 GikoDM.BrowserMaxAndFocusAction.Execute;
3571 if GikoSys.Setting.ListHeightState = glsMin then begin
3572 GikoDM.BrowserMaxAndFocusAction.Execute;
3578 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3580 ThreadItem: TThreadItem;
3583 shiftDown := (ssShift in Shift);
3585 if ListView.Selected = nil then Exit;
3587 if TObject(ListView.Selected.Data) is TCategory then begin
3588 SelectTreeNode(ListView.Selected.Data, True);
3589 end else if TObject(ListView.Selected.Data) is TBoard then begin
3590 SelectTreeNode(ListView.Selected.Data, True)
3591 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3592 Application.ProcessMessages;
3593 ThreadItem := TThreadItem(ListView.Selected.Data);
3594 DownloadContent(ThreadItem, shiftDown);
3596 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3597 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3598 if GikoSys.Setting.ListWidthState = glsMin then begin
3599 GikoDM.BrowserMaxAction.Execute;
3600 GikoDM.SetFocusForBrowserAction.Execute;
3603 if GikoSys.Setting.ListHeightState = glsMin then begin
3604 GikoDM.BrowserMaxAction.Execute;
3605 GikoDM.SetFocusForBrowserAction.Execute;
3612 procedure TGikoForm.BrowserMovement(const AName: string);
3614 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3615 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3616 and (FActiveContent <> nil) then begin
3617 FActiveContent.Move(AName);
3621 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3623 if TObject(Node.Data) is TBBS then begin
3624 TBBS(Node.Data).NodeExpand := False;
3625 end else if TObject(Node.Data) is TCategory then begin
3626 TCategory(Node.Data).NodeExpand := False;
3627 end else if TObject(Node.Data) is TBoard then begin
3628 TBoard(Node.Data).NodeExpand := False;
3630 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3631 TreeClick(TreeView.Selected);
3635 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3637 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3639 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3641 TreeSplitter.Visible := isVisible;
3642 CabinetPanel.Visible := isVisible;
3643 GikoDM.CabinetVisibleAction.Checked := isVisible;
3646 procedure TGikoForm.SelectListItem(List: TList);
3648 TmpListItem: TListItem;
3652 TmpListItem := ListView.Selected;
3653 while TmpListItem <> nil do begin
3654 List.Add(TmpListItem.Data);
3655 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3660 procedure TGikoForm.FormResize(Sender: TObject);
3663 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3664 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3666 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3667 if GikoSys.Setting.ListWidthState = glsMin then begin
3668 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3669 ViewPanel.Width := ThreadMainPanel.Width - 80;
3672 if GikoSys.Setting.ListHeightState = glsMin then begin
3673 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3674 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3678 FIsIgnoreResize := rtResizing;
3679 PostMessage( Handle, USER_RESIZED, 0, 0 );
3684 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3688 FTabHintIndex := -1;
3689 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3690 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3691 DeleteTab(i, BrowserTab.TabIndex);
3696 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3700 FTabHintIndex := -1;
3701 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3702 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3703 DeleteTab(i, BrowserTab.TabIndex);
3708 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3714 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3715 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3716 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3719 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3721 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3722 FActiveContent := nil;
3723 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3724 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3726 FBrowsers.Move(j, BROWSER_COUNT - 1);
3728 BrowserTab.Tabs.BeginUpdate;
3730 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3731 if ( BrowserTab.Tabs.Count - 1 = index ) and
3732 ( BrowserTab.TabRect(index).Left
3733 <= BrowserTab.DisplayRect.Left ) then begin
3734 BrowserTab.ScrollTabs(-1);
3736 BrowserTab.Tabs.Delete(index);
3737 if selectIndex > index then begin
3738 BrowserTab.TabIndex := selectIndex - 1;
3740 if BrowserTab.Tabs.Count -1 >= selectIndex then
3741 BrowserTab.TabIndex := selectIndex
3743 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3746 BrowserTab.Tabs.EndUpdate;
3748 if BrowserTab.Tabs.Count = 0 then begin
3749 BrowserNullTab.Thread := nil;
3751 if(BrowserTab.TabIndex <> -1) and
3752 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3753 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3754 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3755 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3757 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3761 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3762 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3763 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3764 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3767 if( FActiveContent = nil) then
3768 BrowserTab.OnChange(nil);
3770 function TGikoForm.Hook(var Message: TMessage): Boolean;
3772 //
\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Ì
3773 //
\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ð
3777 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3779 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3783 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3785 bBoard, bCategory : Boolean;
3787 bBoard := (GetActiveList is TBoard);
3788 bCategory := (GetActiveList is TCategory);
3789 ItemRoundPMenu.Visible := bBoard;
3790 ItemReservPMenu.Visible := bBoard;
3791 LPMSep01.Visible := bBoard;
3792 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3793 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3794 LPMSep02.Visible := bCategory or bBoard;
3795 KidokuPMenu.Visible := bBoard;
3796 MidokuPMenu.Visible := bBoard;
3797 UrlCopyPMenu.Visible := bCategory or bBoard;
3798 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3799 AllSelectPMenu.Visible := bCategory or bBoard;
3800 LPMSep05.Visible := bCategory or bBoard;
3801 DeletePMenu.Visible := bBoard;
3802 LPMSep06.Visible := bCategory or bBoard;
3803 BoardFavoriteAddMenu.Visible := bCategory;
3804 ThreadFavoriteAddMenu.Visible := bBoard;
3805 SaveThreadFile.Visible := bBoard;
3806 AddRoundNameMenu(ItemReservPMenu);
3807 AddRoundNameMenu(ListReservPMenu);
3810 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3812 FClickNode := TreeView.Selected;
3813 if FClickNode = nil then begin
3814 TreeSelectThreadPupupMenu.Visible := False;
3815 TreeSelectBoardPupupMenu.Visible := False;
3816 TPMSep01.Visible := False;
3817 TreeSelectURLPupupMenu.Visible := False;
3818 TreeSelectNamePupupMenu.Visible := False;
3819 TreeSelectNameURLPupupMenu.Visible := False;
3820 TreeSelectFavoriteAddPupupMenu.Visible := False;
3821 TreeSelectLogDeleteSeparator.Visible := False;
3822 TreeSelectLogDeletePopupMenu.Visible := False;
3823 end else if TObject(FClickNode.Data) is TBoard then begin
3824 TreeSelectThreadPupupMenu.Visible := False;
3825 TreeSelectBoardPupupMenu.Visible := True;
3826 TPMSep01.Visible := True;
3827 TreeSelectURLPupupMenu.Visible := True;
3828 TreeSelectNamePupupMenu.Visible := True;
3829 TreeSelectNameURLPupupMenu.Visible := True;
3830 TreeSelectFavoriteAddPupupMenu.Visible := True;
3831 TreeSelectLogDeleteSeparator.Visible := False;
3832 TreeSelectLogDeletePopupMenu.Visible := False;
3833 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3834 TreeSelectThreadPupupMenu.Visible := False;
3835 TreeSelectBoardPupupMenu.Visible := True;
3836 TPMSep01.Visible := True;
3837 TreeSelectURLPupupMenu.Visible := True;
3838 TreeSelectNamePupupMenu.Visible := True;
3839 TreeSelectNameURLPupupMenu.Visible := True;
3840 TreeSelectFavoriteAddPupupMenu.Visible := True;
3841 TreeSelectLogDeleteSeparator.Visible := False;
3842 TreeSelectLogDeletePopupMenu.Visible := False;
3843 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3844 TreeSelectThreadPupupMenu.Visible := True;
3845 TreeSelectBoardPupupMenu.Visible := False;
3846 TPMSep01.Visible := True;
3847 TreeSelectURLPupupMenu.Visible := True;
3848 TreeSelectNamePupupMenu.Visible := True;
3849 TreeSelectNameURLPupupMenu.Visible := True;
3850 TreeSelectFavoriteAddPupupMenu.Visible := True;
3851 TreeSelectLogDeleteSeparator.Visible := True;
3852 TreeSelectLogDeletePopupMenu.Visible := True;
3853 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3854 TreeSelectThreadPupupMenu.Visible := True;
3855 TreeSelectBoardPupupMenu.Visible := False;
3856 TPMSep01.Visible := True;
3857 TreeSelectURLPupupMenu.Visible := True;
3858 TreeSelectNamePupupMenu.Visible := True;
3859 TreeSelectNameURLPupupMenu.Visible := True;
3860 TreeSelectFavoriteAddPupupMenu.Visible := True;
3861 TreeSelectLogDeleteSeparator.Visible := True;
3862 TreeSelectLogDeletePopupMenu.Visible := True;
3863 end else if (TObject(FClickNode.Data) is TCategory) then begin
3864 TreeSelectThreadPupupMenu.Visible := False;
3865 TreeSelectBoardPupupMenu.Visible := False;
3866 TPMSep01.Visible := False;
3867 TreeSelectURLPupupMenu.Visible := False;
3868 TreeSelectNamePupupMenu.Visible := True;
3869 TreeSelectNameURLPupupMenu.Visible := False;
3870 TreeSelectFavoriteAddPupupMenu.Visible := False;
3871 TreeSelectLogDeleteSeparator.Visible := False;
3872 TreeSelectLogDeletePopupMenu.Visible := False;
3873 end else if FClickNode.IsFirstNode then begin
3874 TreeSelectThreadPupupMenu.Visible := False;
3875 TreeSelectBoardPupupMenu.Visible := False;
3876 TPMSep01.Visible := False;
3877 TreeSelectURLPupupMenu.Visible := False;
3878 TreeSelectNamePupupMenu.Visible := True;
3879 TreeSelectNameURLPupupMenu.Visible := False;
3880 TreeSelectFavoriteAddPupupMenu.Visible := False;
3881 TreeSelectLogDeleteSeparator.Visible := False;
3882 TreeSelectLogDeletePopupMenu.Visible := False;
3884 TreeSelectThreadPupupMenu.Visible := False;
3885 TreeSelectBoardPupupMenu.Visible := False;
3886 TPMSep01.Visible := False;
3887 TreeSelectURLPupupMenu.Visible := False;
3888 TreeSelectNamePupupMenu.Visible := False;
3889 TreeSelectNameURLPupupMenu.Visible := False;
3890 TreeSelectFavoriteAddPupupMenu.Visible := False;
3891 TreeSelectLogDeleteSeparator.Visible := False;
3892 TreeSelectLogDeletePopupMenu.Visible := False;
3896 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3897 var ppDisp: IDispatch; var Cancel: WordBool);
3906 threadItem: TThreadItem;
3907 aElement : IHTMLElement;
3910 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3911 if ( aElement <> nil) then begin
3912 Text := aElement.Get_outerText;
3913 Html := aElement.Get_outerHTML;
3914 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3915 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3916 if GikoSys.Setting.ResAnchorJamp then begin
3918 Text := ZenToHan(Trim(Text));
3920 if(AnsiPos('>>', Text) = 1) then begin
3921 //Text := Copy(Text, 3, Length(Text) - 2);
3924 //Text := Copy(Text, 2, Length(Text) - 1);
3928 if AnsiPos('-', Text) <> 0 then begin
3929 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3930 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3931 wkIntTo := StrToIntDef(Text, 0);
3932 if wkIntTo < wkIntSt then
3935 wkIntSt := StrToIntDef(Text, 0);
3938 if wkIntSt <> 0 then begin
3939 FActiveContent.IDAnchorPopup('');
3940 MoveHisotryManager.pushItem(FActiveContent);
3941 BrowserMovement(IntToStr(wkIntSt));
3947 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3949 URL := GikoSys.GetHRefText(Html);
3950 URL := GikoSys.HTMLDecode(URL);
3951 if AnsiPos('BE:', URL) = 1 then begin
3952 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3953 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3954 threadItem := FActiveContent.Thread;
3955 if threadItem = nil then Exit;
3956 URL := BE_PHP_URL + BNum + '&u=d'
3957 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3960 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3961 ( AnsiPos('ftp://', URL) = 1) then begin
3962 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3963 if GikoSys.Setting.LinkAddAddressBar then begin
3964 idx := AddressComboBox.Items.IndexOf(URL);
3965 if idx = -1 then begin
3966 AddressComboBox.Items.Insert(0, URL);
3967 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3968 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3970 AddressComboBox.Items.Delete(idx);
3971 AddressComboBox.Items.Insert(0, URL);
3974 MoveHisotryManager.pushItem(FActiveContent);
3982 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3984 if Mouse.Capture <> 0 then
3986 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3987 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3988 FBrowserSizeWidth := ViewPanel.Width;
3990 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3991 FBrowserSizeHeight := ViewPanel.Height;
3993 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3994 if ViewPanel.Width < 2 then begin
3995 ViewPanel.Width := 1;
3996 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3997 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3998 GikoSys.Setting.ListWidthState := glsMax;
3999 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
4000 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4001 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
4002 GikoSys.Setting.ListWidthState := glsMin;
4004 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
4005 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
4006 GikoSys.Setting.ListWidthState := glsNormal;
4009 if ViewPanel.Height < 2 then begin
4010 ViewPanel.Height := 1;
4011 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4012 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4013 GikoSys.Setting.ListHeightState := glsMax;
4014 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
4015 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4016 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
4017 GikoSys.Setting.ListHeightState := glsMin;
4019 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
4020 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
4021 GikoSys.Setting.ListHeightState := glsNormal;
4024 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
4025 FBrowserSizeHeight := ViewPanel.Height
4026 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
4027 FBrowserSizeWidth := ViewPanel.Width;}
4030 procedure TGikoForm.BrowserTabChange(Sender: TObject);
4035 BrowserTab.Tabs.BeginUpdate;
4037 if not BrowserTab.Dragging then begin
4038 FTabHintIndex := -1;
4039 BrowserTab.Hint := '';
4040 idx := BrowserTab.TabIndex;
4041 if idx = -1 then begin
4042 SetContent(BrowserNullTab);
4044 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
4045 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
4046 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
4048 FBrowsers.Move(j ,0);
4050 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
4051 (FActiveContent.Browser <> BrowserNullTab.Browser) and
4052 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
4053 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4055 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
4056 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
4057 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
4061 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
4062 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
4063 FBrowsers.Move(BROWSER_COUNT - 1, 0);
4065 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
4066 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
4067 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4069 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
4070 AddressComboBox.Text := GetActiveContent.URL;
4072 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
4073 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4076 GikoDM.SetFocusForBrowserAction.Execute;
4080 BrowserTab.Tabs.EndUpdate;
4085 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4086 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4092 if Button = mbMiddle then begin
4093 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4096 p := BrowserTab.ScreenToClient(p);
4097 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4099 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4100 end else if Button = mbLeft then begin
4101 FDragWFirst := true;
4102 FMouseDownPos.X := X;
4103 FMouseDownPos.Y := Y;
4108 procedure TGikoForm.SetBrowserTabState;
4110 CoolBand: TCoolBand;
4112 BrowserBottomPanel.AutoSize := False;
4113 if GikoSys.Setting.BrowserTabVisible then begin
4115 BrowserTab.Tabs.BeginUpdate;
4117 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4118 BrowserTab.Style := tsTabs;
4119 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4120 BrowserTab.TabPosition := tpTop
4122 BrowserTab.TabPosition := tpBottom;
4123 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4124 BrowserTab.TabPosition := tpTop;
4125 BrowserTab.Style := tsButtons;
4127 BrowserTab.TabPosition := tpTop;
4128 BrowserTab.Style := tsFlatButtons
4131 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4132 BrowserTab.Parent := BrowserTabToolBar;
4133 BrowserBottomPanel.Hide;
4134 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4135 if CoolBand <> nil then
4136 CoolBand.Visible := True;
4138 BrowserTab.Parent := BrowserBottomPanel;
4139 BrowserTab.Top := 0;
4140 BrowserTab.Left := 0;
4141 BrowserBottomPanel.Show;
4142 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4143 if CoolBand <> nil then
4144 CoolBand.Visible := False;
4147 BrowserTab.Tabs.EndUpdate;
4151 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4152 if CoolBand <> nil then
4153 CoolBand.Visible := False;
4154 BrowserBottomPanel.Visible := False;
4155 GikoDM.AllTabCloseAction.Execute;
4159 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4160 Y: Integer; State: TDragState; var Accept: Boolean);
4164 idx := BrowserTab.IndexOfTabAt(X, Y);
4165 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4168 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4173 FDragWFirst := False;
4174 idx := BrowserTab.IndexOfTabAt(X, Y);
4176 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4179 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4180 Shift: TShiftState; X, Y: Integer);
4183 ThreadItem: TThreadItem;
4186 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4188 if ( ssLeft in Shift ) then begin
4189 if (FDragWFirst) then begin
4190 BrowserTab.EndDrag(false);
4191 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4194 BrowserTab.EndDrag(false);
4195 FDragWFirst := false;
4198 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4199 Application.CancelHint;
4200 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4201 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4202 BrowserTab.Hint := ThreadItem.Title;
4203 Application.ShowHint := True;
4205 BrowserTab.Hint := '';
4206 Application.ShowHint := True;
4208 FTabHintIndex := TabIdx;
4213 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4214 const pDisp: IDispatch; var URL: OleVariant);
4216 FDispHtmlDocument: DispHTMLDocument;
4217 BrowserRecord :TBrowserRecord;
4220 threadItem : TThreadItem;
4222 if TObject(Sender) is TWebBrowser then begin
4223 BrowserRecord := nil;
4224 if TWebBrowser(Sender) <> Browser then begin
4225 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4226 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4227 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4231 if BrowserRecord <> nil then begin
4232 if BrowserRecord.Event <> nil then
4233 BrowserRecord.Event.Free;
4234 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4235 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4236 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4237 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4240 if GetActiveContent <> nil then begin
4241 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4242 if FEvent <> nil then
4244 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4245 FEvent.OnContextMenu := OnDocumentContextMenu;
4246 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4248 if FEvent <> nil then begin
4256 if (BrowserRecord <> nil) and
4257 Assigned( BrowserRecord.Thread ) then begin
4258 threadItem := BrowserRecord.Thread;
4260 if (threadItem.JumpAddress > 0) then begin
4261 if threadItem.UnRead then begin
4262 threadItem.UnRead := False;
4264 RefreshListView(threadItem);
4266 //
\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®
4267 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4268 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4269 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4270 threadItem.JumpAddress := 0;
4272 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4275 end else if threadItem.UnRead then begin
4276 threadItem.UnRead := False;
4278 BrowserRecord.Move('new');
4279 RefreshListView(threadItem);
4280 end else if threadItem.ScrollTop <> 0 then begin
4282 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4283 doc.Body.ScrollTop := threadItem.ScrollTop;
4286 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4291 LockWindowUpdate(0);
4294 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4296 AddRoundNameMenu(RoundNamePopupMenu.Items);
4299 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4305 Item := TMenuItem.Create(Self);
4306 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4307 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4309 Item := TMenuItem.Create(Self);
4310 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4311 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4313 Item := TMenuItem.Create(Self);
4314 Item.Caption := '-';
4316 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4317 Item := TMenuItem.Create(Self);
4318 Item.Caption := RoundList.RoundNameList[i];
4319 Item.OnClick := SetSelectRoundName;
4324 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4326 threadItem : TThreadItem;
4328 if ParentName <> 'dummy1' then begin
4329 SetSelectItemRound(RoundFlag, RoundName);
4331 threadItem := GetActiveContent;
4332 if threadItem <> nil then begin
4333 threadItem.RoundName := RoundName;
4335 RoundList.RoundNameList.Add(RoundName);
4336 threadItem.Round := RoundFlag;
4341 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4346 List := TList.Create;
4348 SelectListItem(List);
4349 for i := 0 to List.Count - 1 do begin
4350 if TObject(List[i]) is TBoard then begin
4351 TBoard(List[i]).RoundName := RoundName;
4353 RoundList.RoundNameList.Add(RoundName);
4354 TBoard(List[i]).Round := RoundFlag;
4355 end else if TObject(List[i]) is TThreadItem then begin
4356 if TThreadItem(List[i]).IsLogFile then begin
4357 TThreadItem(List[i]).RoundName := RoundName;
4359 RoundList.RoundNameList.Add(RoundName);
4360 TThreadItem(List[i]).Round := RoundFlag;
4369 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4371 MenuItem: TMenuItem;
4373 if Sender is TMenuItem then begin
4374 MenuItem := TMenuItem(Sender);
4375 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4380 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4385 if CoolBar = nil then
4387 for i := 0 to CoolBar.Bands.Count - 1 do begin
4388 if CoolBar.Bands[i].Control = Control then begin
4389 Result := CoolBar.Bands[i];
4395 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4397 if BrowserTab.Parent = BrowserTabToolBar then
4398 BrowserTab.Width := BrowserTabToolBar.Width;
4401 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4406 procedure TGikoForm.SetMenuFont;
4408 // GikoSys.MenuFont(MenuToolBar.Font);
4409 // MenuToolBar.Buttons[0].AutoSize := False;
4410 // MenuToolBar.Buttons[0].AutoSize := True;
4411 // MenuToolBar.Font.Color := clMenuText;
4412 GikoSys.MenuFont(MainCoolBar.Font);
4413 MenuToolBar.Buttons[0].AutoSize := False;
4414 MenuToolBar.Buttons[0].AutoSize := True;
4415 MainCoolBar.AutoSize := False;
4416 MainCoolBar.AutoSize := True;
4418 GikoSys.MenuFont(ListCoolBar.Font);
4419 GikoSys.MenuFont(BrowserCoolBar.Font);
4420 // MenuToolBar.Font.Color := clMenuText;
4423 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4427 if FavoriteDM.Modified then begin
4430 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4431 NewMenu := TMenuItem.Create(MainMenu);
4432 NewMenu.Action := GikoDM.FavoriteAddAction;
4433 FavoriteMenu.Add(NewMenu);
4434 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4435 NewMenu := TMenuItem.Create(FavoriteMenu);
4436 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4437 FavoriteMenu.Add(NewMenu);
4438 //
\83Z
\83p
\83\8c\81[
\83^
4439 FavoriteMenu.InsertNewLineAfter(NewMenu);
4440 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4441 FavoriteDM.Modified := false;
4445 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4448 NewMenu: array of TMenuItem;
4450 SetLength(NewMenu, Node.Count);
4451 Node := Node.getFirstChild;
4453 while ( Node <> nil ) do begin
4454 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4455 NewMenu[i].AutoHotkeys := maAutomatic;
4456 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4457 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4459 if TObject(Node.Data) is TFavoriteFolder then begin
4460 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4461 CreateFavMenu(Node, NewMenu[i]);
4462 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4463 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4464 NewMenu[i].OnClick := FavoriteClick;
4465 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4466 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4467 NewMenu[i].OnClick := FavoriteClick;
4470 Node := Node.getNextSibling;
4472 MenuItem.Add(NewMenu);
4475 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4477 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';
4478 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4480 Dlg : TFavoriteAddDialog;
4486 if Item is TFavoriteBoardItem then
4487 Item := TFavoriteBoardItem( Item ).Item
4488 else if Item is TFavoriteThreadItem then
4489 Item := TFavoriteThreadItem( Item ).Item;
4491 Node := FavoriteTreeView.Items.GetFirstNode;
4492 if Item is TBoard then begin
4493 ItemURL := TBoard( Item ).URL;
4494 while Node <> nil do begin
4496 if TObject( Data ) is TFavoriteBoardItem then begin
4497 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4498 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4503 Node := Node.GetNext;
4505 Dlg := TFavoriteAddDialog.Create(Self);
4507 Dlg.SetBoard( TBoard( Item ) );
4512 end else if Item is TThreadItem then begin
4513 ItemURL := TThreadItem( Item ).URL;
4514 while Node <> nil do begin
4516 if TObject( Data ) is TFavoriteThreadItem then begin
4517 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4518 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4523 Node := Node.GetNext;
4525 Dlg := TFavoriteAddDialog.Create(Self);
4527 Dlg.SetThreadItem( TThreadItem( Item ) );
4537 procedure TGikoForm.FavoriteClick(Sender: TObject);
4539 FavoriteClick( Sender, True );
4542 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4545 ThreadItem: TThreadItem;
4546 FavBoard: TFavoriteBoardItem;
4547 FavThread: TFavoriteThreadItem;
4551 if Sender is TFavoriteMenuItem then
4552 Item := TFavoriteMenuItem(Sender).Data
4553 else if Sender is TLinkToolButton then
4554 Item := TLinkToolButton(Sender).Data
4555 else if Sender is TTreeNode then
4556 Item := TTreeNode( Sender ).Data
4560 if TObject(Item) is TFavoriteBoardItem then begin
4561 FavBoard := TFavoriteBoardItem(Item);
4562 Board := FavBoard.Item;
4563 if Board <> nil then begin
4564 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4565 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4566 SelectTreeNode(Board, True);
4568 end else if TObject(Item) is TFavoriteThreadItem then begin
4569 FavThread := TFavoriteThreadItem(Item);
4570 ThreadItem := FavThread.Item;
4571 if ThreadItem = nil then
4574 InsertBrowserTab(ThreadItem, ActiveTab);
4576 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4577 if GikoSys.Setting.ListWidthState = glsMin then begin
4578 GikoDM.BrowserMaxAndFocusAction.Execute;
4581 if GikoSys.Setting.ListHeightState = glsMin then begin
4582 GikoDM.BrowserMaxAndFocusAction.Execute;
4588 procedure TGikoForm.BBSMenuItemOnClick(
4593 if Sender is TBBSMenuItem then
4594 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4598 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4600 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4603 //!
\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é)
4604 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4606 stRes, edRes : Int64;
4607 browserRec : TBrowserRecord;
4608 threadNumber : String;
4613 Thread.JumpAddress := 0;
4614 //
\83^
\83u
\82ð
\90¶
\90¬
4615 browserRec := InsertBrowserTab(Thread);
4616 if (browserRec <> nil) then begin
4617 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4618 threadNumber := ChangeFileExt(Thread.FileName, '');
4619 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4620 //
\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
4621 if (StrToInt64(threadNumber) = stRes) then begin
4622 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4623 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4627 if ( stRes > 0 ) then begin
4628 Thread.JumpAddress := stRes;
4630 //
\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é
4631 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4632 DownloadContent(Thread);
4633 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4634 browserRec.Move(IntToStr(stRes));
4635 Thread.JumpAddress := 0;
4637 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4638 Thread.ScrollTop := doc.Body.ScrollTop;
4645 procedure TGikoForm.MoveToURL(const inURL: string);
4647 protocol, host, path, document, port, bookmark : string;
4648 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4650 BBSID, BBSKey: string;
4651 {tmpBoard,} Board: TBoard;
4652 ThreadItem: TThreadItem;
4655 tmpThread : TThreadItem;
4656 shiftDown : Boolean;
4660 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4661 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4664 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4665 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4666 if shiftDown then begin
4667 GikoSys.OpenBrowser(inURL, gbtUserApp);
4669 end else if ctrlDown then begin
4670 GikoSys.OpenBrowser(inURL, gbtIE);
4674 //=====
\83v
\83\89\83O
\83C
\83\93
4677 bi := Length(BoardGroups) - 1;
4678 for i := 1 to bi do begin
4679 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4680 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4683 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4684 Board := BBSsFindBoardFromURL( boardURL );
4687 if Board = nil then begin
4689 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4690 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4693 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4694 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4695 ShowBBSTree( BBSs[ 1 ] );
4698 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4699 if not Board.IsThreadDatRead then begin
4700 GikoSys.ReadSubjectFile( Board );
4704 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4705 if ThreadItem = nil then begin
4706 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4707 ThreadItem := tmpThread;
4708 Board.Insert( 0, ThreadItem );
4709 if ActiveList is TBoard then begin
4710 if TBoard(ActiveList) = Board then
4711 ListView.Items.Count := ListView.Items.Count + 1;
4716 OpenThreadItem(ThreadItem, inURL);
4723 Board := BBSsFindBoardFromURL(
4724 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4726 if Board <> nil then begin
4727 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4728 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4729 SelectTreeNode( Board, True );
4737 // 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¢
4741 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4742 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4743 Board := BBSsFindBoardFromURL( boardURL );
4744 if Board = nil then begin
4745 //
\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
4746 GikoSys.OpenBrowser(inURL, gbtUserApp);
4749 //
\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é
4751 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4752 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4753 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4754 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4755 GikoSys.OpenBrowser(inURL, gbtUserApp);
4760 if not Board.IsThreadDatRead then
4761 GikoSys.ReadSubjectFile(Board);
4762 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4763 ThreadItem := Board.FindThreadFromURL( URL );
4764 //
\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)
4765 if ThreadItem = nil then begin
4766 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4769 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4770 if ThreadItem = nil then begin
4771 ThreadItem := TThreadItem.Create( nil, Board, URL );
4772 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4773 Board.Insert(0, ThreadItem);
4774 if ActiveList is TBoard then begin
4775 if TBoard(ActiveList) = Board then
4776 ListView.Items.Count := ListView.Items.Count + 1;
4779 //
\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é
4780 if (not ThreadItem.IsLogFile) then begin
4781 if AnsiPos(Host, Board.URL) = 0 then
4782 ThreadItem.DownloadHost := Host
4784 ThreadItem.DownloadHost := '';
4786 OpenThreadItem(ThreadItem, inURL);
4790 Board := BBSsFindBoardFromURL( inURL );
4791 if Board = nil then begin
4792 GikoSys.OpenBrowser(inURL, gbtAuto);
4794 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4795 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4796 SelectTreeNode( Board, True );
4801 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4803 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4804 CoolBarResized( Sender, MainCoolBar );
4807 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4808 Shift: TShiftState);
4810 if Key = VK_RETURN then
4811 GikoDM.MoveToAction.Execute;
4814 procedure TGikoForm.BrowserEnter(Sender: TObject);
4816 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4819 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4821 CDS:PCopyDataStruct;
4825 CDS := Message.CopyDataStruct;
4826 GetMem(PC, CDS^.cbData);
4828 lstrcpy(PC,CDS^.lpData);
4829 SetString(sURL, PC,lstrlen(PC));
4834 Message.Result := 1;
4837 procedure TGikoForm.WndProc(var Message: TMessage);
4839 senderBrowser : TWebBrowser;
4845 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4848 if Message.WParam = SC_MINIMIZE then begin
4850 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4853 TreeClick( TreeView.Selected );
4858 if (GikoSys.Setting.StoredTaskTray) then begin
4865 USER_DOCUMENTCOMPLETE:
4866 if (Message.WParam <> 0) and
4867 (TObject(Message.WParam) is TWebBrowser) then begin
4868 senderBrowser := TWebBrowser( Message.WParam );
4869 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4878 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4883 //
\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Í
4884 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4885 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4886 if Msg.CharCode in [VK_BACK] then begin
4887 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4888 if Msg.KeyData > 0 then begin
4891 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4895 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4896 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4899 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4902 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4903 if Msg.CharCode in [VK_BACK] then begin
4904 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4905 if Msg.KeyData > 0 then begin
4908 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4911 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4914 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4918 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4922 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4927 PreviewTimer.Enabled := False;
4931 ARect := FPreviewBrowser.GetWindowRect(p);
4933 FPreviewBrowser.PreviewImage(FPreviewURL);
4935 if ARect.Bottom > Screen.DesktopHeight then begin
4936 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4938 if (ARect.Right > Screen.DesktopWidth) then begin
4939 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4941 if (ARect.Left < Screen.DesktopLeft) then begin
4942 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4944 if (ARect.Top < Screen.DesktopTop) then begin
4945 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4948 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4949 ARect.Left, ARect.Top,
4950 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4951 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4953 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4954 FPreviewBrowserRect := ARect;
4957 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4962 if PreviewTimer.Enabled then
4963 PreviewTimer.Enabled := False;
4964 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4965 FHint.ReleaseHandle;
4969 if (FPreviewBrowser <> nil)
4970 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4971 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4972 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4973 Pos := Mouse.CursorPos;
4974 Pos.X := Pos.X + Left;
4975 Pos.Y := Pos.Y + Top;
4976 if (FPreviewBrowserRect.Left > Pos.X) or
4977 (FPreviewBrowserRect.Right < Pos.X) or
4978 (FPreviewBrowserRect.Top > Pos.Y) or
4979 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4980 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4984 Message.Result := 1;
4987 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4989 GikoDM.MsgBarCloseAction.Execute;
4992 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4994 Doc: IHtmlDocument2;
4995 Range: IHTMLTxtRange;
4998 ThreadItem: TThreadItem;
5001 FactiveContent.IDAnchorPopup('');
5002 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
5003 if Assigned(Doc) then begin
5004 Range := Doc.selection.createRange as IHTMLTxtRange;
5005 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
5006 s := ZenToHan(Trim(s));
5007 if GikoSys.IsNumeric(s) then begin
5009 ThreadItem := GetActiveContent;
5010 if ThreadItem <> nil then begin
5011 Num := StrToInt64(s);
5012 FHint.PopupType := gptThread;
5013 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
5014 if FHint.ResCount <> 0 then
5025 procedure TGikoForm.ShowTextPopup;
5030 // if Trim(s) = '' then
5033 FHint.Font.Name := GikoSys.Setting.HintFontName;
5034 FHint.Font.Size := GikoSys.Setting.HintFontSize;
5035 FHint.Font.Color := GikoSys.Setting.HintFontColor;
5036 FHint.Color := GikoSys.Setting.HintBackColor;
5037 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
5039 if FHint.PopupType = gptRaw then
5040 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
5042 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
5043 case GikoSys.Setting.PopupPosition of
5044 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5045 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5046 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
5047 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
5048 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
5049 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
5050 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
5051 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
5052 gppLeftBottom: OffsetRect(ARect, p.x + 15, p.y + 15); //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g
\82P
\82Ì453
\8e\81\82É
\8a´
\8eÓ
5054 //FHint.ActivateHint(ARect, s);
5055 if FHint.PopupType = gptRaw then
5056 FHint.ActivateHint(ARect, FHint.Caption)
5058 FHint.ActivateHint(ARect, '');
5060 FHint.ReleaseHandle;
5065 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
5067 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
5068 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
5070 if FTreeType = gttHistory then begin
5071 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
5072 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
5076 TreeView.Items.Clear;
5080 procedure TGikoForm.SetLinkBar;
5084 ToolButton: TLinkToolButton;
5085 MenuItem: TMenuItem;
5086 oldIgnoreResize : TResizeType;
5088 oldIgnoreResize := FIsIgnoreResize;
5089 FIsIgnoreResize := rtResizing;
5090 MainCoolBar.Bands.BeginUpdate;
5092 LinkBarPopupMenu.Items.Clear;
5093 for i := LinkToolBar.ButtonCount - 1 downto 0 do
5094 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
5095 LinkToolBar.Buttons[i].Free;
5096 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5097 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5098 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5099 ToolButton := TLinkToolButton.Create(LinkToolBar);
5100 // ToolButton.Parent := LinkToolBar;
5101 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
5102 MenuItem := TMenuItem.Create(Self);
5103 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
5104 LinkBarPopupMenu.Items.Add(MenuItem);
5105 ToolButton.MenuItem := MenuItem;
5106 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
5107 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
5108 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
5109 ToolButton.OnClick := FavoriteClick;
5110 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
5111 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
5112 ToolButton.OnClick := FavoriteClick;
5114 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
5115 ToolButton.Left := 10000;
5116 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5117 ToolButton.AutoSize := True;
5118 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5119 ToolButton.OnDragOver := FavoriteDragOver;
5120 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5121 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5122 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5123 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5124 //ToolButton.DragMode := dmAutomatic;
5125 ToolButton.DragMode := dmManual;
5126 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5128 LinkToolBar.InsertControl(ToolButton);
5133 { if LinkToolBar.ButtonCount = 0 then begin
5134 ToolButton := TLinkToolButton.Create(LinkToolBar);
5135 ToolButton.Style := tbsButton;
5136 ToolButton.ImageIndex := -1;
5137 ToolButton.Caption := '';
5138 LinkToolBar.InsertControl(ToolButton);
5141 MainCoolBar.Bands.EndUpdate;
5142 LoadCoolBarSettings;
5143 FIsIgnoreResize := oldIgnoreResize;
5147 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5155 if Sender = FavoriteTreeView then begin
5156 Node := FavoriteTreeView.GetNodeAt(X, Y);
5161 bound := Node.DisplayRect( False );
5162 height := bound.Bottom - bound.Top;
5163 if (bound.Top + height / 2) <= Y then
5164 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5169 if Node.IsFirstNode then
5174 if FDropSpaceNode <> nil then
5175 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5178 if Change then begin
5179 if FDropSpaceNode <> nil then
5180 FDropSpaceNode.Free;
5182 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5183 FDropSpaceNode.MoveTo( Node, naInsert );
5184 FDropSpaceNode.ImageIndex := -1;
5185 FDropSpaceNode.SelectedIndex := -1;
5189 if Source = FavoriteTreeView then begin
5190 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5195 end else if Source = BrowserTab then
5197 else if Source = ListView then
5199 else if Source is TLinkToolButton then
5201 else if Source = TreeView then
5207 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5210 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5213 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5215 // FDragging := true;
5218 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5220 SenderNode: TTreeNode;
5221 LinkToolButton: TLinkToolButton;
5224 LinkToolButton := TLinkToolButton( Sender );
5225 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5226 SenderNode.Selected := False;
5227 FavoriteDragDrop( SenderNode, Source );
5233 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5235 favButton : TLinkToolButton;
5236 favThreadItem : TFavoriteThreadItem;
5242 if Sender is TLinkToolButton then begin
5243 favButton := TLinkToolButton( Sender );
5244 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5245 favThreadItem := TFavoriteThreadItem( favButton.Data );
5246 if favThreadItem.Item <> nil then
5247 InsertBrowserTab( favThreadItem.Item, False );
5255 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5259 TToolButton( Sender ).DragMode := dmManual;
5260 if ssLeft in Shift then begin
5261 // 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)
5262 if FDragTime = 0 then begin
5263 FDragTime := GetTickCount();
5265 Now := GetTickCount();
5266 if (Now - FDragTime) > 500 then begin
5267 if FDragButton <> TToolButton( Sender ) then begin
5269 FDragButton := TToolButton( Sender );
5270 TToolButton(Sender).BeginDrag(false ,5);
5273 {$IF Defined(debug)}
5274 ShowMessage('Error');
5285 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5290 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5295 for i := 0 to ToolBar.ButtonCount - 1 do
5296 if ToolBar.Buttons[i].Visible then
5297 Result := Result + ToolBar.Buttons[i].Width;
5300 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5302 Control : TWinControl;
5305 Control := FindControl(BandInfo^.hwndChild);
5306 if Control = nil then
5309 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5310 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5311 idx := MainCoolBar.Bands[ i ].ID;
5315 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5316 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5317 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5318 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5319 BandInfo^.cxMinChild := 0;
5320 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5321 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5322 end else if Control = LinkToolBar then begin
5323 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5324 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5325 BandInfo^.cxMinChild := 0;
5326 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5327 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5328 end else begin // AddressToolBar
5329 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5330 BandInfo^.cxMinChild := 0;
5331 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5335 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5341 ChevronPopupMenu.Items.Clear;
5343 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5344 if MainCoolBar.Bands[ i ].Visible then begin
5345 if Idx = Int64(RebarChevron^.uBand) then begin
5352 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5353 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5355 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5356 ToolBarChevronMenu(StdToolBar);
5357 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5361 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5362 ChevronPopupMenu.Popup(p.x, p.y);
5366 procedure TGikoForm.MenuBarChevronMenu;
5367 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5373 for i := 0 to MenuItem.Count - 1 do begin
5375 if MenuItem[i] is TFavoriteMenuItem then begin
5376 Item := TFavoriteMenuItem.Create(Self);
5377 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5379 Item := TMenuItem.Create(Self);
5380 Item.Caption := MenuItem[i].Caption;
5381 Item.Action := MenuItem[i].Action;
5382 Item.ImageIndex := MenuItem[i].ImageIndex;
5383 Item.OnClick := MenuItem[i].OnClick;
5384 PopupItem.Add(Item);
5385 if MenuItem[i].Count > 0 then
5386 SetSubMenu(MenuItem[i], Item);
5395 ChevronPopupMenu.Items.Clear;
5396 ChevronPopupMenu.Images := MainMenu.Images;
5397 bw := GetWidthAllToolButton(MenuToolBar);
5398 if MenuToolBar.Width < bw then begin
5400 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5401 w := w + MenuToolBar.Buttons[i].Width;
5402 if MenuToolBar.Width <= w then begin
5403 Item := TMenuItem.Create(Self);
5404 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5405 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5406 ChevronPopupMenu.Items.Add(Item);
5407 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5413 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5414 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5419 if Assigned(PopupMenu.OnPopup) then
5420 PopupMenu.OnPopup(nil);
5421 for i := 0 to PopupMenu.Items.Count - 1 do begin
5423 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5424 Item := TFavoriteMenuItem.Create(Self);
5425 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5427 Item := TMenuItem.Create(Self);
5428 Item.Caption := PopupMenu.Items[i].Caption;
5429 Item.Action := PopupMenu.Items[i].Action;
5430 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5431 Item.OnClick := PopupMenu.Items[i].OnClick;
5432 PopupItem.Add(Item);
5441 ChevronPopupMenu.Items.Clear;
5442 ChevronPopupMenu.Images := ToolBar.HotImages;
5443 bw := GetWidthAllToolButton(ToolBar);
5444 if ToolBar.Width < bw then begin
5446 for i := 0 to ToolBar.ButtonCount - 1 do begin
5447 if ToolBar.Buttons[i].Visible then
5448 w := w + ToolBar.Buttons[i].Width;
5449 if ToolBar.Width <= w then begin
5450 if ToolBar.Buttons[i].Tag = 0 then begin
5451 Item := TMenuItem.Create(Self);
5452 if ToolBar.Buttons[i].Style = tbsSeparator then
5455 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5456 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5459 Item.Caption := ToolBar.Buttons[i].Caption;
5460 Item.Action := ToolBar.Buttons[i].Action;
5462 //Item.Visible := True;
5464 ChevronPopupMenu.Items.Add(Item);
5465 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5467 Item.OnClick := nil;
5468 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5476 procedure TGikoForm.LinkBarChevronMenu;
5481 Item: TFavoriteMenuItem;
5483 Button: TLinkToolButton;
5485 ChevronPopupMenu.Items.Clear;
5486 ChevronPopupMenu.Images := LinkToolBar.Images;
5487 bw := GetWidthAllToolButton(LinkToolBar);
5488 if LinkToolBar.Width < bw then begin
5490 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5491 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5492 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5493 w := w + LinkToolBar.Buttons[j].Width;
5494 if LinkToolBar.Width <= w then begin
5495 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5496 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5497 Item := TFavoriteMenuItem.Create(Self);
5498 if TObject(Button.Data) is TFavoriteFolder then begin
5499 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5500 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5501 Item.OnClick := FavoriteClick;
5502 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5503 Item.OnClick := FavoriteClick;
5505 Item.Data := Button.Data;
5506 Item.Caption := LinkToolBar.Buttons[j].Caption;
5507 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5508 ChevronPopupMenu.Items.Add(Item);
5519 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5520 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5521 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5523 \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É
5524 \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
5526 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5528 bandInfo : tagREBARBANDINFOA;
5529 pBandInfo : PReBarBandInfoA;
5536 pBandInfo := @bandInfo;
5537 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5538 bandInfo.cbSize := sizeof( bandInfo );
5539 bandInfo.hwndChild := h;
5540 bandInfo.cyMinChild := bar.Height;
5541 bar.OnBandInfo( nil, pBandInfo );
5542 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5544 for i := bar.Bands.Count - 1 downto 0 do begin
5545 if bar.Bands[ i ].Control.Handle = h then begin
5551 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5555 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5557 Control: TWinControl;
5560 Control := FindControl(BandInfo^.hwndChild);
5561 if Control = nil then
5564 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5565 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5566 idx := ListCoolBar.Bands[ i ].ID;
5570 if Control = ListToolBar then begin
5571 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5572 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5573 BandInfo^.cxMinChild := 0;
5574 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5575 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5577 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5578 BandInfo^.cxMinChild := 0;
5579 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5583 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5588 ChevronPopupMenu.Items.Clear;
5589 Idx := RebarChevron^.uBand;
5590 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5591 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5592 ToolBarChevronMenu(ListToolBar);
5595 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5596 ChevronPopupMenu.Popup(p.x, p.y);
5600 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5602 Control: TWinControl;
5605 Control := FindControl(BandInfo^.hwndChild);
5606 if Control = nil then
5609 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5610 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5611 idx := BrowserCoolBar.Bands[ i ].ID;
5615 if Control = BrowserToolBar then begin
5616 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5617 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5618 BandInfo^.cxMinChild := 0;
5619 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5620 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5622 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5623 BandInfo^.cxMinChild := 0;
5624 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5628 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5633 ChevronPopupMenu.Items.Clear;
5634 Idx := RebarChevron^.uBand;
5635 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5636 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5637 ToolBarChevronMenu(BrowserToolBar)
5640 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5641 ChevronPopupMenu.Popup(p.x, p.y);
5645 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5647 if Column^.iImage = -1 then begin
5648 Column^.mask := Column^.mask or LVCF_FMT;
5650 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5651 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5655 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5660 for i := bar.ButtonCount - 1 downto 0 do begin
5661 if bar.Buttons[ i ].Action = action then begin
5662 Result := bar.Buttons[ i ];
5668 procedure TGikoForm.SetToolBarPopup;
5671 aIEButton : TToolButton;
5672 aCabinetBBSButton : TToolButton;
5673 aResRangeButton : TToolButton;
5674 aThreadRangeButton: TToolButton;
5676 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5678 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5679 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5680 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5681 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5682 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5684 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5685 if aIEButton <> nil then
5686 aIEButton.DropdownMenu := BrowserPopupMenu;
5687 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5688 if aCabinetBBSButton <> nil then
5689 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5690 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5691 if aResRangeButton <> nil then
5692 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5693 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5694 if aThreadRangeButton <> nil then
5695 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5698 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5699 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5703 // browserPos : TPoint;
5707 Wnd := WindowFromPoint(Mouse.CursorPos);
5709 if WheelDelta > 0 then
5714 if (Wnd = BrowserTab.Handle) or
5715 (Wnd = BrowserTab.Parent.Handle) then begin
5716 BrowserTab.ScrollTabs(Delta);
5718 if FIsHandledWheel then begin
5719 FIsHandledWheel := False;
5722 FIsHandledWheel := True;
5723 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5724 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5726 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5734 procedure TGikoForm.SetSelectWord( const text : string );
5736 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5737 ClearThreadRengeAction;
5739 if Length( text ) = 0 then
5741 GikoDM.AllItemAction.Checked := True;
5742 SetListViewType( gvtAll )
5744 SetListViewType( gvtUser, text, false );
5748 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5751 SetSelectWord( SelectComboBox.Text );
5755 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5756 Shift: TShiftState);
5764 if Key = VK_Return then
5767 end else if Key = 229 then begin
5768 if GikoSys.Setting.UseUndecided then begin
5769 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5770 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5771 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5772 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5773 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5774 SetLength(Str, Len);
5775 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5776 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5777 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5779 Str := SelectComboBox.Text + Str;
5781 if (Length(Str) > 0) then begin
5785 end else if Length( SelectComboBox.Text ) = 0 then
5787 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5788 *
\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
5789 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5792 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5793 ClearThreadRengeAction;
5797 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5798 procedure TGikoForm.ClearThreadRengeAction;
5800 //
\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é
5801 if GikoDM.AllItemAction.Checked then
5802 GikoDM.AllItemAction.Checked := False;
5803 if GikoDM.LogItemAction.Checked then
5804 GikoDM.LogItemAction.Checked := False;
5805 if GikoDM.NewItemAction.Checked then
5806 GikoDM.NewItemaction.Checked := False;
5807 if GikoDM.LiveItemAction.Checked then
5808 GikoDM.LiveItemAction.Checked := False;
5809 if GikoDM.ArchiveItemAction.Checked then
5810 GikoDM.ArchiveItemAction.Checked := False;
5814 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5819 if Length( SelectComboBox.Text ) = 0 then
5821 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5822 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5827 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5828 procedure TGikoForm.ModifySelectList;
5835 if not SelectComboBoxPanel.Visible then
5838 if Length( SelectComboBox.Text ) > 0 then
5840 oldText := SelectComboBox.Text;
5841 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5843 GikoSys.Setting.SelectTextList.Delete( idx );
5844 idx := SelectComboBox.Items.IndexOf( oldText );
5846 SelectComboBox.Items.Delete( idx );
5847 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5848 SelectComboBox.Items.Insert( 0, oldText );
5849 SelectComboBox.Text := oldText;
5857 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5858 Shift: TShiftState; X, Y: Integer);
5863 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5866 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5867 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5868 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5870 If w <= 50 Then Begin
5871 //
\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
5872 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5873 pos.X := pos.X + (50 - w);
5875 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5879 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5880 //If SelectComboBox.Width <> w Then Begin
5881 If SelectComboBoxPanel.Width <> w Then Begin
5882 SelectComboBoxPanel.Width := w;
5883 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5884 GikoSys.Setting.SelectComboBoxWidth := w;
5885 DraggingSelectComboBoxPosition := pos;
5887 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5888 ResetBandInfo( ListCoolBar, ListToolBar );
5894 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5895 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5899 IsDraggingSelectComboBox := True;
5902 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5906 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5907 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5909 IsDraggingSelectComboBox := False;
5913 procedure TGikoForm.StatusBarResize(Sender: TObject);
5915 StatusBar.Panels[1].Width := StatusBar.Width -
5916 StatusBar.Panels[0].Width -
5917 StatusBar.Panels[THREADSIZE_PANEL].Width -
5918 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5920 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5923 if (Length( SelectComboBox.Text ) = 0) or
5924 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5926 SelectComboBox.Text := '';
5927 SelectComboBox.Color := clWindow;
5932 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5935 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5938 if TObject(SenderNode.Data) is TFavoriteFolder then
5939 SourceNode.MoveTo(SenderNode, naAddChild)
5941 SourceNode.MoveTo(SenderNode, naInsert);
5945 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5949 FavoBoardItem: TFavoriteBoardItem;
5950 FavoThreadItem: TFavoriteThreadItem;
5952 ThreadItem: TThreadItem;
5955 if (SenderNode = nil) or (Source = nil) then
5958 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5959 FavNode := SenderNode.Parent
5961 FavNode := SenderNode;
5965 if Source is TBoard then begin
5966 Board := TBoard( Source );
5967 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5968 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5969 Node.ImageIndex := 15;
5970 Node.SelectedIndex := 15;
5971 end else if Source is TFavoriteBoardItem then begin
5972 FavoBoardItem := TFavoriteBoardItem( Source );
5973 Board := FavoBoardItem.Item;
5974 if Board <> nil then
5975 if not Board.IsThreadDatRead then
5976 GikoSys.ReadSubjectFile(Board);
5977 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5978 Node.ImageIndex := 15;
5979 Node.SelectedIndex := 15;
5980 end else if Source is TThreadItem then begin
5981 ThreadItem := TThreadItem( Source );
5982 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5983 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5984 Node.ImageIndex := 16;
5985 Node.SelectedIndex := 16;
5986 end else if Source is TBrowserRecord then begin
5987 ThreadItem := TBrowserRecord( Source ).Thread;
5988 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5989 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5990 Node.ImageIndex := 16;
5991 Node.SelectedIndex := 16;
5992 end else if Source is TFavoriteThreadItem then begin
5993 FavoThreadItem := TFavoriteThreadItem( Source );
5994 ThreadItem := FavoThreadItem.Item;
5995 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5996 Node.ImageIndex := 16;
5997 Node.SelectedIndex := 16;
6000 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
6002 FavoriteMoveTo( SenderNode, Node );
6006 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
6009 SourceNode: TTreeNode;
6010 LinkToolButton: TLinkToolButton;
6013 if SenderNode = nil then
6016 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
6017 if FDropSpaceNode <> nil then
6018 SenderNode := FDropSpaceNode;
6020 if Source = FavoriteTreeView then begin
6021 SourceNode := FavoriteTreeView.Selected;
6022 FavoriteMoveTo( SenderNode, SourceNode );
6023 end else if Source is TLinkToolButton then begin
6024 LinkToolButton := TLinkToolButton( Source );
6025 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
6026 FavoriteMoveTo( SenderNode, SourceNode );
6027 end else if Source = BrowserTab then begin
6028 idx := BrowserTab.TabIndex;
6029 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
6030 end else if Source = ListView then begin
6031 FavoriteAddTo( SenderNode, ListView.Selected.Data );
6032 end else if Source = TreeView then begin
6033 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
6037 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
6040 SenderNode: TTreeNode;
6043 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
6044 if SenderNode <> nil then begin
6045 FavoriteDragDrop( SenderNode, Source );
6048 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
6049 if FDropSpaceNode <> nil then begin
6051 FDropSpaceNode.Delete;
6053 FDropSpaceNode := nil;
6056 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6057 FavoriteDM.Modified := true;
6063 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
6064 Node: TTreeNode; var S: String);
6066 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6067 FavoriteDM.Modified := true;
6069 FavoriteTreeView.ReadOnly := True;
6074 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
6075 Shift: TShiftState);
6077 if not TTreeView(Sender).IsEditing then begin
6081 FClickNode := FavoriteTreeView.Selected;
6082 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
6086 FClickNode := FavoriteTreeView.Selected;
6087 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
6091 FavoriteClick( FavoriteTreeView.Selected );
6092 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
6096 FClickNode := FavoriteTreeView.Selected;
6097 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
6101 //
\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·
6102 if Key = VK_ESCAPE then begin
6103 if (TTreeView(Sender).Selected <> nil) then begin
6104 TTreeView(Sender).Selected.Text := FOrigenCaption;
6106 TTreeView(Sender).Selected.Focused := False;
6112 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
6115 LinkToolButton: TLinkToolButton;
6118 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6120 FClickNode := FavoriteTreeView.Selected;
6122 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6124 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6125 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6126 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6127 FClickNode := FavoriteTreeView.Items[i];
6131 for i := 0 to FClickNode.Count - 1 do begin
6132 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6133 FClickNode := FClickNode.Item[i];
6140 if FClickNode = nil then begin
6141 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6142 FavoriteTreeDeletePopupMenu.Visible := False;
6143 FavoriteTreeRenamePopupMenu.Visible := False;
6144 FavoriteTreeNewFolderPopupMenu.Visible := False;
6145 FavoriteTreeURLCopyPopupMenu.Visible := False;
6146 FavoriteTreeNameCopyPopupMenu.Visible := False;
6147 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6148 FavoriteTreeReloadPopupMenu.Visible := False;
6149 FavoriteTreeLogDeletePopupMenu.Visible := False;
6150 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6151 end else if FClickNode.IsFirstNode then begin
6152 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6153 FavoriteTreeDeletePopupMenu.Visible := False;
6154 FavoriteTreeRenamePopupMenu.Visible := False;
6155 FavoriteTreeNewFolderPopupMenu.Visible := True;
6156 FavoriteTreeURLCopyPopupMenu.Visible := False;
6157 FavoriteTreeNameCopyPopupMenu.Visible := False;
6158 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6159 FavoriteTreeReloadPopupMenu.Visible := False;
6160 FavoriteTreeLogDeletePopupMenu.Visible := False;
6161 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6162 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6163 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6164 FavoriteTreeDeletePopupMenu.Visible := True;
6165 FavoriteTreeRenamePopupMenu.Visible := False;
6166 FavoriteTreeNewFolderPopupMenu.Visible := True;
6167 FavoriteTreeURLCopyPopupMenu.Visible := False;
6168 FavoriteTreeNameCopyPopupMenu.Visible := False;
6169 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6170 FavoriteTreeReloadPopupMenu.Visible := False;
6171 FavoriteTreeLogDeletePopupMenu.Visible := False;
6172 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6173 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6174 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6175 FavoriteTreeDeletePopupMenu.Visible := True;
6176 FavoriteTreeRenamePopupMenu.Visible := True;
6177 FavoriteTreeNewFolderPopupMenu.Visible := True;
6178 FavoriteTreeURLCopyPopupMenu.Visible := False;
6179 FavoriteTreeNameCopyPopupMenu.Visible := True;
6180 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6181 FavoriteTreeReloadPopupMenu.Visible := False;
6182 FavoriteTreeLogDeletePopupMenu.Visible := False;
6183 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6184 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6185 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6186 FavoriteTreeDeletePopupMenu.Visible := True;
6187 FavoriteTreeRenamePopupMenu.Visible := True;
6188 FavoriteTreeNewFolderPopupMenu.Visible := True;
6189 FavoriteTreeURLCopyPopupMenu.Visible := True;
6190 FavoriteTreeNameCopyPopupMenu.Visible := True;
6191 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6192 FavoriteTreeReloadPopupMenu.Visible := True;
6193 FavoriteTreeLogDeletePopupMenu.Visible := True;
6194 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6195 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6196 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6197 FavoriteTreeDeletePopupMenu.Visible := True;
6198 FavoriteTreeRenamePopupMenu.Visible := True;
6199 FavoriteTreeNewFolderPopupMenu.Visible := True;
6200 FavoriteTreeURLCopyPopupMenu.Visible := True;
6201 FavoriteTreeNameCopyPopupMenu.Visible := True;
6202 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6203 FavoriteTreeReloadPopupMenu.Visible := True;
6204 FavoriteTreeLogDeletePopupMenu.Visible := False;
6205 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6207 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6208 FavoriteTreeDeletePopupMenu.Visible := False;
6209 FavoriteTreeRenamePopupMenu.Visible := False;
6210 FavoriteTreeNewFolderPopupMenu.Visible := False;
6211 FavoriteTreeURLCopyPopupMenu.Visible := False;
6212 FavoriteTreeNameCopyPopupMenu.Visible := False;
6213 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6214 FavoriteTreeReloadPopupMenu.Visible := False;
6215 FavoriteTreeLogDeletePopupMenu.Visible := False;
6216 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6221 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6226 if not (TObject(node.Data) is TFavoriteFolder) then
6229 for i := 0 to node.Count - 1 do
6231 if TObject(node.Item[i].Data) is TFavoriteFolder then
6232 FavoriteBrowseFolder( node.Item[i] )
6233 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6234 FavoriteClick( node.Item[i], False );
6238 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6244 for i := 0 to Node.Count - 1 do begin
6245 if Node.Item[i].Data = FindPointer then begin
6246 Result := Node.Item[i];
6248 end else if Node.Item[i].Count > 0 then begin
6249 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6250 if Found <> nil then begin
6261 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6265 SenderNode: TTreeNode;
6269 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6270 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6271 SenderNode := FavoriteTreeView.Items[i];
6275 SenderNode.Selected := False;
6277 FavoriteDragDrop( SenderNode, Source );
6282 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6283 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6285 if FDragWFirst = true then
6286 FDragWFirst := false;
6288 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6289 if GikoSys.Setting.ListWidthState = glsMin then begin
6290 GikoDM.BrowserMaxAndFocusAction.Execute;
6293 if GikoSys.Setting.ListHeightState = glsMin then begin
6294 GikoDM.BrowserMaxAndFocusAction.Execute;
6299 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6300 Y: Integer; State: TDragState; var Accept: Boolean);
6303 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6307 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6311 if FDropSpaceNode <> nil then begin
6313 FDropSpaceNode.Delete;
6315 FDropSpaceNode := nil;
6317 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6318 FavoriteDM.Modified := true;
6324 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6326 if FListViewBackGroundColor <> value then begin
6327 FListViewBackGroundColor := value;
6328 ListView.Color := FListViewBackGroundColor;
6331 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6333 threadItem : TThreadItem;
6337 if FClickNode = nil then Exit;
6339 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6341 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6342 if threadItem = nil then
6344 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6346 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6348 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6349 if boardItem = nil then
6351 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6357 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6358 MousePos: TPoint; var Handled: Boolean);
6362 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6363 if BrowserTab.TabIndex <> idx then begin
6364 BrowserTab.TabIndex := idx;
6365 BrowserTab.OnChange(nil);
6369 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6371 ThreadItem: TThreadItem;
6377 boardPlugIn : TBoardPlugIn;
6379 if Number = 0 then Exit;
6380 ThreadItem := GetActiveContent;
6382 if ThreadItem <> nil then begin
6383 //if ThreadItem.IsBoardPlugInAvailable then begin
6384 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6385 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6386 //boardPlugIn := ThreadItem.BoardPlugIn;
6387 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6389 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6390 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6391 //
\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
6392 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6394 FileName := ThreadItem.FilePath;
6395 tmp := GikoSys.ReadThreadFile(FileName, Number);
6397 if tmp <> '' then begin
6398 THTMLCreate.DivideStrLine(tmp, @Res);
6400 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6401 if ReplaceTag then begin
6402 Header := CustomStringReplace(Header, '</b>', '',true);
6403 Header := CustomStringReplace(Header, '<b>', '',true);
6404 Header := CustomStringReplace(Header, '<br>', '',true);
6405 Header := DeleteFontTag(Header);
6407 //if ThreadItem.IsBoardPlugInAvailable then begin
6408 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6409 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6410 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6412 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6413 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6414 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6415 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6418 Body := CustomStringReplace(Body, '</a>', '',true);
6420 Body := HTMLCreater.DeleteLink(Body);
6421 if ReplaceTag then begin
6422 Body := CustomStringReplace(Body, '<', '<');
6423 Body := CustomStringReplace(Body, '>', '>');
6424 Body := CustomStringReplace(Body, '"', '"');
6425 Body := CustomStringReplace(Body, '&', '&');
6426 //Body := CustomStringReplace(Body, ' ', ' ');
6429 Header := Header + Body;
6431 Clipboard.SetTextBuf( PChar(Header) );
6437 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6439 AddRoundNameMenu(dummy1);
6442 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6444 FavoriteDM.URLReplace(oldURLs, newURLs);
6447 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6449 RoundList.URLReplace(oldURLs, newURLs);
6452 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6454 Filename = 'tab.sav';
6455 bFilename = '~tab.sav';
6461 oldBoardName: string;
6463 newBoardName: string;
6464 TabList: TStringList;
6467 if oldURLs.Count <> newURLs.Count then begin
6470 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6471 TabList := TStringList.Create;
6473 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6475 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6476 //
\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
6477 for i := 0 to oldURLs.Count - 1 do begin
6478 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6479 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6480 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6481 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6482 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6483 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6485 for j := 0 to TabList.Count - 1 do begin
6486 tempString := TabList[j];
6487 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6488 tempString := StringReplace(tempString, oldHost, newHost,[]);
6489 TabList[j] := tempString;
6493 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6495 if FileExists( GikoSys.GetAppDir + Filename) then begin
6496 if FileExists( GikoSys.GetAppDir + bFilename) then
6497 DeleteFile(GikoSys.GetAppDir + bFilename);
6499 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6500 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6503 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6511 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6512 procedure TGikoForm.OnMinimize;
6514 if FActiveContent <> nil then begin
6515 FIsMinimize := mtMinimizing;
6516 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6520 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6521 procedure TGikoForm.OnMinimized;
6523 FIsMinimize := mtMinimized;
6527 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6529 CoolBarResized( Sender, BrowserCoolBar );
6532 // *************************************************************************
6533 // ExternalBoardPlugInMain
6534 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6535 // *************************************************************************
6536 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6539 boardPlugIn : TBoardPlugIn;
6542 if not (Sender is TMenuItem) then
6545 item := TMenuItem( Sender );
6546 if not Assigned( Pointer( item.Tag ) ) then
6549 //
\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·
6550 boardPlugIn := TBoardPlugIn( item.Tag );
6551 boardPlugIn.PlugInMenu( item.Handle );
6554 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6555 procedure TGikoForm.TreeClick( Node : TTreeNode );
6561 if FTreeType = gttHistory then begin
6563 if TObject( Node.Data ) is TFavoriteThreadItem then
6564 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6565 FavoriteClick( Node );
6568 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6569 if ActiveList = Node.Data then
6572 ActiveListColumnSave;
6574 if TObject(Node.Data) is TBBS then begin
6575 SetActiveList(Node.data);
6576 end else if TObject(Node.Data) is TCategory then begin
6577 SetActiveList(Node.data);
6578 end else if TObject(Node.Data) is TBoard then begin
6579 if not TBoard(Node.Data).IsThreadDatRead then begin
6580 Screen.Cursor := crHourGlass;
6582 if not TBoard(Node.Data).IsThreadDatRead then
6583 GikoSys.ReadSubjectFile(Node.Data);
6585 Screen.Cursor := crDefault;
6588 Sort.SetSortDate(Now());
6589 SetActiveList(Node.data);
6592 if TObject( Node.Data ) is TBoard then begin // not TCategory
6593 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6594 if GikoSys.Setting.ListWidthState = glsMax then begin
6595 GikoDM.BrowserMinAction.Execute;
6596 if GikoForm.Visible then
6600 if GikoSys.Setting.ListHeightState = glsMax then begin
6601 GikoDM.BrowserMinAction.Execute;
6602 if GikoForm.Visible then
6610 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6611 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6614 ThreadItem : TThreadItem;
6615 shiftDown : Boolean;
6618 if Node = nil then Exit;
6620 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6622 if FTreeType = gtt2ch then begin
6623 if not (TObject(Node.Data) is TBoard) then Exit;
6624 Board := TBoard(Node.Data);
6625 DownloadList(Board, shiftDown);
6626 end else if FTreeType = gttHistory then begin
6627 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6628 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6629 DownloadContent(ThreadItem, shiftDown);
6633 // *************************************************************************
6634 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6635 // *************************************************************************
6636 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6637 Shift: TShiftState);
6639 if Key = VK_BACK then begin
6640 // UpFolderButtonClick(Sender);
6641 end else if Key = VK_SPACE then begin
6642 TreeDoubleClick( TreeView.Selected );
6643 end else if Key = VK_RETURN then begin
6644 TreeClick( TreeView.Selected );
6645 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6648 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6649 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6650 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6652 favItem : TTreeNode;
6653 favThreadItem : TFavoriteThreadItem;
6659 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6660 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6661 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6662 rect := FavoriteTreeView.Selected.DisplayRect(true);
6663 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6664 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6665 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6666 if ssDouble in Shift then begin
6667 FClickNode := FavoriteTreeView.Selected;
6668 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6672 TObject(FavoriteTreeView.Selected));
6679 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6680 if favItem = nil then Exit;
6682 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6683 favThreadItem := TFavoriteThreadItem( favItem.Data );
6684 if favThreadItem.Item <> nil then
6685 InsertBrowserTab( favThreadItem.Item, False );
6692 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6695 if FIsIgnoreResize <> rtNone then
6698 if GikoSys.Setting.ListOrientation = gloVertical then begin
6699 if GikoSys.Setting.ListHeightState = glsMin then begin
6700 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6701 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6707 procedure TGikoForm.OnResized;
6712 FOldFormWidth := Width;
6713 FIsIgnoreResize := rtNone;
6718 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6719 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6724 //
\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)
6725 if FActiveContent <> nil then begin
6726 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6727 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6729 FIsMinimize := mtNone;
6734 // *************************************************************************
6735 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6736 // *************************************************************************
6737 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6742 stlist : TStringList;
6743 i, count, rc : Integer;
6749 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6750 FActiveContent.Browser.SetFocus;
6753 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6754 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6755 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6756 if (Assigned(e)) then begin
6757 if (e.className = 'date') or (e.id = 'date') then begin
6759 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6760 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6761 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6762 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6765 stlist := TStringList.Create;
6767 stList.DelimitedText := AID;
6769 for i := 0 to stList.Count - 1 do
6770 if Length(WideString(stList[i])) = 8 then begin
6771 if GikoSys.NotDateorTimeString(stList[i]) then begin
6780 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6782 if count > 20 then begin
6783 rc := GikoUtil.MsgBox(Handle,
6784 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6785 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6786 MB_YESNO or MB_ICONQUESTION);
6787 limited := rc <> ID_YES;
6789 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6790 FActiveContent.IDAnchorPopup(body);
6799 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6800 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6802 SelectTimer.Interval := 0;
6803 if not (ListView.Selected = nil) then
6804 if( FActiveContent = nil) or
6805 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6810 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6811 procedure TGikoForm.ActiveListColumnSave;
6813 ActivListObj : TObject;
6814 i, id, idx : Integer;
6815 BBSOrder : TGikoBBSColumnList;
6816 CategoryOrder : TGikoCategoryColumnList;
6817 BoardOrder : TGikoBoardColumnList;
6820 ActivListObj := ActiveList;
6821 if ActivListObj is TBBS then begin
6822 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6823 BBSOrder := TGikoBBSColumnList.Create;
6825 for i := 0 to ListView.Columns.Count - 1 do begin
6826 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6827 idx := ListView.Column[ i ].Tag;
6828 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6829 BBSOrder.Add( TGikoBBSColumnID( id ) );
6830 //
\95\9d\82Ì
\95Û
\91¶
6831 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6833 for i := 0 to ListView.Columns.Count - 1 do
6834 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6835 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6839 end else if ActivListObj is TCategory then begin
6840 //=====
\94Â
\83\8a\83X
\83g =====
6841 CategoryOrder := TGikoCategoryColumnList.Create;
6843 for i := 0 to ListView.Columns.Count - 1 do begin
6844 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6845 idx := ListView.Column[ i ].Tag;
6846 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6847 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6848 //
\95\9d\82Ì
\95Û
\91¶
6849 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6851 for i := 0 to ListView.Columns.Count - 1 do
6852 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6853 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6857 end else if ActivListObj is TBoard then begin
6858 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6859 BoardOrder := TGikoBoardColumnList.Create;
6861 for i := 0 to ListView.Columns.Count - 1 do begin
6862 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6863 idx := ListView.Column[ i ].Tag;
6864 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6865 BoardOrder.Add( TGikoBoardColumnID( id ) );
6866 //
\95\9d\82Ì
\95Û
\91¶
6867 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6869 for i := 0 to ListView.Columns.Count - 1 do
6870 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6871 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6879 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6880 Column: TListColumn; Point: TPoint);
6886 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6887 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6888 ListColumnPopupMenu.Items.Items[ i ].Free;
6890 //
\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¢)
6891 if TObject( FActiveList ) is TBBS then begin
6893 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6894 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6895 item := TMenuItem.Create( ListColumnPopupMenu );
6896 item.Caption := GikoBBSColumnCaption[ i ];
6898 item.OnClick := ListColumnPopupMenuOnClick;
6899 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6900 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6901 item.Checked := True;
6905 ListColumnPopupMenu.Items.Add( item );
6908 end else if TObject( FActiveList ) is TCategory then begin
6910 //=====
\94Â
\83\8a\83X
\83g =====
6911 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6912 item := TMenuItem.Create( ListColumnPopupMenu );
6913 item.Caption := GikoCategoryColumnCaption[ i ];
6915 item.OnClick := ListColumnPopupMenuOnClick;
6916 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6917 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6918 item.Checked := True;
6922 ListColumnPopupMenu.Items.Add( item );
6925 end else if TObject( FActiveList ) is TBoard then begin
6927 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6928 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6929 item := TMenuItem.Create( ListColumnPopupMenu );
6930 item.Caption := GikoBoardColumnCaption[ i ];
6932 item.OnClick := ListColumnPopupMenuOnClick;
6933 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6934 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6935 item.Checked := True;
6939 ListColumnPopupMenu.Items.Add( item );
6944 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6945 Point := ListView.ClientToScreen( Point );
6946 if ListColumnPopupMenu.Items.Count > 0 then
6947 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6951 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6952 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6959 if not (Sender is TMenuItem) then
6962 ActiveListColumnSave;
6963 item := TMenuItem( Sender );
6965 if TObject( FActiveList ) is TBBS then
6966 orderList := GikoSys.Setting.BBSColumnOrder
6967 else if TObject( FActiveList ) is TCategory then
6968 orderList := GikoSys.Setting.CategoryColumnOrder
6969 else if TObject( FActiveList ) is TBoard then
6970 orderList := GikoSys.Setting.BoardColumnOrder
6974 if item.Checked then begin
6975 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6976 for i := orderList.Count - 1 downto 0 do begin
6977 if Integer( orderList[ i ] ) = item.Tag then begin
6978 orderList.Delete( i );
6983 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6984 orderList.Add( Pointer( item.Tag ) );
6987 SetActiveList( FActiveList );
6991 procedure TGikoForm.OnGestureStart(Sender: TObject);
6996 procedure TGikoForm.OnGestureMove(Sender: TObject);
7003 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
7005 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
7006 s := MouseGesture.GetGestureStr;
7008 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7009 if Action <> nil then
7010 ActStr := '
\81i' + Action.Caption + '
\81j';
7011 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
7012 StatusBar.Panels[1].Text := s;
7015 procedure TGikoForm.OnGestureEnd(Sender: TObject);
7020 s := MouseGesture.GetGestureStr;
7021 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
7022 if Action <> nil then
7024 StatusBar.Panels[1].Text := '';
7027 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
7028 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
7030 ThreadItem: TThreadItem;
7032 DefaultDraw := true;
7033 if TObject(Item.Data) is TThreadItem then begin
7034 ThreadItem := TThreadItem(Item.Data);
7035 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
7036 ListView.Canvas.Brush.Color := FOddColor;
7037 //
\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
7038 if (GikoSys.Setting.UnFocusedBold) and
7039 (Item.Selected) and (not ListView.Focused) then begin
7040 ListView.Canvas.Font.Style := [fsBold];
7043 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
7046 if ThreadItem.UnRead then
7047 ListView.Canvas.Font.Style := [fsBold];
7052 procedure TGikoForm.FormActivate(Sender: TObject);
7054 if GikoSys.Setting.GestureEnabled then begin
7055 GikoSys.Setting.Gestures.ClearGesture;
7056 GikoSys.Setting.Gestures.LoadGesture(
7057 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7058 MouseGesture.UnHook;
7059 MouseGesture.OnGestureStart := OnGestureStart;
7060 MouseGesture.OnGestureMove := OnGestureMove;
7061 MouseGesture.OnGestureEnd := OnGestureEnd;
7062 MouseGesture.SetHook(Handle);
7064 //MouseGesture.UnHook;
7065 MouseGesture.OnGestureStart := nil;
7066 MouseGesture.OnGestureMove := nil;
7067 MouseGesture.OnGestureEnd := nil;
7071 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7073 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7074 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7078 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7083 affectedBand : TCoolBand;
7086 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7087 FIsIgnoreResize := rtResizing;
7088 PostMessage( Handle, USER_RESIZED, 0, 0 );
7090 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7091 if CoolBar = MainCoolBar then begin
7092 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7093 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7094 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7095 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7096 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7098 end else if CoolBar = ListCoolBar then begin
7099 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7100 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7101 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7102 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7103 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7105 end else if CoolBar = BrowserCoolBar then begin
7106 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7107 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7108 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7109 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7110 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7113 if not (Sender is TToolBar) or (CoolBar = nil) then
7115 toolbar := TToolBar( Sender );
7116 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7117 affectedBand := nil;
7118 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7119 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7120 band := CoolBar.Bands[ i ];
7121 if band.Break or (i = 0) then begin
7122 if i + 1 < CoolBar.Bands.Count then
7123 if not CoolBar.Bands[ i + 1 ].Break then
7124 affectedBand := CoolBar.Bands[ i + 1 ];
7127 affectedBand := CoolBar.Bands[ i - 1 ];
7132 //
\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·
7133 if CoolBar = MainCoolBar then begin
7134 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7135 coolSet.FCoolWidth := toolbar.Width + 25;
7136 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7137 if affectedBand <> nil then begin
7138 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7139 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7140 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7142 end else if CoolBar = ListCoolBar then begin
7143 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7144 coolSet.FCoolWidth := toolbar.Width + 25;
7145 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7146 if affectedBand <> nil then begin
7147 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7148 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7149 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7151 end else if CoolBar = BrowserCoolBar then begin
7152 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7153 coolSet.FCoolWidth := toolbar.Width + 25;
7154 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7155 if affectedBand <> nil then begin
7156 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7157 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7158 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7165 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7167 CoolBarResized( Sender, MainCoolBar );
7170 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7172 CoolBarResized( Sender, ListCoolBar );
7175 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7177 CoolBarResized( Sender, BrowserCoolBar );
7180 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7181 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7183 ThreadItem : TThreadItem;
7184 ReadList : TStringList;
7185 wordCount : TWordCount;
7187 ThreadItem := GetActiveContent;
7188 ReadList := TStringList.Create;
7189 wordCount := TWordCount.Create;
7191 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7192 {$IFDEF SPAM_FILTER_ENABLED}
7193 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7194 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7195 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7196 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7197 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7199 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7200 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7205 FActiveContent.Repaint := true;
7206 if ThreadItem <> nil then
7207 InsertBrowserTab( ThreadItem, True );
7210 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7211 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7213 ThreadItem : TThreadItem;
7216 ReadList : TStringList;
7217 wordCount : TWordCount;
7219 No := KokoPopupMenu.Tag;
7220 if No = 0 then Exit;
7221 ThreadItem := GetActiveContent;
7222 if ThreadItem = nil then Exit;
7223 body := TStringList.Create;
7225 GikoSys.GetSameIDRes(No, ThreadItem, body);
7227 ReadList := TStringList.Create;
7228 wordCount := TWordCount.Create;
7230 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7231 {$IFDEF SPAM_FILTER_ENABLED}
7232 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7233 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7235 for i := 0 to body.Count - 1 do begin
7236 {$IFDEF SPAM_FILTER_ENABLED}
7237 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7238 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7239 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7241 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7242 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7248 FActiveContent.Repaint := true;
7249 if ThreadItem <> nil then
7250 InsertBrowserTab( ThreadItem, True );
7257 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7259 firstElement: IHTMLElement;
7260 document: IHTMLDocument2;
7262 document := FActiveContent.Browser.Document as IHTMLDocument2;
7263 if Assigned(document) then
7264 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7265 if Assigned(firstElement) then
7266 if firstElement.style.visibility <> 'hidden' then
7267 firstElement.style.visibility := 'hidden';
7271 procedure TGikoForm.RepaintAllTabsBrowser();
7274 ThreadItem: TThreadItem;
7276 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7277 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7279 ThreadItem := GetActiveContent;
7280 if ThreadItem <> nil then
7281 InsertBrowserTab( ThreadItem, True );
7285 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7286 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7287 Shift: TShiftState);
7289 //
\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Ì
7290 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7291 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7292 SelectTimer.Interval := 0;
7293 if not (GikoSys.Setting.BrowserTabVisible) then begin
7294 if (GetActiveList is TBoard) then begin
7295 //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
7296 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7297 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7298 (Key = VK_UP) or (Key = VK_DOWN)) then
7299 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7303 // *************************************************************************
7304 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7305 // *************************************************************************
7306 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7307 Node: TTreeNode; var AllowEdit: Boolean);
7309 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7310 FOrigenCaption := Node.Text;
7312 // *************************************************************************
7313 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7314 // *************************************************************************
7315 function TGikoForm.GetMainForm(): TComponent;
7317 Result := Application.MainForm;
7319 // *************************************************************************
7320 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7321 // *************************************************************************
7322 function TGikoForm.GetScreenCursor(): TCursor;
7324 Result := Screen.Cursor;
7326 // *************************************************************************
7327 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7328 // *************************************************************************
7329 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7331 if (Screen.Cursor <> Cursor) then
7332 Screen.Cursor := Cursor;
7334 // *************************************************************************
7335 //!
\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
7336 // *************************************************************************
7337 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7339 //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Ì
7340 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7341 if GikoDM.CabinetVisibleAction.Enabled then begin
7342 GikoDM.CabinetVisibleAction.Execute;
7345 // *************************************************************************
7346 //!
\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
7347 // *************************************************************************
7348 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7350 if GikoDM.FavoriteArrangeAction.Enabled then begin
7351 GikoDM.FavoriteArrangeAction.Execute;
7354 // *************************************************************************
7355 //!
\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
7356 // *************************************************************************
7357 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7358 var Handled: Boolean);
7362 //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ß
7363 if Self.Active then begin
7365 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7366 WM_KEYFIRST..WM_KEYLAST :
7368 //
\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ç
7369 if (Msg.message <> WM_KEYUP)
7370 and (Msg.message <> WM_CHAR)
7371 and (Msg.message <> WM_SYSKEYUP) then begin
7372 wmMsg.Msg := Msg.message;
7373 wmMsg.CharCode := Word(Msg.wParam);
7374 wmMsg.KeyData := Msg.lParam;
7375 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7376 Self.OnShortCut(wmMsg, Handled);
7382 // *************************************************************************
7383 //!
\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
7384 // *************************************************************************
7385 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7387 Application.ProcessMessages;
7388 if not Application.Terminated then begin
7389 if PreviewTimer.Enabled then
7390 PreviewTimer.Enabled := False;
7391 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83q
\83\93\83g
\82ð
\8fÁ
\8b\8e
7392 if FHint <> nil then begin
7393 FHint.ReleaseHandle;
7396 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7397 if FPreviewBrowser <> nil then
7398 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7402 // *************************************************************************
7403 //!
\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
7404 // *************************************************************************
7405 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7410 if (Sender <> nil) then begin
7411 s := ' [' + Sender.ClassName + ']' + #13#10;
7413 s := ' [ Sender is nil ] ' + #13#10;
7416 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7418 // *************************************************************************
7419 //!
\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¬
7420 // *************************************************************************
7421 procedure TGikoForm.CreateControlThread();
7423 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7424 FControlThread := TThreadControl.Create(True);
7425 FControlThread.MaxThreadCount := 1;
7426 FControlThread.Resume;
7427 FControlThread.OnDownloadEnd := DownloadEnd;
7428 FControlThread.OnDownloadMsg := DownloadMsg;
7429 FControlThread.OnWork := Work;
7430 FControlThread.OnWorkBegin := WorkBegin;
7431 FControlThread.OnWorkEnd := WorkEnd;
7433 // *************************************************************************
7434 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7435 // *************************************************************************
7436 procedure TGikoForm.CreateBrowsers(count: Integer);
7439 newBrowser: TWebBrowser;
7441 BrowserNullTab := TBrowserRecord.Create;
7442 BrowserNullTab.Browser := Browser;
7443 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7444 FBrowsers := TList.Create;
7445 for i := 0 to count -1 do begin
7446 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7447 newBrowser := FBrowsers[FBrowsers.Count - 1];
7448 TOleControl(newBrowser).Parent := BrowserPanel;
7449 TOleControl(newBrowser).Align := alNone;
7450 TOleControl(newBrowser).Left := 0;
7451 TOleControl(newBrowser).Top := 0;
7452 newBrowser.RegisterAsDropTarget := False;
7453 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7454 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7455 newBrowser.OnEnter := BrowserEnter;
7456 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7457 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7458 newBrowser.Navigate(BLANK_HTML);
7459 ShowWindow(newBrowser.Handle, SW_HIDE);
7461 BrowserNullTab.Browser.BringToFront;
7462 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7463 //
\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Ì
7464 //
\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Å
7465 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7466 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7467 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7468 Application.ProcessMessages;
7471 // *************************************************************************
7472 //!
\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é
7473 // *************************************************************************
7474 procedure TGikoForm.SetSelectComboBox();
7476 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7479 ToolButton: TToolButton;
7481 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7482 SelectComboBoxPanel.Visible := False;
7484 for i := ListToolBar.ControlCount - 1 downto 0 do
7486 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7488 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7489 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7490 SelectComboBoxPanel.Parent := ListToolBar;
7491 SelectComboBoxPanel.Visible := True;
7493 SelectComboBox.Left := 0;
7494 SelectComboBox.Top := 0;
7495 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7496 SelectComboBox.Width := SelectComboBoxPanel.Width -
7497 SelectComboBoxSplitter.Width;
7499 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7500 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7501 if ToolButton = nil then begin
7502 ToolButton := TToolButton.Create(ListToolBar);
7503 ToolButton.Name := DUMMYCOMPNAME;
7505 ToolButton.Style := tbsSeparator;
7506 ToolButton.Width := 0;
7507 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7508 ListToolBar.InsertControl(ToolButton);
7509 ToolButton.Visible := False;
7511 //
\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·
7512 if (i + 1) < ListToolBar.ControlCount then
7513 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7514 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7515 ListToolBar.Controls[ i + 1 ].Visible := False;
7518 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7519 ListToolBar.Controls[ i ].Visible := False;
7527 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7528 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7529 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7536 if (TreeView.Selected <> nil) and
7537 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7538 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7539 rect := TreeView.Selected.DisplayRect(true);
7540 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7541 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7542 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7543 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7544 if ssDouble in Shift then begin
7545 TreeDoubleClick( TreeView.Selected );
7547 TreeClick(TreeView.Selected);
7554 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7555 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7559 if ActionList <> nil then begin
7560 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7562 for i := 0 to ActionList.ActionCount - 1 do begin
7564 FActionListGroupIndexes[i] :=
7565 TCustomAction(ActionList.Actions[i]).GroupIndex;
7566 TCustomAction(ActionList.Actions[i]).GroupIndex
7569 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7575 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7576 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7580 if ActionList <> nil then begin
7581 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7582 for i := 0 to ActionList.ActionCount - 1 do begin
7584 TCustomAction(ActionList.Actions[i]).GroupIndex
7585 := FActionListGroupIndexes[i];
7587 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7593 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7594 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7598 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7599 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7601 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7602 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7607 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7608 MousePos: TPoint; var Handled: Boolean);
7611 coolBar: TGikoCoolBar;
7614 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7615 coolBar := TGikoCoolBar(Sender);
7616 if (coolBar = MainCoolBar) then begin
7617 FToolBarSettingSender := tssMain;
7618 end else if (coolBar = ListCoolBar) then begin
7619 FToolBarSettingSender := tssList;
7620 end else if (coolBar = BrowserCoolBar) then begin
7621 FToolBarSettingSender := tssBrowser;
7623 FToolBarSettingSender := tssNone;
7625 pos := coolBar.ClientToScreen( MousePos );
7626 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7631 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7633 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7634 if (Msg.wParam = WM_LBUTTONUP) then begin
7638 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7639 procedure TGikoForm.StoredTaskTray;
7642 if (FIconData.uID = 0) then begin
7643 FIconData.cbSize := SizeOf(TNotifyIconData);
7644 FIconData.uID := Self.Handle;
7645 FIconData.Wnd := Handle;
7646 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7647 FIconData.uCallbackMessage := USER_TASKTRAY;
7648 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7649 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7650 Shell_NotifyIcon(NIM_ADD, @FIconData);
7651 ShowEditors(SW_HIDE);
7652 ShowWindow(Self.Handle, SW_HIDE);
7657 //!
\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¦
7658 procedure TGikoForm.UnStoredTaskTray;
7662 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7663 SetForegroundWindow(Application.Handle);
7668 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7669 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7670 ShowWindow(Self.Handle, SW_RESTORE);
7672 ShowWindow(Self.Handle, SW_SHOW);
7674 ShowEditors(SW_SHOW);
7675 GikoDM.StoredTaskTrayAction.Tag := 0;
7679 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7680 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7682 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7686 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7687 for i := 0 to Screen.CustomFormCount - 1 do begin
7688 if TObject(Screen.CustomForms[i]) is TEditorForm then
7689 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);