6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList;
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ToolButton3: TToolButton;
196 ToolButton9: TToolButton;
197 ToolButton11: TToolButton;
198 ToolButton5: TToolButton;
199 ListNameToolBar: TToolBar;
200 ListNameLabel: TLabel;
202 BrowserNameToolBar: TToolBar;
203 ItemBoardImage: TImage;
204 BrowserBoardNameLabel: TLabel;
206 BrowserNameLabel: TLabel;
213 TreeSelectNameURLPupupMenu: TMenuItem;
217 BrowserTabToolBar: TToolBar;
218 BrowserTab: TTabControl;
229 FavoriteMenu: TMenuItem;
231 BoardFavoriteAddMenu: TMenuItem;
232 ThreadFavoriteAddMenu: TMenuItem;
234 TreeSelectFavoriteAddPupupMenu: TMenuItem;
235 FavoriteTreeView: TTreeView;
236 StateIconImageList: TImageList;
238 TopRightPanel: TPanel;
241 TopCoolPanel: TPanel;
242 MainCoolBar: TGikoCoolBar;
243 MenuToolBar: TToolBar;
244 StdToolBar: TToolBar;
245 AddressToolBar: TToolBar;
246 AddressComboBox: TComboBox;
247 MoveToToolButton: TToolButton;
248 AddressImageList: TImageList;
249 AddressToolBarMenu: TMenuItem;
259 PreviewTimer: TTimer;
260 MonazillaWebPageAction1: TMenuItem;
267 ChevronPopupMenu: TPopupMenu;
271 LinkToolBar: TToolBar;
276 LinkBarPopupMenu: TPopupMenu;
278 ThreadPopupMenu: TPopupMenu;
279 MenuItem4: TMenuItem;
280 MenuItem5: TMenuItem;
281 MenuItem6: TMenuItem;
284 SelectItemNameCopyAction1: TMenuItem;
287 NameCopyPMenu: TMenuItem;
288 SelectComboBox: TComboBox;
289 MainCoolBarPopupMenu: TPopupMenu;
290 StdToolBarVisiblePMenu: TMenuItem;
291 AddressToolBarVisiblePMenu: TMenuItem;
292 LinkToolBarVisiblePMenu: TMenuItem;
313 ToolButton16: TToolButton;
320 IndividualAbon1: TMenuItem;
322 IndividualAbon2: TMenuItem;
323 AntiIndivAbonMenuItem: TMenuItem;
324 AntiIndividualAbon: TMenuItem;
328 SearchBoardName: TMenuItem;
329 TreeSelectLogDeleteSeparator: TMenuItem;
332 FavoriteTreePopupMenu: TPopupMenu;
333 FavoriteTreeRenamePopupMenu: TMenuItem;
334 FavoriteTreeNewFolderPopupMenu: TMenuItem;
336 FavoriteTreeDeletePopupMenu: TMenuItem;
337 FavoriteToolBar: TToolBar;
338 FavoriteAddToolButton: TToolButton;
339 FavoriteArrangeToolButton: TToolButton;
340 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
342 FavoriteTreeReloadPopupMenu: TMenuItem;
344 FavoriteTreeURLCopyPopupMenu: TMenuItem;
345 FavoriteTreeNameCopyPopupMenu: TMenuItem;
346 FavoriteTreeLogDeletePopupMenu: TMenuItem;
348 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
349 ToolButton20: TToolButton;
351 ExportFavoriteFileAction1: TMenuItem;
362 TreeSelectLogDeletePopupMenu: TMenuItem;
364 BBSSelectPopupMenu: TPopupMenu;
365 PlugInMenu: TMenuItem;
366 TreeSelectNamePupupMenu: TMenuItem;
367 BrowserPanel: TPanel;
369 SelectThreadSave: TMenuItem;
373 OpenLogFolder: TMenuItem;
374 Browser: TWebBrowser;
377 ResRangePopupMenu: TPopupMenu;
378 ResRangeHundPMenuItem: TMenuItem;
379 ResRangeKokoPMenuItem: TMenuItem;
380 ResRangeNewPMenuItem: TMenuItem;
381 ResRangeAllPMenuItem: TMenuItem;
382 BrowsBoradHeadAction1: TMenuItem;
383 ThreadRangePopupMenu: TPopupMenu;
390 ResRangeSelectPMenuItem: TMenuItem;
391 ListColumnPopupMenu: TPopupMenu;
400 SelectComboBoxPanel: TPanel;
401 SelectComboBoxSplitter: TImage;
402 ToolButton1: TToolButton;
405 GikoApplicationEvents: TApplicationEvents;
412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
415 SaveThreadFile: TMenuItem;
420 SameBoardThreadItem: TMenuItem;
422 procedure FormCreate(Sender: TObject);
423 procedure FormDestroy(Sender: TObject);
424 procedure BrowserStatusTextChange(Sender: TObject;
425 const Text: WideString);
426 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
427 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
428 var AllowChange: Boolean);
429 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
431 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
432 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
433 Button: TToolButton; State: TCustomDrawState;
434 var DefaultDraw: Boolean);
435 procedure BrowserBeforeNavigate2(Sender: TObject;
436 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
437 Headers: OleVariant; var Cancel: WordBool);
438 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
439 const ARect: TRect; var DefaultDraw: Boolean);
440 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
441 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
442 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
443 procedure ListViewCustomDraw(Sender: TCustomListView;
444 const ARect: TRect; var DefaultDraw: Boolean);
445 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
446 Shift: TShiftState; X, Y: Integer);
447 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
448 procedure MessageListViewResize(Sender: TObject);
449 procedure CabinetVisible( isVisible : Boolean );
450 procedure FormResize(Sender: TObject);
451 procedure ListPopupMenuPopup(Sender: TObject);
452 procedure TreePopupMenuPopup(Sender: TObject);
453 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
454 var Cancel: WordBool);
455 procedure ListSplitterMoved(Sender: TObject);
456 procedure BrowserTabChange(Sender: TObject);
457 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
458 Shift: TShiftState; X, Y: Integer);
459 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
460 State: TDragState; var Accept: Boolean);
461 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
462 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
464 procedure BrowserDocumentComplete(Sender: TObject;
465 const pDisp: IDispatch; var URL: OleVariant);
466 procedure RoundNamePopupMenuPopup(Sender: TObject);
467 procedure FormShow(Sender: TObject);
468 procedure BrowserTabToolBarResize(Sender: TObject);
469 procedure FavoriteMenuClick(Sender: TObject);
470 procedure MainCoolBarResize(Sender: TObject);
471 procedure AddressToolBarResize(Sender: TObject);
472 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
474 procedure BrowserEnter(Sender: TObject);
475 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
476 procedure PreviewTimerTimer(Sender: TObject);
477 procedure MessageHideButtonClick(Sender: TObject);
478 procedure HistoryAllClearToolButtonClick(Sender: TObject);
479 procedure MainCoolBarBandInfo(Sender: TObject;
480 var BandInfo: PReBarBandInfoA);
481 procedure MainCoolBarChevronClick(Sender: TObject;
482 RebarChevron: PNMRebarChevron);
483 procedure ListCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure ListCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure BrowserCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure BrowserCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
492 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
493 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
494 procedure SelectComboBoxChange(Sender: TObject);
495 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
497 procedure SelectComboBoxExit(Sender: TObject);
498 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
499 Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
503 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
504 procedure StatusBarResize(Sender: TObject);
505 procedure SelectComboBoxEnter(Sender: TObject);
506 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
508 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
511 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
513 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
514 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
515 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
516 Shift: TShiftState; X, Y: Integer);
517 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
518 State: TDragState; var Accept: Boolean);
519 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
521 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
522 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
523 var Handled: Boolean);
524 procedure BrowserTabPopupMenuPopup(Sender: TObject);
525 procedure BrowserTabResize(Sender: TObject);
526 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
528 procedure FavoriteTreeViewMouseDown(Sender: TObject;
529 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
530 procedure MessagePanelResize(Sender: TObject);
532 procedure SelectTimerTimer(Sender: TObject);
533 procedure ListViewColumnRightClick(Sender: TObject;
534 Column: TListColumn; Point: TPoint);
535 procedure ListViewCustomDrawItem(Sender: TCustomListView;
536 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
537 procedure FormActivate(Sender: TObject);
538 procedure BrowserPanelResize(Sender: TObject);
539 procedure MenuToolBarResize(Sender: TObject);
540 procedure ListToolBarResize(Sender: TObject);
541 procedure BrowserToolBarResize(Sender: TObject);
542 procedure KokoPopupMenuPopup(Sender: TObject);
543 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
545 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
546 var AllowEdit: Boolean);
547 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
548 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
549 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
550 var Handled: Boolean);
551 procedure GikoApplicationEventsDeactivate(Sender: TObject);
552 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
553 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
554 Shift: TShiftState; X, Y: Integer);
555 procedure GetResURLMenuClick(Sender: TObject);
556 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
557 var Handled: Boolean);
560 FEnabledCloseButton: Boolean;
561 FClickNode: TTreeNode;
564 FPreviewBrowser: TPreviewBrowser;
566 FBrowserSizeHeight: Integer;
567 FBrowserSizeWidth: Integer;
568 FTabHintIndex: Integer;
569 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
570 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
571 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
572 FActiveList: TObject;
573 FActiveContent: TBrowserRecord; //
575 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
576 FTreeType: TGikoTreeType;
580 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
581 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
582 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
583 IsDraggingSelectComboBox : Boolean;
584 DraggingSelectComboBoxPosition : TPoint;
585 FSearchDialog: TSearchDialog;
586 FDropSpaceNode: TTreeNode;
587 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
588 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
589 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
590 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
591 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¦
592 FOddColor : TColor; ///<
\82»
\82Ì
\90F
593 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
594 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
595 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
596 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
597 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
598 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
600 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
602 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
603 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
604 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ñ
605 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
606 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ñ
608 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
609 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
610 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
611 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
612 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
614 procedure ListDoubleClick(Shift: TShiftState);
615 function Hook(var Message: TMessage): Boolean;
616 procedure AddRoundNameMenu(MenuItem: TMenuItem);
617 procedure SetMenuFont;
618 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
619 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
620 procedure FavoriteClick(Sender: TObject); overload;
621 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
622 function OnDocumentContextMenu(Sender: TObject): WordBool;
623 procedure ShowTextPopup;
624 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
625 procedure MenuBarChevronMenu;
626 procedure LinkBarChevronMenu;
627 procedure ToolBarChevronMenu(ToolBar: TToolBar);
628 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
629 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
630 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
631 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
632 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
633 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
634 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
635 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
636 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
638 procedure SetListViewBackGroundColor(value: TColor);
639 procedure BBSMenuItemOnClick( Sender : TObject );
640 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
641 procedure SaveCoolBarSettings;
642 procedure SaveMainCoolBarSettings;
643 procedure SaveBoardCoolBarSettings;
644 procedure SaveBrowserCoolBarSettings;
645 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
646 procedure LoadCoolBarSettings;
647 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
648 procedure OnMinimize;
649 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
650 procedure OnMinimized;
651 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
652 procedure TreeClick( Node : TTreeNode );
653 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
654 procedure TreeDoubleClick( Node : TTreeNode );
655 ///
\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
656 procedure SetBBSMenu;
657 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
658 procedure ListColumnPopupMenuOnClick( Sender : TObject );
659 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
660 procedure SetSelectWord( const text : string );
661 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
662 function GetScreenCursor(): TCursor;
663 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
664 procedure SetScreenCursor(Cursor : TCursor);
665 //!
\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¬
666 procedure CreateControlThread();
667 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
668 procedure CreateBrowsers(count: Integer);
669 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
670 procedure GetGroupIndex(ActionList: TActionList);
671 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
672 procedure SetGroupIndex(ActionList: TActionList);
673 //!
\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é)
674 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
675 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
676 procedure RefreshListView(Thread: TThreadItem);
677 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
678 procedure ClearThreadRengeAction;
679 //!
\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¦
680 procedure UnStoredTaskTray;
681 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
682 procedure ShowEditors(nCmdShow: Integer);
683 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
684 procedure ReleaseOldestBrowser;
685 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
686 procedure AddMenuSameBoardThread;
687 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
688 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
690 procedure CreateParams(var Params: TCreateParams); override;
691 procedure WndProc(var Message: TMessage); override;
692 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
693 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
694 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
698 LastRoundTime: TDateTime;
699 BrowserNullTab: TBrowserRecord;
700 FControlThread: TThreadControl;
701 FIconData : TNotifyIconData;
702 procedure MoveToURL(const inURL: string);
703 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
705 function GetHttpState: Boolean;
706 procedure SetEnabledCloseButton(Enabled: Boolean);
707 function GetTreeNode(Data: TObject): TTreeNode;
708 procedure ListViewAllSelect;
709 property ListStyle: TViewStyle read FListStyle write FListStyle;
710 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
711 property ViewType: TGikoViewType read FViewType write FViewType;
712 property NameCookie: string read FNameCookie write FNameCookie;
713 property MailCookie: string read FMailCookie write FMailCookie;
714 property ClickNode: TTreeNode read FClickNode write FClickNode;
715 property TreeType: TGikoTreeType read FTreeType write FTreeType;
716 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
717 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
718 property SelectResWord : string read FSelectResWord write FSelectResWord;
719 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
720 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
721 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
722 property ToolBarSettingSender : TToolBarSettingSenderType
723 read FToolBarSettingSender write FToolBarSettingSender;
724 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
725 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
726 property WorkCount: Integer read FWorkCount write FWorkCount;
727 procedure SetContent(inThread: TBrowserRecord);
728 function GetActiveContent: TThreadItem;
729 function GetActiveList: TObject;
731 procedure SetListViewType(AViewType: TGikoViewType); overload;
732 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
733 procedure PlaySound(SoundEventName: string);
734 procedure ShowBBSTree( inBBS : TBBS );
735 procedure ShowBBSTreeOld( inBBS : TBBS );
736 procedure ShowHistoryTree;
737 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
738 procedure SetBrowserTabState;
739 procedure SetToolBarPopup;
740 procedure ShowFavoriteAddDialog( Item : TObject );
741 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
742 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
743 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
744 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
745 property OddColor : TColor read FOddColor write FOddColor;
746 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
747 procedure OnPlugInMenuItem( Sender : TObject );
748 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
749 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶ KuroutSetting
\82©
\82ç
\82æ
\82Ñ
\82¾
\82µ
\82½
\82¢
\82Ì
\82Å
750 procedure ActiveListColumnSave;
751 procedure SetActiveList(Obj: TObject);
752 property ActiveList: TObject read GetActiveList write SetActiveList;
753 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
754 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
755 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
756 procedure IndividualAbonID(Atype : Integer);
757 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
758 procedure IndividualAbon(Atag, Atype : Integer);
759 //
\83u
\83\89\83E
\83U
\82Ì
\8dÄ
\95`
\89æ true:
\91S
\82Ä
\82Ì
\83^
\83u false:
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Ì
\82Ý
760 procedure RepaintAllTabsBrowser();
761 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
762 procedure SetLinkBar;
763 procedure FavoriteBrowseFolder( node: TTreeNode );
764 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
765 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
766 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
767 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
768 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
769 procedure DeleteHistory( threadItem: TThreadItem );
770 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
771 procedure DeleteTab(ThreadItem: TThreadItem); overload;
772 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
773 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
774 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
775 procedure DeleteTab(index, selectIndex: Integer); overload;
776 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
777 procedure BrowserMovement(const AName: string); overload;
778 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
779 procedure BrowserMovement(scroll: Integer); overload;
780 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
781 function GetMainForm(): TComponent;
782 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
783 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
784 procedure OnGestureStart(Sender: TObject);
785 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
786 procedure OnGestureMove(Sender: TObject);
787 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
788 procedure OnGestureEnd(Sender: TObject);
789 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
790 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
791 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
792 procedure SelectListItem(List: TList);
793 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
794 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
796 procedure ModifySelectList;
798 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
800 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
802 procedure SetSelectRoundName(Sender: TObject);
804 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
806 function WebBrowserClick(Sender: TObject): WordBool;
807 //!
\83c
\81[
\83\8b\83o
\81[
\82É
\83X
\83\8c\8di
\8d\9e\82Ý
\83R
\83\93\83{
\83{
\83b
\83N
\83X
\82ð
\90Ý
\92è
\82·
\82é
808 procedure SetSelectComboBox();
810 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\8ai
\94[
\82µ
\82½
\83A
\83C
\83R
\83\93\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\82Æ
\82«
\82Ì
\8f\88\97\9d
811 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
812 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
813 procedure StoredTaskTray;
815 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
818 TFavoriteMenuItem = class(TMenuItem)
822 property Data: Pointer read FData write FData;
825 TBBSMenuItem = class(TMenuItem)
829 property Data: Pointer read FData write FData;
832 TLinkToolButton = class(TToolButton)
836 property Data: Pointer read FData write FData;
845 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
846 YofUtils, ToolBarUtil, ToolBarSetting,
847 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
848 FavoriteArrange, AddressHistory, Gesture,
849 About, Option, Round, Splash, Sort, ListSelect, Imm,
850 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
851 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
852 InputAssistDataModule, Types, ReplaceDataModule;
855 BLANK_HTML: string = 'about:blank';
856 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
858 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
859 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
860 HTML_FILE_NAME = 'temp_preview.html';
861 //
\83\81\83b
\83Z
\81[
\83WID
862 USER_TREECLICK = WM_USER + 2000;
863 USER_RESIZED = WM_USER + 2001;
864 USER_MINIMIZED = WM_USER + 2002;
865 USER_SETLINKBAR = WM_USER + 2003;
866 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
867 USER_TASKTRAY = WM_USER + 2010;
870 procedure TGikoForm.CreateParams(var Params: TCreateParams);
873 if FormStyle in [fsNormal, fsStayOnTop] then begin
874 if BorderStyle in [bsSingle, bsSizeable] then begin
875 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
876 Params.WndParent := 0;
881 procedure TGikoForm.FormCreate(Sender: TObject);
883 TVS_NOTOOLTIPS = $0080;
889 wp: TWindowPlacement;
893 Writeln('============================================================');
894 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
896 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
897 Writeln('
\8fI
\97¹
\8e\9e\82Í
\81A
\83M
\83R
\83i
\83r
\83E
\83B
\83\93\83h
\83E
\82ð
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢');
898 Writeln('============================================================');
901 Sort.SetSortDate(Now());
903 FTreeType := gttNone;
904 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
906 Application.HookMainWindow(Hook);
907 FIsIgnoreResize := rtResizing;
908 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
909 //(
\8bN
\93®
\8e\9e\82É
\83c
\81[
\83\8b\83{
\83^
\83\93\82ÌDown
\83v
\83\8d\83p
\83e
\83B
\82ð
\94½
\89f
\82³
\82¹
\82é
\93s
\8d\87\8fãGroupIndex
\82Í
\90Ý
\92è
\82Å
\82«
\82È
\82¢)
910 //
\82±
\82ê
\88È
\8cãSet
\81`
\82Å
\8dÄ
\90Ý
\92è
\82·
\82é
\82Ü
\82Å
\81AAction
\82ÌChecked
\82ð
\82¢
\82¶
\82é
\82Æ
\82«
\82Í
\92\8d\88Ó
\81I
911 GetGroupIndex(GikoDM.GikoFormActionList);
912 FSearchDialog := nil;
913 CreateBrowsers(BROWSER_COUNT);
916 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
919 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
920 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
922 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
923 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
925 EnabledCloseButton := True;
927 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
928 ListView.ViewStyle := GikoSys.Setting.ListStyle;
930 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
932 AnimePanel.Left := 0;
934 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
936 //
\83L
\83\83\83r
\83l
\83b
\83g
937 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
939 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
940 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
941 GikoDM.MsgBarVisibleActionExecute(nil);
942 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
944 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
945 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
946 GikoDM.StatusBarVisibleActionExecute(nil);
948 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
949 TreeView.Items.BeginUpdate;
950 FavoriteTreeView.Items.BeginUpdate;
951 ListView.Items.BeginUpdate;
953 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
954 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
955 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
956 TreeView.Color := GikoSys.Setting.CabinetBackColor;
957 FavoriteTreeView.Font.Assign(TreeView.Font);
958 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
960 ListView.Font.Name := GikoSys.Setting.ListFontName;
961 ListView.Font.Size := GikoSys.Setting.ListFontSize;
962 ListView.Font.Color := GikoSys.Setting.ListFontColor;
963 ListView.Font.Style := [];
964 if GikoSys.Setting.ListFontBold then
965 ListView.Font.Style := [fsbold];
966 if GikoSys.Setting.ListFontItalic then
967 ListView.Font.Style := ListView.Font.Style + [fsitalic];
969 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
970 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
971 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
972 FOddColor := GikoSys.Setting.OddColor;
975 TreeView.Items.EndUpdate;
976 FavoriteTreeView.Items.EndUpdate;
977 ListView.Items.EndUpdate;
979 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
980 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
982 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
983 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
985 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
986 FResRangeMenuSelect := GikoSys.ResRange;
987 case GikoSys.ResRange of
990 GikoDM.AllResAction.Execute;
994 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
995 GikoDM.SelectResAction.Checked := True;
998 case FResRangeMenuSelect of
999 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1000 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1001 100: GikoDM.OnlyAHundredResAction.Checked := True;
1005 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1006 case GikoSys.Setting.ThreadRange of
1009 GikoDM.AllItemAction.Checked := True;
1014 GikoDM.LogItemAction.Checked := True;
1019 GikoDM.NewItemAction.Checked := True;
1024 GikoDM.LiveItemAction.Checked := True;
1025 ViewType := gvtLive;
1029 GikoDM.ArchiveItemAction.Checked := True;
1030 ViewType := gvtArch;
1035 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1036 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1037 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1038 BrowserTab.Font.Style := [];
1039 if GikoSys.Setting.BrowserTabFontBold then
1040 BrowserTab.Font.Style := [fsBold];
1041 if GikoSys.Setting.BrowserTabFontItalic then
1042 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1043 BrowserTab.DoubleBuffered := True;
1044 FDragWFirst := false;
1045 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1047 //
\83u
\83\89\83E
\83U
\83^
\83u
1048 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1050 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1051 GikoDM.BrowserTabTopAction.Checked := True;
1053 GikoDM.BrowserTabBottomAction.Checked := True;
1056 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1057 GikoDM.BrowserTabTabStyleAction.Checked := True;
1058 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1059 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1061 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1064 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1065 ProgressBar.Parent := StatusBar;
1066 ProgressBar.Top := 2;
1067 ProgressBar.Left := 0;
1068 ProgressBar.Width := StatusBar.Panels[0].Width;
1069 ProgressBar.Height := StatusBar.Height - 2;
1070 ProgressBar.Position := 0;
1072 //
\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Æ)
1073 InitializeBoardPlugIns;
1075 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1076 GikoSys.ListBoardFile;
1077 //
\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É
1079 //
\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è
1080 if (SplashWindow <> nil) then begin
1081 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1085 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1086 for i := Length(BBSs) - 1 downto 0 do begin
1087 if not BBSs[i].IsBoardFileRead then
1088 GikoSys.ReadBoardFile(BBSs[i]);
1090 if SplashWindow <> nil then begin
1091 SplashWindow.ProgressBar.StepBy(20);
1092 SplashWindow.Update;
1096 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1097 RoundList := TRoundList.Create;
1098 RoundList.LoadRoundBoardFile;
1099 RoundList.LoadRoundThreadFile;
1101 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1102 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1103 Style := Style or TVS_NOTOOLTIPS;
1104 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1106 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1107 TreeView.Align := alClient;
1108 FavoriteTreeView.Align := alClient;
1109 FavoriteTreeView.Visible := False;
1111 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1114 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1115 wp.length := sizeof(wp);
1116 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1117 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1118 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1119 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1120 wp.showCmd := SW_HIDE;
1121 SetWindowPlacement(Handle, @wp);
1124 if GikoSys.Setting.WindowMax then
1125 WindowState := wsMaximized;
1127 //
\83M
\83R
\83A
\83j
\83\81
1129 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1130 if FileExists(FileName) then
1131 Animate.FileName := FileName;
1139 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1140 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1141 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1144 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1145 FHistoryList := THistoryList.Create;
1147 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1148 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1149 TreeView, FTreeType);
1151 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1152 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1153 FavoriteDM.ReadFavorite;
1155 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1156 GikoDM.ArrangeAction.Execute;
1158 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1159 case GikoSys.Setting.ListWidthState of
1161 ViewPanel.Width := 1;
1162 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1163 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1166 ViewPanel.Width := GikoSys.Setting.ListWidth;
1167 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1168 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1171 ViewPanel.Width := GikoSys.Setting.ListWidth;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1177 case GikoSys.Setting.ListHeightState of
1179 ViewPanel.Height := 1;
1180 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1181 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1184 ViewPanel.Height := GikoSys.Setting.ListHeight;
1185 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1186 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1189 ViewPanel.Height := GikoSys.Setting.ListHeight;
1190 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1191 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1196 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1197 CreateControlThread();
1199 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1200 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1202 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1205 BrowserBoardNameLabel.Caption := '';
1206 BrowserNameLabel.Caption := '';
1209 FTabHintIndex := -1;
1211 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1212 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1213 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1215 MakeDefaultINIFile();
1216 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1217 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1218 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1219 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1222 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1223 SetSelectComboBox();
1225 //
\83A
\83h
\83\8c\83X
\83o
\81[
1226 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1228 //
\83\8a\83\93\83N
\83o
\81[
1230 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1232 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1233 if not FileExists(GikoSys.GetBoardFileName) then begin
1234 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
1235 + '
\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
1236 + '
\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';
1237 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1238 GikoDM.NewBoardAction.Execute;
1241 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1242 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1244 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1245 // FLastRoundTime := 0;
1248 FHint := TResPopup.Create(Self);
1250 ListView.OnData := TListViewUtils.ListViewData;
1252 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1253 CabinetVisible( False );
1254 if GikoSys.Setting.CabinetVisible then begin
1255 i := CabinetSelectPopupMenu.Items.Count - 1;
1256 if GikoSys.Setting.CabinetIndex = i - 1 then
1257 GikoDM.CabinetHistoryAction.Execute
1258 else if GikoSys.Setting.CabinetIndex = i then
1259 GikoDM.CabinetFavoriteAction.Execute
1261 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1262 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1263 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1264 FIsIgnoreResize := rtResizing;
1265 GikoDM.CabinetBBSAction.Execute;
1268 ShowBBSTreeOld( BBSs[ 0 ] );
1269 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1272 //
\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
1273 for i := 1 to ParamCount do begin
1274 MoveToURL(ParamStr(i));
1277 GikoDM.RepaintStatusBar;
1278 StatusBarResize(Sender);
1280 dummy1.Caption := ItemReservPMenu.Caption;
1281 dummy1.Hint := ItemReservPMenu.Hint;
1283 {$IFDEF SPAM_FILTER_ENABLED}
1284 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1285 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1288 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1289 MouseGesture := TMouseGesture.Create;
1290 GikoSys.Setting.Gestures.LoadGesture(
1291 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1292 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1293 MouseGesture.OnGestureStart := OnGestureStart;
1294 MouseGesture.OnGestureMove := OnGestureMove;
1295 MouseGesture.OnGestureEnd := OnGestureEnd;
1296 if GikoSys.Setting.GestureEnabled then
1297 MouseGesture.SetHook( Handle );
1299 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1300 GikoSys.SetGikoMessage;
1302 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1303 if GikoSys.Setting.AutoLogin then
1304 GikoDM.LoginAction.Execute;
1306 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1308 //
\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è
1309 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1310 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1312 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1313 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1315 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1316 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1319 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1320 procedure TGikoForm.SaveCoolBarSettings;
1323 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1325 SaveMainCoolBarSettings;
1326 SaveBoardCoolBarSettings;
1327 SaveBrowserCoolBarSettings;
1330 procedure TGikoForm.SaveMainCoolBarSettings;
1335 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1336 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1337 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1338 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1339 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1340 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1343 procedure TGikoForm.SaveBoardCoolBarSettings;
1348 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1349 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1350 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1351 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1352 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1353 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1356 procedure TGikoForm.SaveBrowserCoolBarSettings;
1361 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1362 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1363 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1364 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1365 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1366 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1369 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1370 procedure TGikoForm.LoadCoolBarSettings;
1376 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1377 MainCoolBar.Bands.BeginUpdate;
1379 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1380 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1381 CoolSet := GikoSys.Setting.MainCoolSet[i];
1382 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1383 FIsIgnoreResize := rtNone;
1384 SaveCoolBarSettings;
1387 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1388 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1389 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1392 MainCoolBar.Bands.EndUpdate;
1395 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1396 ListCoolBar.Bands.BeginUpdate;
1398 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1399 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1400 CoolSet := GikoSys.Setting.ListCoolSet[i];
1401 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1402 FIsIgnoreResize := rtNone;
1403 SaveCoolBarSettings;
1406 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1407 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1408 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1411 ListCoolBar.Bands.EndUpdate;
1414 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1415 BrowserCoolBar.Bands.BeginUpdate;
1417 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1418 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1419 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1420 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1421 FIsIgnoreResize := rtNone;
1422 SaveCoolBarSettings;
1425 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1426 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1427 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1430 BrowserCoolBar.Bands.EndUpdate;
1435 procedure TGikoForm.FormShow(Sender: TObject);
1437 if FStartUp then begin
1438 ShowWindow(Application.Handle, SW_HIDE);
1440 //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½
1441 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1442 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1443 GikoDM.StdToolBarVisibleActionExecute( nil );
1444 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1445 GikoDM.AddressBarVisibleActionExecute( nil );
1446 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1447 GikoDM.LinkBarVisibleActionExecute( nil );
1448 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1449 GikoDM.ListToolBarVisibleActionExecute( nil );
1450 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1451 GikoDM.ListNameBarVisibleActionExecute( nil );
1452 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1453 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1454 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1455 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1457 // CoolBar
\95\9c\8c³
1458 LoadCoolBarSettings;
1460 //
\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é
1461 // ResetBandInfo( ListCoolBar, ListToolBar );
1462 FIsIgnoreResize := rtNone;
1464 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1465 if GikoSys.Setting.TabAutoLoadSave then begin
1466 GikoDM.TabsOpenAction.Tag := 1;
1467 GikoDM.TabsOpenAction.Execute;
1468 GikoDM.TabsOpenAction.Tag := 0;
1471 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1472 SetGroupIndex(GikoDM.GikoFormActionList);
1478 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1480 // if GikoForm.WindowState <> wsMinimized then
1481 // SaveCoolBarSettings;
1483 if ( GikoSys.Setting.ShowDialogForEnd ) and
1484 (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
1489 if GikoSys.Setting.TabAutoLoadSave then begin
1490 GikoDM.TabsSaveAction.Execute;
1493 if (SearchDialog <> nil) then begin
1494 if (SearchDialog.Visible) then begin
1497 SearchDialog.Release;
1500 SearchDialog := nil;
1504 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1505 GikoDM.CloseAllEditorAction.Execute;
1507 Application.UnhookMainWindow(Hook);
1508 Application.Terminate;
1511 procedure TGikoForm.FormDestroy(Sender: TObject);
1514 // CoolSet: TCoolSet;
1515 wp : TWindowPlacement;
1518 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1520 MouseGesture.UnHook;
1524 ActiveListColumnSave;
1528 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1529 wp.length := sizeof(wp);
1530 GetWindowPlacement(Handle, @wp);
1531 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1532 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1533 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1534 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1535 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1537 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1538 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1539 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1540 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1541 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1542 if GikoDM.ArrangeAction.Checked then
1543 GikoSys.Setting.ListOrientation := gloVertical
1545 GikoSys.Setting.ListOrientation := gloHorizontal;
1546 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1551 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1552 if not GikoSys.Setting.ResRangeHold then
1553 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1556 if WindowState <> wsNormal then
1557 WindowState := wsNormal;
1558 SaveCoolBarSettings;
1560 GikoSys.Setting.WriteWindowSettingFile;
1561 GikoSys.Setting.WriteNameMailSettingFile;
1564 //
\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è
1565 //
\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¢
1567 //
\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
1569 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1571 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1572 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1574 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1576 //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é
1577 FavoriteDM.WriteFavorite;
1581 LockWindowUpdate(Self.Handle);
1583 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1584 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1585 GikoSys.Setting.ShowDialogForAllTabClose := false;
1586 GikoDM.AllTabCloseAction.Execute;
1587 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1591 for i := FBrowsers.Count - 1 downto 0 do begin
1592 TWebBrowser(FBrowsers[i]).Free;
1595 FBrowsers.Capacity := 0;
1600 if BrowserNullTab <> nil then begin
1601 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1602 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1604 BrowserNullTab.Free;
1610 TreeView.Items.BeginUpdate;
1611 TreeView.Items.GetFirstNode.Free;
1612 TreeView.Items.Clear;
1613 TreeView.Items.EndUpdate;
1617 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1619 //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
1620 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1624 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1626 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1638 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1640 RoundList.SaveRoundFile;
1654 FControlThread.Terminate;
1655 FControlThread.WaitFor;
1659 FControlThread.Free;
1661 //
\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é
1662 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1663 GikoForm.PlugInMenu.items[i].Free;
1665 GikoForm.PlugInMenu.Clear;
1668 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1669 // 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Å
1670 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1671 for i := Length(BoardGroups) - 1 downto 0 do begin
1672 //BoardGroups[i].Clear;
1673 BoardGroups[i].Free;
1677 for i := Length( BBSs ) - 1 downto 0 do begin
1678 if BBSs[ i ] <> nil then
1686 if FEvent <> nil then
1690 if FHint <> nil then begin
1691 FHint.ReleaseHandle;
1696 if TPreviewBrowser <> nil then begin
1697 FPreviewBrowser.Free;
1698 FPreviewBrowser := nil;
1702 LockWindowUpdate(0);
1705 //
\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
1706 procedure TGikoForm.SetBBSMenu;
1709 item : TBBSMenuItem;
1712 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1713 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1715 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1716 CabinetSelectPopupMenu.Items[ i ].Free;
1717 CabinetMenu.Items[ i ].Free;
1718 BBSSelectPopupMenu.Items[ i ].Free;
1724 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1725 for i := Length( BBSs ) - 1 downto 0 do begin
1727 item := TBBSMenuItem.Create( PopupMenu );
1728 item.Caption := BBSs[ i ].Title;
1729 item.Data := BBSs[ i ];
1730 item.OnClick := BBSMenuItemOnClick;
1731 CabinetSelectPopupMenu.Items.Insert( 0, item );
1732 item := TBBSMenuItem.Create( PopupMenu );
1733 item.Caption := BBSs[ i ].Title;
1734 item.Data := BBSs[ i ];
1735 item.OnClick := BBSMenuItemOnClick;
1736 CabinetMenu.Insert( 0, item );
1737 item := TBBSMenuItem.Create( PopupMenu );
1738 item.Caption := BBSs[ i ].Title;
1739 item.Data := BBSs[ i ];
1740 item.OnClick := BBSMenuItemOnClick;
1741 BBSSelectPopupMenu.Items.Insert( 0, Item );
1748 procedure TGikoForm.ReloadBBS;
1753 LockWindowUpdate(Self.Handle);
1755 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1756 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1757 GikoSys.Setting.ShowDialogForAllTabClose := false;
1758 GikoDM.AllTabCloseAction.Execute;
1759 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1760 SetContent(BrowserNullTab);
1761 //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
1762 TreeView.Items.Clear;
1764 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1766 RoundList.SaveRoundFile;
1769 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1775 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1777 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1782 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1784 FavoriteDM.WriteFavorite;
1789 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1790 for i := Length(BoardGroups) - 1 downto 0 do begin
1792 BoardGroups[i].Free;
1798 for i := Length( BBSs ) - 1 downto 0 do begin
1799 if BBSs[ i ] <> nil then
1808 FTreeType := gttNone;
1810 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1812 //
\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Æ)
1813 InitializeBoardPlugIns;
1815 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1817 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1818 for i := Length(BBSs) - 1 downto 0 do begin
1819 if not BBSs[i].IsBoardFileRead then
1820 GikoSys.ReadBoardFile(BBSs[i]);
1823 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1826 ShowBBSTree( BBSs[ 0 ] );
1828 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1829 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1830 TreeView, FTreeType);
1832 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1833 FavoriteDM.ReadFavorite;
1837 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1838 RoundList.LoadRoundBoardFile;
1839 RoundList.LoadRoundThreadFile;
1841 LockWindowUpdate(0);
1845 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1846 (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©)
1847 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1849 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1857 threadItem : TThreadItem;
1859 Protocol, Host, Path, Document, Port, Bookmark: string;
1864 ActiveFileName: string;
1870 //
\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ª
1871 // 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è)
1872 if Pos('about:..', Text) = 1 then
1873 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1876 if not( TObject(Sender) is TWebBrowser )then
1880 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1881 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1882 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1889 if PreviewTimer.Enabled then
1890 PreviewTimer.Enabled := False;
1891 Application.CancelHint;
1893 if GetActiveContent <> nil then
1894 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1896 ActiveFileName := '';
1898 FActiveContent := nil;
1901 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1902 if (StatusBar.Panels[1].Text = Text2) then begin
1904 Writeln('Status Text is not changed!');
1908 StatusBar.Panels[1].Text := Text2;
1910 if FHint <> nil then begin
1911 FHint.ReleaseHandle;
1914 if FPreviewBrowser <> nil then
1915 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1917 if not GikoSys.Setting.UnActivePopup then
1918 if not GikoForm.Active then
1923 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1924 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1927 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1928 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1929 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1930 if FPreviewBrowser = nil then begin
1931 FPreviewBrowser := TPreviewBrowser.Create(Self);
1932 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1933 TOleControl(FPreviewBrowser).Parent := nil;
1935 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1936 FPreviewURL := Text2;
1937 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1938 PreviewTimer.Enabled := True;
1939 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1940 if Pos('mailto:', Text2) = 1 then begin
1941 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1942 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1944 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1945 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1946 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1947 if (Assigned(e)) then begin
1948 tmp2 := ZenToHan(e.Get_outerText);
1949 if (GikoSys.IsNumeric(tmp2)) then begin
1950 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1951 wkIntSt := StrToInt64(tmp2);
1952 wkIntTo := StrToInt64(tmp2);
1953 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1954 FHint.PopupType := gptThread;
1955 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1957 FHint.PopupType := gptRaw;
1962 threadItem := GetActiveContent;
1963 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1964 PathRec := Gikosys.Parse2chURL2(URL);
1965 if (PathRec.FNoParam) then begin
1969 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1971 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1973 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1975 URL := GikoSys.GetBrowsableThreadURL( URL );
1976 wkIntSt := PathRec.FSt;
1977 wkIntTo := PathRec.FTo;
1979 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1982 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1984 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1986 end else if wkIntSt > wkIntTo then begin
1991 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1996 threadItem := BBSsFindThreadFromURL( URL );
1998 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1999 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2000 if board <> nil then begin
2001 if not board.IsThreadDatRead then
2002 GikoSys.ReadSubjectFile( board );
2003 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2007 if threadItem <> nil then begin
2008 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2009 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2010 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2014 FHint.PopupType := gptThread;
2015 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2020 if FHint.PopupType = gptRaw then begin
2021 if FHint.Caption <> '' then
2024 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2030 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2034 FEnabledCloseButton := Enabled;
2035 SysMenu := GetSystemMenu(Handle, False);
2037 if Enabled then begin
2038 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2040 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2043 DrawMenuBar(Handle);
2046 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2047 var AllowChange: Boolean);
2049 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2050 // if FTreeType = gtt2ch then
2051 // FSortIndex := -1;
2054 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2055 Shift: TShiftState);
2059 if GetActiveList is TBoard then begin
2061 VK_BACK:; // UpFolderButtonClick(Sender);
2062 VK_SPACE: ListDoubleClick(Shift);
2063 VK_RETURN: ListClick;
2066 if ListView.Selected <> nil then begin
2067 pos.X := ListView.Column[ 0 ].Width;
2068 pos.Y := ListView.Selected.Top;
2070 pos.X := ListView.Left;
2071 pos.Y := ListView.Top;
2073 Windows.ClientToScreen( ListView.Handle, pos );
2074 ListPopupMenu.Popup( pos.X, pos.Y );
2077 end else begin // TBBS, TCategory
2079 VK_BACK:; // UpFolderButtonClick(Sender);
2080 VK_SPACE: ListClick;
2081 VK_RETURN: ListDoubleClick(Shift);
2084 if ListView.Selected <> nil then begin
2085 pos.X := ListView.Column[ 0 ].Width;
2086 pos.Y := ListView.Selected.Top;
2088 pos.X := ListView.Left;
2089 pos.Y := ListView.Top;
2091 Windows.ClientToScreen( ListView.Handle, pos );
2092 ListPopupMenu.Popup( pos.X, pos.Y );
2098 function TGikoForm.GetHttpState: Boolean;
2100 Result := FHttpState;
2103 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2104 Column: TListColumn);
2108 vSortIndex : Integer;
2109 vSortOrder : Boolean;
2111 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2112 if TObject( FActiveList ) is TBBS then begin
2113 orderList := GikoSys.Setting.BBSColumnOrder;
2114 vSortIndex := GikoSys.Setting.BBSSortIndex;
2115 vSortOrder := GikoSys.Setting.BBSSortOrder;
2116 end else if TObject( FActiveList ) is TCategory then begin
2117 orderList := GikoSys.Setting.CategoryColumnOrder;
2118 vSortIndex := GikoSys.Setting.CategorySortIndex;
2119 vSortOrder := GikoSys.Setting.CategorySortOrder;
2120 end else if TObject( FActiveList ) is TBoard then begin
2121 orderList := GikoSys.Setting.BoardColumnOrder;
2122 vSortIndex := GikoSys.Setting.BoardSortIndex;
2123 vSortOrder := GikoSys.Setting.BoardSortOrder;
2127 id := Integer( orderList[ idx ] );
2130 if vSortIndex = id then
2131 vSortOrder := not vSortOrder
2133 vSortOrder := id = 0;
2136 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2139 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2140 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2144 DefaultDraw := True;
2146 DefaultDraw := False;
2147 if (cdsSelected in State) or (cdsHot in State) then begin
2148 Sender.Canvas.Brush.Color := clHighlight;
2149 Sender.Canvas.Font.Color := clHighlightText;
2151 Sender.Canvas.Brush.Color := clBtnFace;
2152 Sender.Canvas.Font.Color := clBtnText;
2154 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2155 Sender.Canvas.FillRect(ARect);
2156 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2159 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2164 Nodes := TreeView.Items;
2166 for i := 0 to Nodes.Count - 1 do begin
2167 if Nodes.Item[i].Data = Data then begin
2168 Result := Nodes.Item[i];
2175 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2176 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2177 Headers: OleVariant; var Cancel: WordBool);
2182 kMenuName: string = 'menu:';
2185 if Pos(kMenuName, URL) <> 0 then begin
2186 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2188 if not GikoSys.IsNumeric(sNo) then Exit;
2192 KokoPopupMenu.Tag := StrToInt(sNo);
2193 KokoPopupMenu.Popup(p.x, p.y);
2194 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2195 Cancel := not GikoSys.Setting.OpenMailer;
2200 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2201 const ARect: TRect; var DefaultDraw: Boolean);
2205 IsBoardNode: Boolean;
2211 Category: TCategory;
2215 DefaultDraw := True;
2217 if FTreeType = gttHistory then Exit;
2219 TreeView.Canvas.Font.Color := clBlue;
2220 IsBoardNode := False;
2221 for i := 0 to TreeView.Items.Count - 1 do begin
2223 if not TreeView.Items[i].IsVisible then
2226 if TObject(TreeView.Items[i].Data) is TCategory then begin
2227 if TreeView.Items[i].Expanded then
2230 IsBoardNode := False;
2231 Category := TCategory(TreeView.Items[i].Data);
2232 for j := 0 to Category.Count - 1 do begin
2233 Board := Category.Items[j];
2234 if Board <> nil then begin
2235 if Board.UnRead > 0 then begin
2243 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2244 IsBoardNode := True;
2245 Board := TBoard(TreeView.Items[i].Data);
2247 Cnt := Board.UnRead;
2253 Bitmap := TBitmap.Create;
2255 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2256 Bitmap.Canvas.Font.Style := [fsBold];
2257 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2262 NodeRect := TreeView.Items[i].DisplayRect(True);
2265 CntText := '(' + IntToStr(Cnt) + ')'
2266 else if Cnt = 1 then
2270 TextWidth := TreeView.Canvas.TextWidth(CntText);
2272 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2274 NodeRect.Left + NodeWidth + TextWidth + 8,
2276 DrawText(TreeView.Canvas.Handle,
2280 DT_SINGLELINE or DT_VCENTER);
2282 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2285 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2286 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2289 Category: TCategory;
2292 DefaultDraw := True;
2294 if FTreeType = gttHistory then Exit;
2296 TreeView.Canvas.Font.Style := [];
2297 if Node <> nil then begin
2298 if TObject(Node.Data) is TCategory then begin
2299 Category := TCategory(Node.Data);
2300 for i := 0 to Category.Count - 1 do begin
2301 Board := Category.Items[i];
2302 if Board <> nil then begin
2303 if Board.UnRead > 0 then begin
2304 TreeView.Canvas.Font.Style := [fsBold];
2309 end else if TObject(Node.Data) is TBoard then begin
2310 Board := TBoard(Node.Data);
2311 if Board.UnRead > 0 then
2312 TreeView.Canvas.Font.Style := [fsBold];
2317 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2319 TreeView.Invalidate;
2321 if TObject(Node.Data) is TBBS then begin
2322 TBBS(Node.Data).NodeExpand := True;
2323 end else if TObject(Node.Data) is TCategory then begin
2324 TCategory(Node.Data).NodeExpand := True;
2325 end else if TObject(Node.Data) is TBoard then begin
2326 TBoard(Node.Data).NodeExpand := True;
2330 procedure TGikoForm.ListViewAllSelect;
2335 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2337 AddMessageList(Msg, nil, Icon);
2339 // *************************************************************************
2340 //!
\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
2341 // *************************************************************************
2342 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2346 boardPlugIn : TBoardPlugIn;
2351 if Item.DownType = gdtBoard then
2352 ATitle := Item.Board.Title
2354 ATitle := Item.ThreadItem.Title;
2356 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2358 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2360 if Item.DownType = gdtBoard then begin
2363 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2364 if GetActiveList = Item.Board then begin
2366 //
\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é
2367 if (GikoSys.Setting.AutoSortThreadList) then begin
2368 GikoSys.Setting.BoardSortIndex := 0;
2369 GikoSys.Setting.BoardSortOrder := True;
2371 Sort.SetSortDate(Now());
2372 SetActiveList(Item.Board);
2374 Item.Board.Modified := True;
2375 Item.Board.IsThreadDatRead := True;
2378 end else if Item.DownType = gdtThread then begin
2381 Item.ThreadItem.NewArrival := True;
2382 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2383 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2384 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2385 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2386 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2387 Item.ThreadItem.Title := Res.FTitle;
2388 ATitle := Item.ThreadItem.Title;
2389 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2390 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2391 ATitle := Res.FTitle;
2393 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2394 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2395 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2399 if GikoSys.Setting.BrowserTabVisible then begin
2400 if GetActiveContent = Item.ThreadItem then
2401 InsertBrowserTab(Item.ThreadItem)
2402 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2403 InsertBrowserTab(Item.ThreadItem, True)
2405 InsertBrowserTab(Item.ThreadItem, False);
2408 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2409 InsertBrowserTab(Item.ThreadItem);
2412 Application.ProcessMessages;
2414 if Item.State = gdsComplete then begin
2416 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2420 PlaySound('NewDiff');
2421 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2426 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2427 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2428 Item.ThreadItem.Round := False;
2429 //Item.ThreadItem.RoundName := '';
2430 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);
2433 //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
2434 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2435 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2436 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2437 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2438 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2439 case GikoForm.ViewType of
2440 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2441 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2442 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2443 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2444 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2445 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2448 RefreshListView(Item.ThreadItem);
2451 end else if Item.State = gdsNotModify then begin
2453 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2454 //SetContent(Item.ThreadItem);
2455 InsertBrowserTab(Item.ThreadItem);
2457 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2458 PlaySound('NoChange');
2459 Screen.Cursor := crDefault;
2460 end else if Item.State = gdsAbort then begin
2462 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2463 end else if Item.State = gdsError then begin
2468 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2469 // if Item.ResponseCode = 302 then
2470 // 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);
2476 if FWorkCount < 0 then FWorkCount := 0;
2477 if FWorkCount = 0 then begin
2479 Animate.Active := False;
2481 Screen.Cursor := crDefault;
2488 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2490 // SetProgressValue(Number, 0, AWorkCountMax);
2491 // ProgressBar.Visible := True;
2492 ProgressBar.Position := 0;
2493 ProgressBar.Max := AWorkCountMax;
2494 FDownloadTitle := AWorkTitle;
2495 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2496 FDownloadMax := AWorkCountMax;
2499 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2501 ProgressBar.Position := 0;
2502 if FDownloadMax <> 0 then
2503 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2506 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2508 ProgressBar.Position := AWorkCount;
2509 // SetProgressValue(Number, AWorkCount);
2510 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2513 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2515 ListItem: TListItem;
2517 MessageListView.Items.BeginUpdate;
2519 ListItem := MessageListView.Items.Add;
2520 ListItem.Caption := ACaption;
2521 ListItem.Data := AObject;
2522 ListItem.MakeVisible(False);
2524 gmiOK: ListItem.ImageIndex := 0;
2525 gmiSAD: ListItem.ImageIndex := 1;
2526 gmiNG: ListItem.ImageIndex := 2;
2527 gmiWhat: ListItem.ImageIndex := 3;
2530 MessageListView.Items.EndUpdate;
2534 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2535 procedure TGikoForm.ReleaseOldestBrowser;
2539 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2540 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2541 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2542 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2548 function TGikoForm.InsertBrowserTab(
2549 ThreadItem : TThreadItem;
2550 ActiveTab : Boolean = True
2553 i, j, idx : Integer;
2554 favItem : TFavoriteThreadItem;
2555 newBrowser : TBrowserRecord;
2560 if Threaditem = nil then Exit;
2562 if ThreadItem.IsLogFile then begin
2563 //
\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é
2564 //
\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é
2565 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2566 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2567 j := FBrowsers.IndexOf(FActiveContent.Browser);
2568 if j = BROWSER_COUNT - 1 then
2569 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2571 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2572 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2575 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2576 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2577 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2578 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2579 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2580 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2581 ReleaseOldestBrowser;
2582 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2583 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2584 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2586 if ActiveTab then begin
2587 BrowserTab.TabIndex := i;
2588 BrowserTab.OnChange(nil);
2595 idx := BrowserTab.TabIndex;
2596 newBrowser := TBrowserRecord.Create;
2597 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2598 ReleaseOldestBrowser;
2599 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2600 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2601 newBrowser.thread := ThreadItem;
2602 newBrowser.Repaint := true;
2604 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2605 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2606 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2607 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2611 if ActiveTab then begin
2612 BrowserTab.TabIndex := 0;
2614 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2615 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2616 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2617 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2621 if ActiveTab then begin
2622 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2623 BrowserTab.TabIndex := 0
2625 BrowserTab.TabIndex := i;
2628 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2630 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2631 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2632 TWebBrowser(FBrowsers[1]) then begin
2637 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2640 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2641 if (ins < 0) then begin
2644 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2645 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2646 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2647 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2649 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2654 if ActiveTab then begin
2655 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2656 BrowserTab.TabIndex := 0
2658 BrowserTab.TabIndex := ins;
2661 Result := newBrowser;
2662 if(ActiveTab) or (idx = -1) then begin
2663 BrowserTab.OnChange(nil);
2666 if BrowserNullTab = nil then begin
2667 BrowserNullTab := TBrowserRecord.Create;
2668 BrowserNullTab.Browser := Browser;
2670 // if BrowserNullTab.thread <> ThreadItem then begin
2671 // BrowserNullTab.Movement := '';
2673 BrowserNullTab.thread := ThreadItem;
2674 Result := BrowserNullTab;
2675 BrowserTab.TabIndex := -1;
2676 SetContent(BrowserNullTab);
2679 if GikoSys.Setting.URLDisplay then
2680 AddressComboBox.Text := ThreadItem.URL;
2684 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2692 ThreadItem: TThreadItem;
2693 Thread: TBrowserRecord;
2694 ThreadTitle, ThreadPTitle: string;
2695 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2698 idx := BrowserTab.TabIndex;
2699 if (FActiveContent <> nil) and
2700 (FActiveContent.Thread <> Thread.Thread) and
2701 (FActiveContent.Browser <> nil) and
2702 (Assigned(FActiveContent.Browser.Document)) then begin
2705 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2708 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2713 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2714 Thread.Browser.Navigate(BLANK_HTML);
2715 BrowserBoardNameLabel.Caption := '';
2716 ItemBoardImage.Picture := nil;
2717 BrowserNameLabel.Caption := '';
2718 ItemImage.Picture := nil;
2719 BrowserNullTab.Thread := nil;
2720 //TOleControl(BrowserNullTab.Browser).Visible := true;
2721 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2722 FActiveContent := nil;
2724 end else if Thread.Browser = nil then begin
2725 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2726 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2727 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2728 ReleaseOldestBrowser;
2729 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2730 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2733 ThreadTitle := Thread.Thread.Title;
2734 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2735 //ThreadScrollTop := Thread.Thread.ScrollTop;
2736 ThreadIsLog := Thread.Thread.IsLogFile;
2737 ThreadItem := Thread.Thread;
2738 ThreadNewArraical := Thread.Thread.NewArrival;
2739 //ThreadUnRead := Thread.Thread.UnRead;
2740 BBSID := ThreadItem.ParentBoard.BBSID;
2741 FileName := ThreadItem.FileName;
2743 if GetCapture = ListView.Handle then
2746 Screen.Cursor := crHourGlass;
2750 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2751 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2752 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2754 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2755 if (not Assigned(Thread.Browser.Document)) then begin
2756 Thread.Browser.Navigate('about:blank');
2758 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2759 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2760 Application.ProcessMessages;
2761 if idx <> BrowserTab.TabIndex then begin
2766 if (Thread <> nil) and (ThreadItem <>nil) then begin
2767 BrowserBoardNameLabel.Caption := ThreadPTitle;
2768 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2769 BrowserNameLabel.Caption := ThreadTitle;
2770 ItemImage.Picture := nil;
2772 if ThreadNewArraical then
2773 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2775 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2777 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2779 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2780 BrowserNameLabel.Left := ItemImage.Left + 20;
2783 //ActiveContent
\81@
\82Ì
\8dX
\90V
2784 FActiveContent := Thread;
2786 if not ThreadIsLog then begin
2787 Self.Caption := GikoDataModule.CAPTION_NAME ;
2788 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2789 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2791 Thread.Browser.BringToFront;
2792 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2793 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2795 doc.charset := 'Shift_JIS';
2802 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2803 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2804 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2805 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2806 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2807 //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«
2808 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2809 if Thread.Repaint then begin
2810 Thread.Repaint := false;
2812 Thread.Browser.OnStatusTextChange := nil;
2813 LockWindowUpdate(Thread.Browser.ParentWindow);
2814 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2815 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2816 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2820 RefreshListView(ThreadItem);
2822 Screen.Cursor := crDefault;
2826 function TGikoForm.GetActiveContent: TThreadItem;
2829 if FActiveContent <> nil then
2830 Result := FActiveContent.Thread
2839 procedure TGikoForm.SetActiveList(Obj: TObject);
2843 // if FActiveList <> Obj then begin
2846 if ListView.Selected <> nil then
2847 idx := ListView.Selected.Index
2853 ListView.Items.Count := 0;
2854 ListView.Items.Clear;
2855 ListView.Selected := nil;
2856 // ListView.Columns.Clear;
2857 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2858 and (FActiveContent.Thread.IsLogFile) then begin
2860 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2862 on E: Exception do begin
2863 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2864 //
\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é
2865 ReleaseBrowser(FActiveContent);
2866 FActiveContent.Thread := nil;
2867 Self.Caption := GikoDataModule.CAPTION_NAME;
2871 Self.Caption := GikoDataModule.CAPTION_NAME;
2872 //Application.Title := CAPTION_NAME;
2874 // ActiveListColumnSave;
2876 Screen.Cursor := crHourGlass;
2878 if Obj is TBBS then begin
2879 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2880 end else if Obj is TCategory then begin
2881 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2882 end else if Obj is TBoard then begin
2883 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2886 Screen.Cursor := crDefault;
2889 if idx >= 0 then begin
2890 if idx >= ListView.Items.Count then
2891 idx := ListView.Items.Count - 1;
2892 ListView.ItemIndex := idx;
2893 ListView.ItemFocused := ListView.Items.Item[ idx ];
2899 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2900 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2901 function TGikoForm.GetActiveList: TObject;
2903 Result := FActiveList;
2906 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2908 SetListViewType(AViewType, '', False);
2911 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2916 for i := Length( BBSs ) - 1 downto 0 do begin
2917 BBSs[i].SelectText := SelectText;
2918 BBSs[i].KubetsuChk := KubetsuChk;
2920 ViewType := AViewType;
2921 if ActiveList is TBoard then begin
2922 Board := TBoard(ActiveList);
2924 //gvtAll: ListView.Items.Count := Board.Count;
2925 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2926 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2927 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2928 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2929 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2933 SetActiveList(Board);
2937 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2938 const ARect: TRect; var DefaultDraw: Boolean);
2944 if ListView.Items.Count = 0 then begin
2945 DefaultDraw := true;
2946 ListView.Canvas.Brush.Color := ListView.Color;
2947 ListView.Canvas.FillRect(ARect);
2951 ListView.Canvas.Font.Color := clWindowText;
2952 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2955 ListView.Canvas.Font.Color := clBlue;
2956 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';
2959 ListView.Canvas.Font.Color := clGreen;
2960 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2963 ListView.Canvas.Font.Color := clFuchsia;
2964 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';
2967 ListView.Canvas.Font.Color := clMaroon;
2968 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2971 ListView.Canvas.Font.Color := clNavy;
2972 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';
2973 if GetActiveList is TBoard then
2974 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2982 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2983 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2984 ListView.Canvas.TextOut(p.X, p.Y, s);
2986 DefaultDraw := True;
2990 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2992 Item: TDownloadItem;
2994 if not Board.IsThreadDatRead then
2995 GikoSys.ReadSubjectFile(Board);
2996 Item := TDownloadItem.Create;
2998 Item.Board := Board;
2999 Item.DownType := gdtBoard;
3000 Item.ForceDownload := ForceDownload;
3001 FControlThread.AddItem(Item);
3002 if FWorkCount = 0 then begin
3004 Animate.Active := True;
3007 Screen.Cursor := crAppStart;
3015 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3017 Item: TDownloadItem;
3019 Item := TDownloadItem.Create;
3021 Item.ThreadItem := ThreadItem;
3022 Item.DownType := gdtThread;
3023 Item.ForceDownload := ForceDownload;
3024 FControlThread.AddItem(Item);
3025 if FWorkCount = 0 then begin
3027 Animate.Active := True;
3030 Screen.Cursor := crAppStart;
3038 procedure TGikoForm.PlaySound(SoundEventName: string);
3042 if not GikoSys.Setting.Mute then begin
3043 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3044 if FileExists(FileName) then begin
3045 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3046 sndPlaySound(nil, SND_SYNC);
3047 Application.ProcessMessages;
3049 sndPlaySound(PChar(FileName), SND_ASYNC);
3055 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3056 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3058 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3061 procedure TGikoForm.ShowBBSTreeOld(
3069 FavoriteTreeView.Visible := False;
3070 FavoriteToolBar.Hide;
3071 TreeView.Visible := True;
3073 b := CabinetSelectPopupMenu.Items.Count - 1;
3074 for i := 0 to b do begin
3075 item := CabinetSelectPopupMenu.Items[ i ];
3076 if item is TBBSMenuItem then begin
3077 if TBBSMenuItem( item ).Data = inBBS then begin
3078 item.Checked := True;
3079 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3080 CabinetMenu.Items[ i ].Checked := True;
3081 GikoSys.Setting.CabinetIndex := i;
3085 item.Checked := False;
3086 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3087 CabinetMenu.Items[ i ].Checked := False;
3089 CabinetSelectToolButton.Caption := inBBS.Title;
3091 GikoDM.CabinetHistoryAction.Checked := False;
3092 GikoDM.CabinetFavoriteAction.Checked := False;
3094 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3095 FTreeType := gtt2ch;
3096 HistoryToolBar.Hide;
3097 FActiveBBS := inBBS;
3098 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3099 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3100 //?c???[??g?b?v?????I????
3101 if GetActiveList = nil then
3102 TreeView.Selected := TreeView.Items[0]
3104 for i := 0 to TreeView.Items.Count - 1 do begin
3105 if TreeView.Items[i].Data = GetActiveList then begin
3106 TreeView.Selected := TreeView.Items[i];
3110 TreeView.Selected := TreeView.Items[0]
3118 procedure TGikoForm.ShowBBSTree(
3127 FavoriteTreeView.Visible := False;
3128 FavoriteToolBar.Hide;
3129 TreeView.Visible := True;
3131 b := CabinetSelectPopupMenu.Items.Count - 1;
3132 for i := 0 to b do begin
3133 item := CabinetSelectPopupMenu.Items[ i ];
3134 if item is TBBSMenuItem then begin
3135 if TBBSMenuItem( item ).Data = inBBS then begin
3136 item.Checked := True;
3137 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3138 CabinetMenu.Items[ i ].Checked := True;
3139 GikoSys.Setting.CabinetIndex := i;
3143 item.Checked := False;
3144 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3145 CabinetMenu.Items[ i ].Checked := False;
3147 CabinetSelectToolButton.Caption := inBBS.Title;
3149 GikoDM.CabinetHistoryAction.Checked := False;
3150 GikoDM.CabinetFavoriteAction.Checked := False;
3152 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3153 or (not (CabinetPanel.Visible)) then begin
3154 FTreeType := gtt2ch;
3155 HistoryToolBar.Hide;
3156 FActiveBBS := inBBS;
3157 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3158 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3159 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3160 if GetActiveList = nil then begin
3162 TreeClick( TreeView.Items[0] );
3166 for i := 0 to TreeView.Items.Count - 1 do begin
3167 if TreeView.Items[i].Data = GetActiveList then begin
3168 TreeClick( TreeView.Items[i] );
3172 TreeClick( TreeView.Items[0] );
3180 procedure TGikoForm.ShowHistoryTree;
3185 if CabinetPanel.Visible then begin
3186 if FTreeType = gttHistory then begin
3187 CabinetVisible( False );
3188 GikoDM.CabinetHistoryAction.Checked := False;
3190 GikoDM.CabinetHistoryAction.Checked := True;
3193 CabinetVisible( True );
3194 GikoDM.CabinetHistoryAction.Checked := True;
3197 // BBS...BBS, History, Favorite
3198 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3200 FavoriteTreeView.Visible := False;
3201 TreeView.Visible := True;
3203 GikoDM.CabinetBBSAction.Checked := False;
3204 GikoDM.CabinetFavoriteAction.Checked := False;
3206 if FTreeType <> gttHistory then begin
3207 b := CabinetSelectPopupMenu.Items.Count - 1;
3208 for i := 0 to b do begin
3209 item := CabinetSelectPopupMenu.Items[ i ];
3210 if item is TBBSMenuItem then begin
3211 item.Checked := False;
3212 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3213 CabinetMenu.Items[ i ].Checked := False;
3217 FTreeType := gttHistory;
3218 HistoryToolBar.Show;
3219 FavoriteToolBar.Hide;
3220 FHistoryList.SetTreeNode( TreeView );
3221 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3225 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3227 ChangeEvent: TTVChangedEvent;
3228 ChangingEvent: TTVChangingEvent;
3232 if Item is TCategory then
3233 bbs := TCategory( Item ).ParenTBBS
3234 else if Item is TBoard then
3235 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3239 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3240 if Item <> FActiveList then begin
3242 ChangingEvent := nil;
3244 if not CallEvent then begin
3245 ChangeEvent := TreeView.OnChange;
3246 ChangingEvent := TreeView.OnChanging;
3249 if not CallEvent then begin
3250 TreeView.OnChange := nil;
3251 TreeView.OnChanging := nil;
3253 //Application.ProcessMessages;
3254 for i := 0 to TreeView.Items.Count - 1 do begin
3255 if TreeView.Items[i].Data = Item then begin
3256 TreeView.Items[i].Selected := True;
3258 TreeClick(TreeView.Items[i]);
3262 //Application.ProcessMessages;
3264 if not CallEvent then begin
3265 TreeView.OnChange := ChangeEvent;
3266 TreeView.OnChanging := ChangingEvent;
3271 if Item <> FActiveList then begin
3272 ActiveListColumnSave;
3273 if (Item is TBBS) or (Item is TCategory) then begin
3274 ListView.Columns.Clear;
3275 SetActiveList( Item );
3276 end else if Item is TBoard then begin
3277 if not TBoard( Item ).IsThreadDatRead then begin
3278 Screen.Cursor := crHourGlass;
3280 if not TBoard( Item ).IsThreadDatRead then
3281 GikoSys.ReadSubjectFile(TBoard( Item ));
3283 Screen.Cursor := crDefault;
3286 Sort.SetSortDate(Now());
3287 SetActiveList( Item );
3292 if Item is TBoard then begin // not TCategory
3293 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3294 if GikoSys.Setting.ListWidthState = glsMax then begin
3295 GikoDM.BrowserMinAction.Execute;
3296 if GikoForm.Visible then
3300 if GikoSys.Setting.ListHeightState = glsMax then begin
3301 GikoDM.BrowserMinAction.Execute;
3302 if GikoForm.Visible then
3309 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3310 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3312 listItem : TListItem;
3313 threadItem : TThreadItem;
3320 if not (GetActiveList is TBoard) then Exit;
3321 listItem := ListView.GetItemAt( X, Y );
3322 if listItem = nil then Exit;
3323 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3325 threadItem := TThreadItem(ListItem.Data);
3326 InsertBrowserTab(threadItem, False);
3327 if threadItem.IsLogFile then
3328 ListView.UpdateItems(listItem.Index, listItem.Index);
3332 //
\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Å
3333 if (ssDouble in Shift) then
3334 ListDoubleClick(Shift)
3342 Windows.ClientToScreen( ListView.Handle, pos );
3343 ListPopupMenu.Popup( pos.X, pos.Y );
3349 procedure TGikoForm.ListClick;
3351 ListItem: TListItem;
3352 ThreadItem: TThreadItem;
3354 if ListView.SelCount <> 1 then Exit;
3355 ListItem := ListView.Selected;
3356 if ListItem = nil then Exit;
3357 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3359 ThreadItem := TThreadItem(ListItem.Data);
3360 if ThreadItem.IsLogFile then begin
3361 InsertBrowserTab(ThreadItem);
3362 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3364 InsertBrowserTab(ThreadItem);
3367 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3368 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3369 if GikoSys.Setting.ListWidthState = glsMin then begin
3370 GikoDM.BrowserMaxAndFocusAction.Execute;
3373 if GikoSys.Setting.ListHeightState = glsMin then begin
3374 GikoDM.BrowserMaxAndFocusAction.Execute;
3380 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3382 ThreadItem: TThreadItem;
3385 shiftDown := (ssShift in Shift);
3387 if ListView.Selected = nil then Exit;
3389 if TObject(ListView.Selected.Data) is TCategory then begin
3390 SelectTreeNode(ListView.Selected.Data, True);
3391 end else if TObject(ListView.Selected.Data) is TBoard then begin
3392 SelectTreeNode(ListView.Selected.Data, True)
3393 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3394 Application.ProcessMessages;
3395 ThreadItem := TThreadItem(ListView.Selected.Data);
3396 DownloadContent(ThreadItem, shiftDown);
3398 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3399 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3400 if GikoSys.Setting.ListWidthState = glsMin then begin
3401 GikoDM.BrowserMaxAction.Execute;
3402 GikoDM.SetFocusForBrowserAction.Execute;
3405 if GikoSys.Setting.ListHeightState = glsMin then begin
3406 GikoDM.BrowserMaxAction.Execute;
3407 GikoDM.SetFocusForBrowserAction.Execute;
3414 procedure TGikoForm.BrowserMovement(const AName: string);
3416 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3417 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3418 and (FActiveContent <> nil) then begin
3419 FActiveContent.Move(AName);
3422 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3423 procedure TGikoForm.BrowserMovement(scroll: Integer);
3425 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3426 and (FActiveContent <> nil) then begin
3427 FActiveContent.Move(scroll);
3430 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3432 if TObject(Node.Data) is TBBS then begin
3433 TBBS(Node.Data).NodeExpand := False;
3434 end else if TObject(Node.Data) is TCategory then begin
3435 TCategory(Node.Data).NodeExpand := False;
3436 end else if TObject(Node.Data) is TBoard then begin
3437 TBoard(Node.Data).NodeExpand := False;
3439 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3440 TreeClick(TreeView.Selected);
3444 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3446 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3448 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3450 TreeSplitter.Visible := isVisible;
3451 CabinetPanel.Visible := isVisible;
3452 GikoDM.CabinetVisibleAction.Checked := isVisible;
3455 procedure TGikoForm.SelectListItem(List: TList);
3457 TmpListItem: TListItem;
3461 TmpListItem := ListView.Selected;
3462 while TmpListItem <> nil do begin
3463 List.Add(TmpListItem.Data);
3464 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3469 procedure TGikoForm.FormResize(Sender: TObject);
3472 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3473 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3475 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3476 if GikoSys.Setting.ListWidthState = glsMin then begin
3477 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3478 ViewPanel.Width := ThreadMainPanel.Width - 80;
3481 if GikoSys.Setting.ListHeightState = glsMin then begin
3482 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3483 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3487 FIsIgnoreResize := rtResizing;
3488 PostMessage( Handle, USER_RESIZED, 0, 0 );
3493 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3497 FTabHintIndex := -1;
3498 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3499 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3500 DeleteTab(i, BrowserTab.TabIndex);
3505 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3509 FTabHintIndex := -1;
3510 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3511 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3512 DeleteTab(i, BrowserTab.TabIndex);
3517 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3523 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3524 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3525 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3528 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3530 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3531 FActiveContent := nil;
3532 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3533 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3535 FBrowsers.Move(j, BROWSER_COUNT - 1);
3537 BrowserTab.Tabs.BeginUpdate;
3539 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3540 if ( BrowserTab.Tabs.Count - 1 = index ) and
3541 ( BrowserTab.TabRect(index).Left
3542 <= BrowserTab.DisplayRect.Left ) then begin
3543 BrowserTab.ScrollTabs(-1);
3545 BrowserTab.Tabs.Delete(index);
3546 if selectIndex > index then begin
3547 BrowserTab.TabIndex := selectIndex - 1;
3549 if BrowserTab.Tabs.Count -1 >= selectIndex then
3550 BrowserTab.TabIndex := selectIndex
3552 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3555 BrowserTab.Tabs.EndUpdate;
3557 if BrowserTab.Tabs.Count = 0 then begin
3558 BrowserNullTab.Thread := nil;
3560 if(BrowserTab.TabIndex <> -1) and
3561 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3562 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3563 ReleaseOldestBrowser;
3565 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3566 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3567 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3568 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3571 if( FActiveContent = nil) then
3572 BrowserTab.OnChange(nil);
3574 function TGikoForm.Hook(var Message: TMessage): Boolean;
3576 //
\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Ì
3577 //
\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ð
3581 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3583 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3587 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3589 bBoard, bCategory : Boolean;
3591 bBoard := (GetActiveList is TBoard);
3592 bCategory := (GetActiveList is TCategory);
3593 ItemRoundPMenu.Visible := bBoard;
3594 ItemReservPMenu.Visible := bBoard;
3595 LPMSep01.Visible := bBoard;
3596 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3597 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3598 LPMSep02.Visible := bCategory or bBoard;
3599 KidokuPMenu.Visible := bBoard;
3600 MidokuPMenu.Visible := bBoard;
3601 UrlCopyPMenu.Visible := bCategory or bBoard;
3602 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3603 AllSelectPMenu.Visible := bCategory or bBoard;
3604 LPMSep05.Visible := bCategory or bBoard;
3605 DeletePMenu.Visible := bBoard;
3606 LPMSep06.Visible := bCategory or bBoard;
3607 BoardFavoriteAddMenu.Visible := bCategory;
3608 ThreadFavoriteAddMenu.Visible := bBoard;
3609 SaveThreadFile.Visible := bBoard;
3610 AddRoundNameMenu(ItemReservPMenu);
3611 AddRoundNameMenu(ListReservPMenu);
3614 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3616 FClickNode := TreeView.Selected;
3617 if FClickNode = nil then begin
3618 TreeSelectThreadPupupMenu.Visible := False;
3619 TreeSelectBoardPupupMenu.Visible := False;
3620 TPMSep01.Visible := False;
3621 TreeSelectURLPupupMenu.Visible := False;
3622 TreeSelectNamePupupMenu.Visible := False;
3623 TreeSelectNameURLPupupMenu.Visible := False;
3624 TreeSelectFavoriteAddPupupMenu.Visible := False;
3625 TreeSelectLogDeleteSeparator.Visible := False;
3626 TreeSelectLogDeletePopupMenu.Visible := False;
3627 end else if TObject(FClickNode.Data) is TBoard then begin
3628 TreeSelectThreadPupupMenu.Visible := False;
3629 TreeSelectBoardPupupMenu.Visible := True;
3630 TPMSep01.Visible := True;
3631 TreeSelectURLPupupMenu.Visible := True;
3632 TreeSelectNamePupupMenu.Visible := True;
3633 TreeSelectNameURLPupupMenu.Visible := True;
3634 TreeSelectFavoriteAddPupupMenu.Visible := True;
3635 TreeSelectLogDeleteSeparator.Visible := False;
3636 TreeSelectLogDeletePopupMenu.Visible := False;
3637 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3638 TreeSelectThreadPupupMenu.Visible := False;
3639 TreeSelectBoardPupupMenu.Visible := True;
3640 TPMSep01.Visible := True;
3641 TreeSelectURLPupupMenu.Visible := True;
3642 TreeSelectNamePupupMenu.Visible := True;
3643 TreeSelectNameURLPupupMenu.Visible := True;
3644 TreeSelectFavoriteAddPupupMenu.Visible := True;
3645 TreeSelectLogDeleteSeparator.Visible := False;
3646 TreeSelectLogDeletePopupMenu.Visible := False;
3647 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3648 TreeSelectThreadPupupMenu.Visible := True;
3649 TreeSelectBoardPupupMenu.Visible := False;
3650 TPMSep01.Visible := True;
3651 TreeSelectURLPupupMenu.Visible := True;
3652 TreeSelectNamePupupMenu.Visible := True;
3653 TreeSelectNameURLPupupMenu.Visible := True;
3654 TreeSelectFavoriteAddPupupMenu.Visible := True;
3655 TreeSelectLogDeleteSeparator.Visible := True;
3656 TreeSelectLogDeletePopupMenu.Visible := True;
3657 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3658 TreeSelectThreadPupupMenu.Visible := True;
3659 TreeSelectBoardPupupMenu.Visible := False;
3660 TPMSep01.Visible := True;
3661 TreeSelectURLPupupMenu.Visible := True;
3662 TreeSelectNamePupupMenu.Visible := True;
3663 TreeSelectNameURLPupupMenu.Visible := True;
3664 TreeSelectFavoriteAddPupupMenu.Visible := True;
3665 TreeSelectLogDeleteSeparator.Visible := True;
3666 TreeSelectLogDeletePopupMenu.Visible := True;
3667 end else if (TObject(FClickNode.Data) is TCategory) then begin
3668 TreeSelectThreadPupupMenu.Visible := False;
3669 TreeSelectBoardPupupMenu.Visible := False;
3670 TPMSep01.Visible := False;
3671 TreeSelectURLPupupMenu.Visible := False;
3672 TreeSelectNamePupupMenu.Visible := True;
3673 TreeSelectNameURLPupupMenu.Visible := False;
3674 TreeSelectFavoriteAddPupupMenu.Visible := False;
3675 TreeSelectLogDeleteSeparator.Visible := False;
3676 TreeSelectLogDeletePopupMenu.Visible := False;
3677 end else if FClickNode.IsFirstNode then begin
3678 TreeSelectThreadPupupMenu.Visible := False;
3679 TreeSelectBoardPupupMenu.Visible := False;
3680 TPMSep01.Visible := False;
3681 TreeSelectURLPupupMenu.Visible := False;
3682 TreeSelectNamePupupMenu.Visible := True;
3683 TreeSelectNameURLPupupMenu.Visible := False;
3684 TreeSelectFavoriteAddPupupMenu.Visible := False;
3685 TreeSelectLogDeleteSeparator.Visible := False;
3686 TreeSelectLogDeletePopupMenu.Visible := False;
3688 TreeSelectThreadPupupMenu.Visible := False;
3689 TreeSelectBoardPupupMenu.Visible := False;
3690 TPMSep01.Visible := False;
3691 TreeSelectURLPupupMenu.Visible := False;
3692 TreeSelectNamePupupMenu.Visible := False;
3693 TreeSelectNameURLPupupMenu.Visible := False;
3694 TreeSelectFavoriteAddPupupMenu.Visible := False;
3695 TreeSelectLogDeleteSeparator.Visible := False;
3696 TreeSelectLogDeletePopupMenu.Visible := False;
3700 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3701 var ppDisp: IDispatch; var Cancel: WordBool);
3710 threadItem: TThreadItem;
3711 aElement : IHTMLElement;
3714 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3715 if ( aElement <> nil) then begin
3716 Text := aElement.Get_outerText;
3717 Html := aElement.Get_outerHTML;
3718 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3719 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3720 if GikoSys.Setting.ResAnchorJamp then begin
3722 Text := ZenToHan(Trim(Text));
3724 if(AnsiPos('>>', Text) = 1) then begin
3725 //Text := Copy(Text, 3, Length(Text) - 2);
3728 //Text := Copy(Text, 2, Length(Text) - 1);
3732 if AnsiPos('-', Text) <> 0 then begin
3733 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3734 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3735 wkIntTo := StrToIntDef(Text, 0);
3736 if wkIntTo < wkIntSt then
3739 wkIntSt := StrToIntDef(Text, 0);
3742 if wkIntSt <> 0 then begin
3743 FActiveContent.IDAnchorPopup('');
3744 MoveHisotryManager.pushItem(FActiveContent);
3745 BrowserMovement(IntToStr(wkIntSt));
3751 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3753 URL := GikoSys.GetHRefText(Html);
3754 URL := GikoSys.HTMLDecode(URL);
3755 if AnsiPos('BE:', URL) = 1 then begin
3756 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3757 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3758 threadItem := FActiveContent.Thread;
3759 if threadItem = nil then Exit;
3760 URL := BE_PHP_URL + BNum + '&u=d'
3761 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3764 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3765 ( AnsiPos('ftp://', URL) = 1) then begin
3766 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3767 if GikoSys.Setting.LinkAddAddressBar then begin
3768 idx := AddressComboBox.Items.IndexOf(URL);
3769 if idx = -1 then begin
3770 AddressComboBox.Items.Insert(0, URL);
3771 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3772 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3774 AddressComboBox.Items.Delete(idx);
3775 AddressComboBox.Items.Insert(0, URL);
3778 MoveHisotryManager.pushItem(FActiveContent);
3786 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3788 if Mouse.Capture <> 0 then
3790 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3791 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3792 FBrowserSizeWidth := ViewPanel.Width;
3794 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3795 FBrowserSizeHeight := ViewPanel.Height;
3797 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3798 if ViewPanel.Width < 2 then begin
3799 ViewPanel.Width := 1;
3800 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3801 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3802 GikoSys.Setting.ListWidthState := glsMax;
3803 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3804 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3805 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3806 GikoSys.Setting.ListWidthState := glsMin;
3808 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3809 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3810 GikoSys.Setting.ListWidthState := glsNormal;
3813 if ViewPanel.Height < 2 then begin
3814 ViewPanel.Height := 1;
3815 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3816 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3817 GikoSys.Setting.ListHeightState := glsMax;
3818 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3819 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3820 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3821 GikoSys.Setting.ListHeightState := glsMin;
3823 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3824 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3825 GikoSys.Setting.ListHeightState := glsNormal;
3828 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3829 FBrowserSizeHeight := ViewPanel.Height
3830 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3831 FBrowserSizeWidth := ViewPanel.Width;}
3834 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3839 BrowserTab.Tabs.BeginUpdate;
3841 if not BrowserTab.Dragging then begin
3842 FTabHintIndex := -1;
3843 BrowserTab.Hint := '';
3844 idx := BrowserTab.TabIndex;
3845 if idx = -1 then begin
3846 SetContent(BrowserNullTab);
3848 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3849 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3850 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3852 FBrowsers.Move(j ,0);
3854 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3855 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3856 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3857 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3859 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3860 ReleaseOldestBrowser;
3862 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3863 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3864 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3866 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3867 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3868 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3870 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3871 AddressComboBox.Text := GetActiveContent.URL;
3873 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3874 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3877 GikoDM.SetFocusForBrowserAction.Execute;
3881 BrowserTab.Tabs.EndUpdate;
3886 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3887 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3893 if Button = mbMiddle then begin
3894 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3897 p := BrowserTab.ScreenToClient(p);
3898 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3900 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3901 end else if Button = mbLeft then begin
3902 FDragWFirst := true;
3903 FMouseDownPos.X := X;
3904 FMouseDownPos.Y := Y;
3909 procedure TGikoForm.SetBrowserTabState;
3911 CoolBand: TCoolBand;
3913 BrowserBottomPanel.AutoSize := False;
3914 if GikoSys.Setting.BrowserTabVisible then begin
3916 BrowserTab.Tabs.BeginUpdate;
3918 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3919 BrowserTab.Style := tsTabs;
3920 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3921 BrowserTab.TabPosition := tpTop
3923 BrowserTab.TabPosition := tpBottom;
3924 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
3925 BrowserTab.TabPosition := tpTop;
3926 BrowserTab.Style := tsButtons;
3928 BrowserTab.TabPosition := tpTop;
3929 BrowserTab.Style := tsFlatButtons
3932 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
3933 BrowserTab.Parent := BrowserTabToolBar;
3934 BrowserBottomPanel.Hide;
3935 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3936 if CoolBand <> nil then
3937 CoolBand.Visible := True;
3939 BrowserTab.Parent := BrowserBottomPanel;
3940 BrowserTab.Top := 0;
3941 BrowserTab.Left := 0;
3942 BrowserBottomPanel.Show;
3943 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3944 if CoolBand <> nil then
3945 CoolBand.Visible := False;
3948 BrowserTab.Tabs.EndUpdate;
3952 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3953 if CoolBand <> nil then
3954 CoolBand.Visible := False;
3955 BrowserBottomPanel.Visible := False;
3956 GikoDM.AllTabCloseAction.Execute;
3960 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
3961 Y: Integer; State: TDragState; var Accept: Boolean);
3965 idx := BrowserTab.IndexOfTabAt(X, Y);
3966 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
3969 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
3974 FDragWFirst := False;
3975 idx := BrowserTab.IndexOfTabAt(X, Y);
3977 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
3980 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
3981 Shift: TShiftState; X, Y: Integer);
3984 ThreadItem: TThreadItem;
3987 TabIdx := BrowserTab.IndexOfTabAt(x, y);
3989 if ( ssLeft in Shift ) then begin
3990 if (FDragWFirst) then begin
3991 BrowserTab.EndDrag(false);
3992 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
3995 BrowserTab.EndDrag(false);
3996 FDragWFirst := false;
3999 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4000 Application.CancelHint;
4001 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4002 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4003 BrowserTab.Hint := ThreadItem.Title;
4004 Application.ShowHint := True;
4006 BrowserTab.Hint := '';
4007 Application.ShowHint := True;
4009 FTabHintIndex := TabIdx;
4014 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4015 const pDisp: IDispatch; var URL: OleVariant);
4017 FDispHtmlDocument: DispHTMLDocument;
4018 BrowserRecord :TBrowserRecord;
4021 threadItem : TThreadItem;
4023 if TObject(Sender) is TWebBrowser then begin
4024 BrowserRecord := nil;
4025 if TWebBrowser(Sender) <> Browser then begin
4026 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4027 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4028 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4032 if BrowserRecord <> nil then begin
4033 if BrowserRecord.Event <> nil then
4034 BrowserRecord.Event.Free;
4035 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4036 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4037 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4038 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4041 if GetActiveContent <> nil then begin
4042 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4043 if FEvent <> nil then
4045 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4046 FEvent.OnContextMenu := OnDocumentContextMenu;
4047 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4049 if FEvent <> nil then begin
4057 if (BrowserRecord <> nil) and
4058 Assigned( BrowserRecord.Thread ) then begin
4059 threadItem := BrowserRecord.Thread;
4061 if (threadItem.JumpAddress > 0) then begin
4062 if threadItem.UnRead then begin
4063 threadItem.UnRead := False;
4065 RefreshListView(threadItem);
4067 //
\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®
4068 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4069 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4070 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4071 threadItem.JumpAddress := 0;
4073 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4076 end else if threadItem.UnRead then begin
4077 threadItem.UnRead := False;
4079 BrowserRecord.Move('new');
4080 RefreshListView(threadItem);
4081 end else if threadItem.ScrollTop <> 0 then begin
4083 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4084 doc.Body.ScrollTop := threadItem.ScrollTop;
4087 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4092 LockWindowUpdate(0);
4095 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4097 AddRoundNameMenu(RoundNamePopupMenu.Items);
4100 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4106 Item := TMenuItem.Create(Self);
4107 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4108 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4110 Item := TMenuItem.Create(Self);
4111 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4112 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4114 Item := TMenuItem.Create(Self);
4115 Item.Caption := '-';
4117 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4118 Item := TMenuItem.Create(Self);
4119 Item.Caption := RoundList.RoundNameList[i];
4120 Item.OnClick := SetSelectRoundName;
4125 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4127 threadItem : TThreadItem;
4129 if ParentName <> 'dummy1' then begin
4130 SetSelectItemRound(RoundFlag, RoundName);
4132 threadItem := GetActiveContent;
4133 if threadItem <> nil then begin
4134 threadItem.RoundName := RoundName;
4136 RoundList.RoundNameList.Add(RoundName);
4137 threadItem.Round := RoundFlag;
4142 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4147 List := TList.Create;
4149 SelectListItem(List);
4150 for i := 0 to List.Count - 1 do begin
4151 if TObject(List[i]) is TBoard then begin
4152 TBoard(List[i]).RoundName := RoundName;
4154 RoundList.RoundNameList.Add(RoundName);
4155 TBoard(List[i]).Round := RoundFlag;
4156 end else if TObject(List[i]) is TThreadItem then begin
4157 if TThreadItem(List[i]).IsLogFile then begin
4158 TThreadItem(List[i]).RoundName := RoundName;
4160 RoundList.RoundNameList.Add(RoundName);
4161 TThreadItem(List[i]).Round := RoundFlag;
4170 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4172 MenuItem: TMenuItem;
4174 if Sender is TMenuItem then begin
4175 MenuItem := TMenuItem(Sender);
4176 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4181 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4186 if CoolBar = nil then
4188 for i := 0 to CoolBar.Bands.Count - 1 do begin
4189 if CoolBar.Bands[i].Control = Control then begin
4190 Result := CoolBar.Bands[i];
4196 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4198 if BrowserTab.Parent = BrowserTabToolBar then
4199 BrowserTab.Width := BrowserTabToolBar.Width;
4202 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4207 procedure TGikoForm.SetMenuFont;
4209 // GikoSys.MenuFont(MenuToolBar.Font);
4210 // MenuToolBar.Buttons[0].AutoSize := False;
4211 // MenuToolBar.Buttons[0].AutoSize := True;
4212 // MenuToolBar.Font.Color := clMenuText;
4213 GikoSys.MenuFont(MainCoolBar.Font);
4214 MenuToolBar.Buttons[0].AutoSize := False;
4215 MenuToolBar.Buttons[0].AutoSize := True;
4216 MainCoolBar.AutoSize := False;
4217 MainCoolBar.AutoSize := True;
4219 GikoSys.MenuFont(ListCoolBar.Font);
4220 GikoSys.MenuFont(BrowserCoolBar.Font);
4221 // MenuToolBar.Font.Color := clMenuText;
4224 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4228 if FavoriteDM.Modified then begin
4231 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4232 NewMenu := TMenuItem.Create(MainMenu);
4233 NewMenu.Action := GikoDM.FavoriteAddAction;
4234 FavoriteMenu.Add(NewMenu);
4235 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4236 NewMenu := TMenuItem.Create(FavoriteMenu);
4237 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4238 FavoriteMenu.Add(NewMenu);
4239 //
\83Z
\83p
\83\8c\81[
\83^
4240 FavoriteMenu.InsertNewLineAfter(NewMenu);
4241 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4242 FavoriteDM.Modified := false;
4246 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4249 NewMenu: array of TMenuItem;
4251 SetLength(NewMenu, Node.Count);
4252 Node := Node.getFirstChild;
4254 while ( Node <> nil ) do begin
4255 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4256 NewMenu[i].AutoHotkeys := maAutomatic;
4257 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4258 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4260 if TObject(Node.Data) is TFavoriteFolder then begin
4261 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4262 CreateFavMenu(Node, NewMenu[i]);
4263 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4264 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4265 NewMenu[i].OnClick := FavoriteClick;
4266 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4267 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4268 NewMenu[i].OnClick := FavoriteClick;
4271 Node := Node.getNextSibling;
4273 MenuItem.Add(NewMenu);
4276 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4278 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';
4279 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4281 Dlg : TFavoriteAddDialog;
4287 if Item is TFavoriteBoardItem then
4288 Item := TFavoriteBoardItem( Item ).Item
4289 else if Item is TFavoriteThreadItem then
4290 Item := TFavoriteThreadItem( Item ).Item;
4292 Node := FavoriteTreeView.Items.GetFirstNode;
4293 if Item is TBoard then begin
4294 ItemURL := TBoard( Item ).URL;
4295 while Node <> nil do begin
4297 if TObject( Data ) is TFavoriteBoardItem then begin
4298 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4299 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4304 Node := Node.GetNext;
4306 Dlg := TFavoriteAddDialog.Create(Self);
4308 Dlg.SetBoard( TBoard( Item ) );
4313 end else if Item is TThreadItem then begin
4314 ItemURL := TThreadItem( Item ).URL;
4315 while Node <> nil do begin
4317 if TObject( Data ) is TFavoriteThreadItem then begin
4318 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4319 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4324 Node := Node.GetNext;
4326 Dlg := TFavoriteAddDialog.Create(Self);
4328 Dlg.SetThreadItem( TThreadItem( Item ) );
4338 procedure TGikoForm.FavoriteClick(Sender: TObject);
4340 FavoriteClick( Sender, True );
4343 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4346 ThreadItem: TThreadItem;
4347 FavBoard: TFavoriteBoardItem;
4348 FavThread: TFavoriteThreadItem;
4352 if Sender is TFavoriteMenuItem then
4353 Item := TFavoriteMenuItem(Sender).Data
4354 else if Sender is TLinkToolButton then
4355 Item := TLinkToolButton(Sender).Data
4356 else if Sender is TTreeNode then
4357 Item := TTreeNode( Sender ).Data
4361 if TObject(Item) is TFavoriteBoardItem then begin
4362 FavBoard := TFavoriteBoardItem(Item);
4363 Board := FavBoard.Item;
4364 if Board <> nil then begin
4365 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4366 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4367 SelectTreeNode(Board, True);
4369 end else if TObject(Item) is TFavoriteThreadItem then begin
4370 FavThread := TFavoriteThreadItem(Item);
4371 ThreadItem := FavThread.Item;
4372 if ThreadItem = nil then
4375 InsertBrowserTab(ThreadItem, ActiveTab);
4377 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4378 if GikoSys.Setting.ListWidthState = glsMin then begin
4379 GikoDM.BrowserMaxAndFocusAction.Execute;
4382 if GikoSys.Setting.ListHeightState = glsMin then begin
4383 GikoDM.BrowserMaxAndFocusAction.Execute;
4389 procedure TGikoForm.BBSMenuItemOnClick(
4394 if Sender is TBBSMenuItem then
4395 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4399 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4401 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4404 //!
\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é)
4405 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4407 stRes, edRes : Int64;
4408 browserRec : TBrowserRecord;
4409 threadNumber : String;
4414 Thread.JumpAddress := 0;
4415 //
\83^
\83u
\82ð
\90¶
\90¬
4416 browserRec := InsertBrowserTab(Thread);
4417 if (browserRec <> nil) then begin
4418 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4419 threadNumber := ChangeFileExt(Thread.FileName, '');
4420 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4421 //
\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
4422 if (StrToInt64(threadNumber) = stRes) then begin
4423 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4424 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4428 if ( stRes > 0 ) then begin
4429 Thread.JumpAddress := stRes;
4431 //
\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é
4432 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4433 DownloadContent(Thread);
4434 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4435 browserRec.Move(IntToStr(stRes));
4436 Thread.JumpAddress := 0;
4438 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4439 Thread.ScrollTop := doc.Body.ScrollTop;
4446 procedure TGikoForm.MoveToURL(const inURL: string);
4448 protocol, host, path, document, port, bookmark : string;
4449 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4451 BBSID, BBSKey: string;
4452 {tmpBoard,} Board: TBoard;
4453 ThreadItem: TThreadItem;
4456 tmpThread : TThreadItem;
4457 shiftDown : Boolean;
4461 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4462 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4465 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4466 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4467 if shiftDown then begin
4468 GikoSys.OpenBrowser(inURL, gbtUserApp);
4470 end else if ctrlDown then begin
4471 GikoSys.OpenBrowser(inURL, gbtIE);
4475 //=====
\83v
\83\89\83O
\83C
\83\93
4478 bi := Length(BoardGroups) - 1;
4479 for i := 1 to bi do begin
4480 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4481 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4484 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4485 Board := BBSsFindBoardFromURL( boardURL );
4488 if Board = nil then begin
4490 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4491 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4494 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4495 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4496 ShowBBSTree( BBSs[ 1 ] );
4499 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4500 if not Board.IsThreadDatRead then begin
4501 GikoSys.ReadSubjectFile( Board );
4505 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4506 if ThreadItem = nil then begin
4507 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4508 ThreadItem := tmpThread;
4509 Board.Insert( 0, ThreadItem );
4510 if ActiveList is TBoard then begin
4511 if TBoard(ActiveList) = Board then
4512 ListView.Items.Count := ListView.Items.Count + 1;
4517 OpenThreadItem(ThreadItem, inURL);
4524 Board := BBSsFindBoardFromURL(
4525 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4527 if Board <> nil then begin
4528 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4529 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4530 SelectTreeNode( Board, True );
4538 // 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¢
4542 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4543 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4544 Board := BBSsFindBoardFromURL( boardURL );
4545 if Board = nil then begin
4546 //
\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
4547 GikoSys.OpenBrowser(inURL, gbtUserApp);
4550 //
\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é
4552 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4553 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4554 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4555 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4556 GikoSys.OpenBrowser(inURL, gbtUserApp);
4561 if not Board.IsThreadDatRead then
4562 GikoSys.ReadSubjectFile(Board);
4563 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4564 ThreadItem := Board.FindThreadFromURL( URL );
4565 //
\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)
4566 if ThreadItem = nil then begin
4567 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4570 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4571 if ThreadItem = nil then begin
4572 ThreadItem := TThreadItem.Create( nil, Board, URL );
4573 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4574 Board.Insert(0, ThreadItem);
4575 if ActiveList is TBoard then begin
4576 if TBoard(ActiveList) = Board then
4577 ListView.Items.Count := ListView.Items.Count + 1;
4580 //
\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é
4581 if (not ThreadItem.IsLogFile) then begin
4582 if AnsiPos(Host, Board.URL) = 0 then
4583 ThreadItem.DownloadHost := Host
4585 ThreadItem.DownloadHost := '';
4587 OpenThreadItem(ThreadItem, inURL);
4591 Board := BBSsFindBoardFromURL( inURL );
4592 if Board = nil then begin
4593 GikoSys.OpenBrowser(inURL, gbtAuto);
4595 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4596 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4597 SelectTreeNode( Board, True );
4602 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4604 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4605 CoolBarResized( Sender, MainCoolBar );
4608 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4609 Shift: TShiftState);
4611 if Key = VK_RETURN then
4612 GikoDM.MoveToAction.Execute;
4615 procedure TGikoForm.BrowserEnter(Sender: TObject);
4617 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4620 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4622 CDS:PCopyDataStruct;
4626 CDS := Message.CopyDataStruct;
4627 GetMem(PC, CDS^.cbData);
4629 lstrcpy(PC,CDS^.lpData);
4630 SetString(sURL, PC,lstrlen(PC));
4635 Message.Result := 1;
4638 procedure TGikoForm.WndProc(var Message: TMessage);
4640 senderBrowser : TWebBrowser;
4646 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4649 if Message.WParam = SC_MINIMIZE then begin
4651 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4654 TreeClick( TreeView.Selected );
4659 if (GikoSys.Setting.StoredTaskTray) then begin
4666 USER_DOCUMENTCOMPLETE:
4667 if (Message.WParam <> 0) and
4668 (TObject(Message.WParam) is TWebBrowser) then begin
4669 senderBrowser := TWebBrowser( Message.WParam );
4670 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4679 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4684 //
\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Í
4685 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4686 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4687 if Msg.CharCode in [VK_BACK] then begin
4688 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4689 if Msg.KeyData > 0 then begin
4692 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4696 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4697 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4700 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4703 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4704 if Msg.CharCode in [VK_BACK] then begin
4705 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4706 if Msg.KeyData > 0 then begin
4709 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4712 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4715 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4719 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4723 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4728 PreviewTimer.Enabled := False;
4732 ARect := FPreviewBrowser.GetWindowRect(p);
4734 FPreviewBrowser.PreviewImage(FPreviewURL);
4736 if ARect.Bottom > Screen.DesktopHeight then begin
4737 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4739 if (ARect.Right > Screen.DesktopWidth) then begin
4740 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4742 if (ARect.Left < Screen.DesktopLeft) then begin
4743 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4745 if (ARect.Top < Screen.DesktopTop) then begin
4746 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4749 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4750 ARect.Left, ARect.Top,
4751 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4752 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4754 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4755 FPreviewBrowserRect := ARect;
4758 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4763 if PreviewTimer.Enabled then
4764 PreviewTimer.Enabled := False;
4765 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4766 FHint.ReleaseHandle;
4770 if (FPreviewBrowser <> nil)
4771 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4772 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4773 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4774 Pos := Mouse.CursorPos;
4775 Pos.X := Pos.X + Left;
4776 Pos.Y := Pos.Y + Top;
4777 if (FPreviewBrowserRect.Left > Pos.X) or
4778 (FPreviewBrowserRect.Right < Pos.X) or
4779 (FPreviewBrowserRect.Top > Pos.Y) or
4780 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4781 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4785 Message.Result := 1;
4788 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4790 GikoDM.MsgBarCloseAction.Execute;
4793 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4795 Doc: IHtmlDocument2;
4796 Range: IHTMLTxtRange;
4799 ThreadItem: TThreadItem;
4802 FactiveContent.IDAnchorPopup('');
4803 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4804 if Assigned(Doc) then begin
4805 Range := Doc.selection.createRange as IHTMLTxtRange;
4806 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4807 s := ZenToHan(Trim(s));
4808 if GikoSys.IsNumeric(s) then begin
4810 ThreadItem := GetActiveContent;
4811 if ThreadItem <> nil then begin
4812 Num := StrToInt64(s);
4813 FHint.PopupType := gptThread;
4814 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
4815 if FHint.ResCount <> 0 then
4826 procedure TGikoForm.ShowTextPopup;
4831 // if Trim(s) = '' then
4834 FHint.Font.Name := GikoSys.Setting.HintFontName;
4835 FHint.Font.Size := GikoSys.Setting.HintFontSize;
4836 FHint.Font.Color := GikoSys.Setting.HintFontColor;
4837 FHint.Color := GikoSys.Setting.HintBackColor;
4838 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
4840 if FHint.PopupType = gptRaw then
4841 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
4843 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
4844 case GikoSys.Setting.PopupPosition of
4845 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4846 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4847 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4848 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4849 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4850 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4851 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4852 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4853 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Ó
4855 //FHint.ActivateHint(ARect, s);
4856 if FHint.PopupType = gptRaw then
4857 FHint.ActivateHint(ARect, FHint.Caption)
4859 FHint.ActivateHint(ARect, '');
4861 FHint.ReleaseHandle;
4866 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4868 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4869 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4871 if FTreeType = gttHistory then begin
4872 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4873 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4876 TreeView.Items.Clear;
4880 procedure TGikoForm.SetLinkBar;
4884 ToolButton: TLinkToolButton;
4885 MenuItem: TMenuItem;
4886 oldIgnoreResize : TResizeType;
4888 oldIgnoreResize := FIsIgnoreResize;
4889 FIsIgnoreResize := rtResizing;
4890 MainCoolBar.Bands.BeginUpdate;
4892 LinkBarPopupMenu.Items.Clear;
4893 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4894 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4895 LinkToolBar.Buttons[i].Free;
4896 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4897 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4898 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4899 ToolButton := TLinkToolButton.Create(LinkToolBar);
4900 // ToolButton.Parent := LinkToolBar;
4901 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4902 MenuItem := TMenuItem.Create(Self);
4903 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4904 LinkBarPopupMenu.Items.Add(MenuItem);
4905 ToolButton.MenuItem := MenuItem;
4906 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4907 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4908 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4909 ToolButton.OnClick := FavoriteClick;
4910 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4911 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4912 ToolButton.OnClick := FavoriteClick;
4914 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4915 ToolButton.Left := 10000;
4916 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4917 ToolButton.AutoSize := True;
4918 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4919 ToolButton.OnDragOver := FavoriteDragOver;
4920 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4921 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4922 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4923 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4924 //ToolButton.DragMode := dmAutomatic;
4925 ToolButton.DragMode := dmManual;
4926 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4928 LinkToolBar.InsertControl(ToolButton);
4933 { if LinkToolBar.ButtonCount = 0 then begin
4934 ToolButton := TLinkToolButton.Create(LinkToolBar);
4935 ToolButton.Style := tbsButton;
4936 ToolButton.ImageIndex := -1;
4937 ToolButton.Caption := '';
4938 LinkToolBar.InsertControl(ToolButton);
4941 MainCoolBar.Bands.EndUpdate;
4942 LoadCoolBarSettings;
4943 FIsIgnoreResize := oldIgnoreResize;
4947 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4955 if Sender = FavoriteTreeView then begin
4956 Node := FavoriteTreeView.GetNodeAt(X, Y);
4961 bound := Node.DisplayRect( False );
4962 height := bound.Bottom - bound.Top;
4963 if (bound.Top + height / 2) <= Y then
4964 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
4969 if Node.IsFirstNode then
4974 if FDropSpaceNode <> nil then
4975 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
4978 if Change then begin
4979 if FDropSpaceNode <> nil then
4980 FDropSpaceNode.Free;
4982 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
4983 FDropSpaceNode.MoveTo( Node, naInsert );
4984 FDropSpaceNode.ImageIndex := -1;
4985 FDropSpaceNode.SelectedIndex := -1;
4989 if Source = FavoriteTreeView then begin
4990 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
4995 end else if Source = BrowserTab then
4997 else if Source = ListView then
4999 else if Source is TLinkToolButton then
5001 else if Source = TreeView then
5007 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5010 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5013 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5015 // FDragging := true;
5018 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5020 SenderNode: TTreeNode;
5021 LinkToolButton: TLinkToolButton;
5024 LinkToolButton := TLinkToolButton( Sender );
5025 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5026 SenderNode.Selected := False;
5027 FavoriteDragDrop( SenderNode, Source );
5033 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5035 favButton : TLinkToolButton;
5036 favThreadItem : TFavoriteThreadItem;
5042 if Sender is TLinkToolButton then begin
5043 favButton := TLinkToolButton( Sender );
5044 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5045 favThreadItem := TFavoriteThreadItem( favButton.Data );
5046 if favThreadItem.Item <> nil then
5047 InsertBrowserTab( favThreadItem.Item, False );
5055 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5059 TToolButton( Sender ).DragMode := dmManual;
5060 if ssLeft in Shift then begin
5061 // 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)
5062 if FDragTime = 0 then begin
5063 FDragTime := GetTickCount();
5065 Now := GetTickCount();
5066 if (Now - FDragTime) > 500 then begin
5067 if FDragButton <> TToolButton( Sender ) then begin
5069 FDragButton := TToolButton( Sender );
5070 TToolButton(Sender).BeginDrag(false ,5);
5073 {$IF Defined(debug)}
5074 ShowMessage('Error');
5085 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5090 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5095 for i := 0 to ToolBar.ButtonCount - 1 do
5096 if ToolBar.Buttons[i].Visible then
5097 Result := Result + ToolBar.Buttons[i].Width;
5100 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5102 Control : TWinControl;
5105 Control := FindControl(BandInfo^.hwndChild);
5106 if Control = nil then
5109 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5110 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5111 idx := MainCoolBar.Bands[ i ].ID;
5115 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5116 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5117 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5118 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5119 BandInfo^.cxMinChild := 0;
5120 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5121 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5122 end else if Control = LinkToolBar then begin
5123 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5124 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5125 BandInfo^.cxMinChild := 0;
5126 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5127 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5128 end else begin // AddressToolBar
5129 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5130 BandInfo^.cxMinChild := 0;
5131 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5135 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5141 ChevronPopupMenu.Items.Clear;
5143 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5144 if MainCoolBar.Bands[ i ].Visible then begin
5145 if Idx = Int64(RebarChevron^.uBand) then begin
5152 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5153 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5155 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5156 ToolBarChevronMenu(StdToolBar);
5157 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5161 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5162 ChevronPopupMenu.Popup(p.x, p.y);
5166 procedure TGikoForm.MenuBarChevronMenu;
5167 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5173 for i := 0 to MenuItem.Count - 1 do begin
5175 if MenuItem[i] is TFavoriteMenuItem then begin
5176 Item := TFavoriteMenuItem.Create(Self);
5177 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5179 Item := TMenuItem.Create(Self);
5180 Item.Caption := MenuItem[i].Caption;
5181 Item.Action := MenuItem[i].Action;
5182 Item.ImageIndex := MenuItem[i].ImageIndex;
5183 Item.OnClick := MenuItem[i].OnClick;
5184 PopupItem.Add(Item);
5185 if MenuItem[i].Count > 0 then
5186 SetSubMenu(MenuItem[i], Item);
5195 ChevronPopupMenu.Items.Clear;
5196 ChevronPopupMenu.Images := MainMenu.Images;
5197 bw := GetWidthAllToolButton(MenuToolBar);
5198 if MenuToolBar.Width < bw then begin
5200 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5201 w := w + MenuToolBar.Buttons[i].Width;
5202 if MenuToolBar.Width <= w then begin
5203 Item := TMenuItem.Create(Self);
5204 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5205 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5206 ChevronPopupMenu.Items.Add(Item);
5207 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5213 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5214 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5219 if Assigned(PopupMenu.OnPopup) then
5220 PopupMenu.OnPopup(nil);
5221 for i := 0 to PopupMenu.Items.Count - 1 do begin
5223 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5224 Item := TFavoriteMenuItem.Create(Self);
5225 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5227 Item := TMenuItem.Create(Self);
5228 Item.Caption := PopupMenu.Items[i].Caption;
5229 Item.Action := PopupMenu.Items[i].Action;
5230 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5231 Item.OnClick := PopupMenu.Items[i].OnClick;
5232 PopupItem.Add(Item);
5241 ChevronPopupMenu.Items.Clear;
5242 ChevronPopupMenu.Images := ToolBar.HotImages;
5243 bw := GetWidthAllToolButton(ToolBar);
5244 if ToolBar.Width < bw then begin
5246 for i := 0 to ToolBar.ButtonCount - 1 do begin
5247 if ToolBar.Buttons[i].Visible then
5248 w := w + ToolBar.Buttons[i].Width;
5249 if ToolBar.Width <= w then begin
5250 if ToolBar.Buttons[i].Tag = 0 then begin
5251 Item := TMenuItem.Create(Self);
5252 if ToolBar.Buttons[i].Style = tbsSeparator then
5255 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5256 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5259 Item.Caption := ToolBar.Buttons[i].Caption;
5260 Item.Action := ToolBar.Buttons[i].Action;
5262 //Item.Visible := True;
5264 ChevronPopupMenu.Items.Add(Item);
5265 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5267 Item.OnClick := nil;
5268 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5276 procedure TGikoForm.LinkBarChevronMenu;
5281 Item: TFavoriteMenuItem;
5283 Button: TLinkToolButton;
5285 ChevronPopupMenu.Items.Clear;
5286 ChevronPopupMenu.Images := LinkToolBar.Images;
5287 bw := GetWidthAllToolButton(LinkToolBar);
5288 if LinkToolBar.Width < bw then begin
5290 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5291 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5292 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5293 w := w + LinkToolBar.Buttons[j].Width;
5294 if LinkToolBar.Width <= w then begin
5295 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5296 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5297 Item := TFavoriteMenuItem.Create(Self);
5298 if TObject(Button.Data) is TFavoriteFolder then begin
5299 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5300 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5301 Item.OnClick := FavoriteClick;
5302 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5303 Item.OnClick := FavoriteClick;
5305 Item.Data := Button.Data;
5306 Item.Caption := LinkToolBar.Buttons[j].Caption;
5307 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5308 ChevronPopupMenu.Items.Add(Item);
5319 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5320 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5321 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5323 \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É
5324 \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
5326 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5328 bandInfo : tagREBARBANDINFOA;
5329 pBandInfo : PReBarBandInfoA;
5336 pBandInfo := @bandInfo;
5337 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5338 bandInfo.cbSize := sizeof( bandInfo );
5339 bandInfo.hwndChild := h;
5340 bandInfo.cyMinChild := bar.Height;
5341 bar.OnBandInfo( nil, pBandInfo );
5342 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5344 for i := bar.Bands.Count - 1 downto 0 do begin
5345 if bar.Bands[ i ].Control.Handle = h then begin
5351 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5355 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5357 Control: TWinControl;
5360 Control := FindControl(BandInfo^.hwndChild);
5361 if Control = nil then
5364 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5365 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5366 idx := ListCoolBar.Bands[ i ].ID;
5370 if Control = ListToolBar then begin
5371 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5372 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5373 BandInfo^.cxMinChild := 0;
5374 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5375 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5377 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5378 BandInfo^.cxMinChild := 0;
5379 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5383 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5388 ChevronPopupMenu.Items.Clear;
5389 Idx := RebarChevron^.uBand;
5390 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5391 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5392 ToolBarChevronMenu(ListToolBar);
5395 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5396 ChevronPopupMenu.Popup(p.x, p.y);
5400 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5402 Control: TWinControl;
5405 Control := FindControl(BandInfo^.hwndChild);
5406 if Control = nil then
5409 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5410 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5411 idx := BrowserCoolBar.Bands[ i ].ID;
5415 if Control = BrowserToolBar then begin
5416 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5417 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5418 BandInfo^.cxMinChild := 0;
5419 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5420 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5422 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5423 BandInfo^.cxMinChild := 0;
5424 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5428 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5433 ChevronPopupMenu.Items.Clear;
5434 Idx := RebarChevron^.uBand;
5435 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5436 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5437 ToolBarChevronMenu(BrowserToolBar)
5440 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5441 ChevronPopupMenu.Popup(p.x, p.y);
5445 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5447 if Column^.iImage = -1 then begin
5448 Column^.mask := Column^.mask or LVCF_FMT;
5450 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5451 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5455 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5460 for i := bar.ButtonCount - 1 downto 0 do begin
5461 if bar.Buttons[ i ].Action = action then begin
5462 Result := bar.Buttons[ i ];
5468 procedure TGikoForm.SetToolBarPopup;
5471 aIEButton : TToolButton;
5472 aCabinetBBSButton : TToolButton;
5473 aResRangeButton : TToolButton;
5474 aThreadRangeButton: TToolButton;
5476 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5478 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5479 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5480 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5481 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5482 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5484 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5485 if aIEButton <> nil then
5486 aIEButton.DropdownMenu := BrowserPopupMenu;
5487 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5488 if aCabinetBBSButton <> nil then
5489 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5490 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5491 if aResRangeButton <> nil then
5492 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5493 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5494 if aThreadRangeButton <> nil then
5495 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5498 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5499 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5503 // browserPos : TPoint;
5507 Wnd := WindowFromPoint(Mouse.CursorPos);
5509 if WheelDelta > 0 then
5514 if (Wnd = BrowserTab.Handle) or
5515 (Wnd = BrowserTab.Parent.Handle) then begin
5516 BrowserTab.ScrollTabs(Delta);
5518 if FIsHandledWheel then begin
5519 FIsHandledWheel := False;
5522 FIsHandledWheel := True;
5523 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5524 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5526 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5534 procedure TGikoForm.SetSelectWord( const text : string );
5536 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5537 ClearThreadRengeAction;
5539 if Length( text ) = 0 then
5541 GikoDM.AllItemAction.Checked := True;
5542 SetListViewType( gvtAll )
5544 SetListViewType( gvtUser, text, false );
5548 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5551 SetSelectWord( SelectComboBox.Text );
5555 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5556 Shift: TShiftState);
5564 if Key = VK_Return then
5567 end else if Key = 229 then begin
5568 if GikoSys.Setting.UseUndecided then begin
5569 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5570 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5571 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5572 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5573 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5574 SetLength(Str, Len);
5575 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5576 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5577 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5579 Str := SelectComboBox.Text + Str;
5581 if (Length(Str) > 0) then begin
5585 end else if Length( SelectComboBox.Text ) = 0 then
5587 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5588 *
\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
5589 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5592 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5593 ClearThreadRengeAction;
5597 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5598 procedure TGikoForm.ClearThreadRengeAction;
5600 //
\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é
5601 if GikoDM.AllItemAction.Checked then
5602 GikoDM.AllItemAction.Checked := False;
5603 if GikoDM.LogItemAction.Checked then
5604 GikoDM.LogItemAction.Checked := False;
5605 if GikoDM.NewItemAction.Checked then
5606 GikoDM.NewItemaction.Checked := False;
5607 if GikoDM.LiveItemAction.Checked then
5608 GikoDM.LiveItemAction.Checked := False;
5609 if GikoDM.ArchiveItemAction.Checked then
5610 GikoDM.ArchiveItemAction.Checked := False;
5614 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5619 if Length( SelectComboBox.Text ) = 0 then
5621 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5622 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5627 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5628 procedure TGikoForm.ModifySelectList;
5635 if not SelectComboBoxPanel.Visible then
5638 if Length( SelectComboBox.Text ) > 0 then
5640 oldText := SelectComboBox.Text;
5641 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5643 GikoSys.Setting.SelectTextList.Delete( idx );
5644 idx := SelectComboBox.Items.IndexOf( oldText );
5646 SelectComboBox.Items.Delete( idx );
5647 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5648 SelectComboBox.Items.Insert( 0, oldText );
5649 SelectComboBox.Text := oldText;
5657 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5658 Shift: TShiftState; X, Y: Integer);
5663 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5666 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5667 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5668 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5670 If w <= 50 Then Begin
5671 //
\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
5672 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5673 pos.X := pos.X + (50 - w);
5675 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5679 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5680 //If SelectComboBox.Width <> w Then Begin
5681 If SelectComboBoxPanel.Width <> w Then Begin
5682 SelectComboBoxPanel.Width := w;
5683 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5684 GikoSys.Setting.SelectComboBoxWidth := w;
5685 DraggingSelectComboBoxPosition := pos;
5687 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5688 ResetBandInfo( ListCoolBar, ListToolBar );
5694 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5695 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5699 IsDraggingSelectComboBox := True;
5702 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5706 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5707 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5709 IsDraggingSelectComboBox := False;
5713 procedure TGikoForm.StatusBarResize(Sender: TObject);
5715 StatusBar.Panels[1].Width := StatusBar.Width -
5716 StatusBar.Panels[0].Width -
5717 StatusBar.Panels[THREADSIZE_PANEL].Width -
5718 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5720 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5723 if (Length( SelectComboBox.Text ) = 0) or
5724 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5726 SelectComboBox.Text := '';
5727 SelectComboBox.Color := clWindow;
5732 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5735 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5738 if TObject(SenderNode.Data) is TFavoriteFolder then
5739 SourceNode.MoveTo(SenderNode, naAddChild)
5741 SourceNode.MoveTo(SenderNode, naInsert);
5745 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5749 FavoBoardItem: TFavoriteBoardItem;
5750 FavoThreadItem: TFavoriteThreadItem;
5752 ThreadItem: TThreadItem;
5755 if (SenderNode = nil) or (Source = nil) then
5758 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5759 FavNode := SenderNode.Parent
5761 FavNode := SenderNode;
5765 if Source is TBoard then begin
5766 Board := TBoard( Source );
5767 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5768 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5769 Node.ImageIndex := 15;
5770 Node.SelectedIndex := 15;
5771 end else if Source is TFavoriteBoardItem then begin
5772 FavoBoardItem := TFavoriteBoardItem( Source );
5773 Board := FavoBoardItem.Item;
5774 if Board <> nil then
5775 if not Board.IsThreadDatRead then
5776 GikoSys.ReadSubjectFile(Board);
5777 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5778 Node.ImageIndex := 15;
5779 Node.SelectedIndex := 15;
5780 end else if Source is TThreadItem then begin
5781 ThreadItem := TThreadItem( Source );
5782 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5783 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5784 Node.ImageIndex := 16;
5785 Node.SelectedIndex := 16;
5786 end else if Source is TBrowserRecord then begin
5787 ThreadItem := TBrowserRecord( Source ).Thread;
5788 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5789 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5790 Node.ImageIndex := 16;
5791 Node.SelectedIndex := 16;
5792 end else if Source is TFavoriteThreadItem then begin
5793 FavoThreadItem := TFavoriteThreadItem( Source );
5794 ThreadItem := FavoThreadItem.Item;
5795 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5796 Node.ImageIndex := 16;
5797 Node.SelectedIndex := 16;
5800 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5802 FavoriteMoveTo( SenderNode, Node );
5806 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5809 SourceNode: TTreeNode;
5810 LinkToolButton: TLinkToolButton;
5813 if SenderNode = nil then
5816 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5817 if FDropSpaceNode <> nil then
5818 SenderNode := FDropSpaceNode;
5820 if Source = FavoriteTreeView then begin
5821 SourceNode := FavoriteTreeView.Selected;
5822 FavoriteMoveTo( SenderNode, SourceNode );
5823 end else if Source is TLinkToolButton then begin
5824 LinkToolButton := TLinkToolButton( Source );
5825 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5826 FavoriteMoveTo( SenderNode, SourceNode );
5827 end else if Source = BrowserTab then begin
5828 idx := BrowserTab.TabIndex;
5829 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5830 end else if Source = ListView then begin
5831 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5832 end else if Source = TreeView then begin
5833 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5837 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5840 SenderNode: TTreeNode;
5843 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5844 if SenderNode <> nil then begin
5845 FavoriteDragDrop( SenderNode, Source );
5848 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5849 if FDropSpaceNode <> nil then begin
5851 FDropSpaceNode.Delete;
5853 FDropSpaceNode := nil;
5856 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5857 FavoriteDM.Modified := true;
5863 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5864 Node: TTreeNode; var S: String);
5866 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5867 FavoriteDM.Modified := true;
5869 FavoriteTreeView.ReadOnly := True;
5874 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5875 Shift: TShiftState);
5877 if not TTreeView(Sender).IsEditing then begin
5881 FClickNode := FavoriteTreeView.Selected;
5882 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5886 FClickNode := FavoriteTreeView.Selected;
5887 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5891 FavoriteClick( FavoriteTreeView.Selected );
5892 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5896 FClickNode := FavoriteTreeView.Selected;
5897 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5901 //
\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·
5902 if Key = VK_ESCAPE then begin
5903 if (TTreeView(Sender).Selected <> nil) then begin
5904 TTreeView(Sender).Selected.Text := FOrigenCaption;
5906 TTreeView(Sender).Selected.Focused := False;
5912 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5915 LinkToolButton: TLinkToolButton;
5918 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5920 FClickNode := FavoriteTreeView.Selected;
5922 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5924 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5925 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5926 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5927 FClickNode := FavoriteTreeView.Items[i];
5931 for i := 0 to FClickNode.Count - 1 do begin
5932 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5933 FClickNode := FClickNode.Item[i];
5940 if FClickNode = nil then begin
5941 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5942 FavoriteTreeDeletePopupMenu.Visible := False;
5943 FavoriteTreeRenamePopupMenu.Visible := False;
5944 FavoriteTreeNewFolderPopupMenu.Visible := False;
5945 FavoriteTreeURLCopyPopupMenu.Visible := False;
5946 FavoriteTreeNameCopyPopupMenu.Visible := False;
5947 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5948 FavoriteTreeReloadPopupMenu.Visible := False;
5949 FavoriteTreeLogDeletePopupMenu.Visible := False;
5950 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5951 end else if FClickNode.IsFirstNode then begin
5952 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5953 FavoriteTreeDeletePopupMenu.Visible := False;
5954 FavoriteTreeRenamePopupMenu.Visible := False;
5955 FavoriteTreeNewFolderPopupMenu.Visible := True;
5956 FavoriteTreeURLCopyPopupMenu.Visible := False;
5957 FavoriteTreeNameCopyPopupMenu.Visible := False;
5958 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5959 FavoriteTreeReloadPopupMenu.Visible := False;
5960 FavoriteTreeLogDeletePopupMenu.Visible := False;
5961 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5962 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
5963 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5964 FavoriteTreeDeletePopupMenu.Visible := True;
5965 FavoriteTreeRenamePopupMenu.Visible := False;
5966 FavoriteTreeNewFolderPopupMenu.Visible := True;
5967 FavoriteTreeURLCopyPopupMenu.Visible := False;
5968 FavoriteTreeNameCopyPopupMenu.Visible := False;
5969 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5970 FavoriteTreeReloadPopupMenu.Visible := False;
5971 FavoriteTreeLogDeletePopupMenu.Visible := False;
5972 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5973 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
5974 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5975 FavoriteTreeDeletePopupMenu.Visible := True;
5976 FavoriteTreeRenamePopupMenu.Visible := True;
5977 FavoriteTreeNewFolderPopupMenu.Visible := True;
5978 FavoriteTreeURLCopyPopupMenu.Visible := False;
5979 FavoriteTreeNameCopyPopupMenu.Visible := True;
5980 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5981 FavoriteTreeReloadPopupMenu.Visible := False;
5982 FavoriteTreeLogDeletePopupMenu.Visible := False;
5983 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5984 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
5985 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5986 FavoriteTreeDeletePopupMenu.Visible := True;
5987 FavoriteTreeRenamePopupMenu.Visible := True;
5988 FavoriteTreeNewFolderPopupMenu.Visible := True;
5989 FavoriteTreeURLCopyPopupMenu.Visible := True;
5990 FavoriteTreeNameCopyPopupMenu.Visible := True;
5991 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5992 FavoriteTreeReloadPopupMenu.Visible := True;
5993 FavoriteTreeLogDeletePopupMenu.Visible := True;
5994 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5995 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
5996 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5997 FavoriteTreeDeletePopupMenu.Visible := True;
5998 FavoriteTreeRenamePopupMenu.Visible := True;
5999 FavoriteTreeNewFolderPopupMenu.Visible := True;
6000 FavoriteTreeURLCopyPopupMenu.Visible := True;
6001 FavoriteTreeNameCopyPopupMenu.Visible := True;
6002 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6003 FavoriteTreeReloadPopupMenu.Visible := True;
6004 FavoriteTreeLogDeletePopupMenu.Visible := False;
6005 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6007 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6008 FavoriteTreeDeletePopupMenu.Visible := False;
6009 FavoriteTreeRenamePopupMenu.Visible := False;
6010 FavoriteTreeNewFolderPopupMenu.Visible := False;
6011 FavoriteTreeURLCopyPopupMenu.Visible := False;
6012 FavoriteTreeNameCopyPopupMenu.Visible := False;
6013 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6014 FavoriteTreeReloadPopupMenu.Visible := False;
6015 FavoriteTreeLogDeletePopupMenu.Visible := False;
6016 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6021 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6026 if not (TObject(node.Data) is TFavoriteFolder) then
6029 for i := 0 to node.Count - 1 do
6031 if TObject(node.Item[i].Data) is TFavoriteFolder then
6032 FavoriteBrowseFolder( node.Item[i] )
6033 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6034 FavoriteClick( node.Item[i], False );
6038 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6044 for i := 0 to Node.Count - 1 do begin
6045 if Node.Item[i].Data = FindPointer then begin
6046 Result := Node.Item[i];
6048 end else if Node.Item[i].Count > 0 then begin
6049 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6050 if Found <> nil then begin
6061 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6065 SenderNode: TTreeNode;
6069 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6070 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6071 SenderNode := FavoriteTreeView.Items[i];
6075 SenderNode.Selected := False;
6077 FavoriteDragDrop( SenderNode, Source );
6082 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6083 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6085 if FDragWFirst = true then
6086 FDragWFirst := false;
6088 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6089 if GikoSys.Setting.ListWidthState = glsMin then begin
6090 GikoDM.BrowserMaxAndFocusAction.Execute;
6093 if GikoSys.Setting.ListHeightState = glsMin then begin
6094 GikoDM.BrowserMaxAndFocusAction.Execute;
6099 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6100 Y: Integer; State: TDragState; var Accept: Boolean);
6103 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6107 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6111 if FDropSpaceNode <> nil then begin
6113 FDropSpaceNode.Delete;
6115 FDropSpaceNode := nil;
6117 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6118 FavoriteDM.Modified := true;
6124 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6126 if FListViewBackGroundColor <> value then begin
6127 FListViewBackGroundColor := value;
6128 ListView.Color := FListViewBackGroundColor;
6131 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6133 threadItem : TThreadItem;
6137 if FClickNode = nil then Exit;
6139 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6141 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6142 if threadItem = nil then
6144 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6146 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6148 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6149 if boardItem = nil then
6151 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6157 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6158 MousePos: TPoint; var Handled: Boolean);
6162 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6163 if BrowserTab.TabIndex <> idx then begin
6164 BrowserTab.TabIndex := idx;
6165 BrowserTab.OnChange(nil);
6169 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6171 ThreadItem: TThreadItem;
6177 boardPlugIn : TBoardPlugIn;
6179 if Number = 0 then Exit;
6180 ThreadItem := GetActiveContent;
6182 if ThreadItem <> nil then begin
6183 //if ThreadItem.IsBoardPlugInAvailable then begin
6184 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6185 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6186 //boardPlugIn := ThreadItem.BoardPlugIn;
6187 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6189 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6190 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6191 //
\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
6192 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6194 FileName := ThreadItem.FilePath;
6195 tmp := GikoSys.ReadThreadFile(FileName, Number);
6197 if tmp <> '' then begin
6198 THTMLCreate.DivideStrLine(tmp, @Res);
6200 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6201 if ReplaceTag then begin
6202 Header := CustomStringReplace(Header, '</b>', '',true);
6203 Header := CustomStringReplace(Header, '<b>', '',true);
6204 Header := CustomStringReplace(Header, '<br>', '',true);
6205 Header := DeleteFontTag(Header);
6207 //if ThreadItem.IsBoardPlugInAvailable then begin
6208 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6209 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6210 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6212 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6213 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6214 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6215 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6218 Body := CustomStringReplace(Body, '</a>', '',true);
6220 Body := HTMLCreater.DeleteLink(Body);
6221 if ReplaceTag then begin
6222 Body := CustomStringReplace(Body, '<', '<');
6223 Body := CustomStringReplace(Body, '>', '>');
6224 Body := CustomStringReplace(Body, '"', '"');
6225 Body := CustomStringReplace(Body, '&', '&');
6226 //Body := CustomStringReplace(Body, ' ', ' ');
6229 Header := Header + Body;
6231 Clipboard.SetTextBuf( PChar(Header) );
6237 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6239 AddRoundNameMenu(dummy1);
6240 AddMenuSameBoardThread;
6242 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
6243 procedure TGikoForm.AddMenuSameBoardThread;
6248 SameBoardThreadItem.Clear;
6249 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6250 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6251 if (FActiveContent.Thread.ParentBoard =
6252 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6253 //
\8e©
\95ª
\82Í
\8aO
\82·
6254 if FActiveContent.Thread <>
6255 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6256 Item := TMenuItem.Create(Self);
6257 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6258 Item.OnClick := SameBoardThreadSubItemOnClick;
6259 SameBoardThreadItem.Add(Item);
6263 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6264 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6266 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6267 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6270 MenuItem: TMenuItem;
6272 if Sender is TMenuItem then begin
6275 MenuItem := TMenuItem(Sender);
6276 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6277 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6278 if (FActiveContent.Thread.ParentBoard =
6279 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6280 if FActiveContent.Thread <>
6281 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6282 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6283 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6295 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6297 FavoriteDM.URLReplace(oldURLs, newURLs);
6300 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6302 RoundList.URLReplace(oldURLs, newURLs);
6305 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6307 Filename = 'tab.sav';
6308 bFilename = '~tab.sav';
6314 oldBoardName: string;
6316 newBoardName: string;
6317 TabList: TStringList;
6320 if oldURLs.Count <> newURLs.Count then begin
6323 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6324 TabList := TStringList.Create;
6326 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6328 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6329 //
\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
6330 for i := 0 to oldURLs.Count - 1 do begin
6331 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6332 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6333 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6334 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6335 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6336 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6338 for j := 0 to TabList.Count - 1 do begin
6339 tempString := TabList[j];
6340 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6341 tempString := StringReplace(tempString, oldHost, newHost,[]);
6342 TabList[j] := tempString;
6346 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6348 if FileExists( GikoSys.GetAppDir + Filename) then begin
6349 if FileExists( GikoSys.GetAppDir + bFilename) then
6350 DeleteFile(GikoSys.GetAppDir + bFilename);
6352 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6353 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6356 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6364 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6365 procedure TGikoForm.OnMinimize;
6367 if FActiveContent <> nil then begin
6368 FIsMinimize := mtMinimizing;
6369 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6373 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6374 procedure TGikoForm.OnMinimized;
6376 FIsMinimize := mtMinimized;
6380 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6382 CoolBarResized( Sender, BrowserCoolBar );
6385 // *************************************************************************
6386 // ExternalBoardPlugInMain
6387 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6388 // *************************************************************************
6389 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6392 boardPlugIn : TBoardPlugIn;
6395 if not (Sender is TMenuItem) then
6398 item := TMenuItem( Sender );
6399 if not Assigned( Pointer( item.Tag ) ) then
6402 //
\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·
6403 boardPlugIn := TBoardPlugIn( item.Tag );
6404 boardPlugIn.PlugInMenu( item.Handle );
6407 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6408 procedure TGikoForm.TreeClick( Node : TTreeNode );
6414 if FTreeType = gttHistory then begin
6416 if TObject( Node.Data ) is TFavoriteThreadItem then
6417 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6418 FavoriteClick( Node );
6421 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6422 if ActiveList = Node.Data then
6425 ActiveListColumnSave;
6427 if TObject(Node.Data) is TBBS then begin
6428 SetActiveList(Node.data);
6429 end else if TObject(Node.Data) is TCategory then begin
6430 SetActiveList(Node.data);
6431 end else if TObject(Node.Data) is TBoard then begin
6432 if not TBoard(Node.Data).IsThreadDatRead then begin
6433 Screen.Cursor := crHourGlass;
6435 if not TBoard(Node.Data).IsThreadDatRead then
6436 GikoSys.ReadSubjectFile(Node.Data);
6438 Screen.Cursor := crDefault;
6441 Sort.SetSortDate(Now());
6442 SetActiveList(Node.data);
6445 if TObject( Node.Data ) is TBoard then begin // not TCategory
6446 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6447 if GikoSys.Setting.ListWidthState = glsMax then begin
6448 GikoDM.BrowserMinAction.Execute;
6449 if GikoForm.Visible then
6453 if GikoSys.Setting.ListHeightState = glsMax then begin
6454 GikoDM.BrowserMinAction.Execute;
6455 if GikoForm.Visible then
6463 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6464 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6467 ThreadItem : TThreadItem;
6468 shiftDown : Boolean;
6471 if Node = nil then Exit;
6473 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6475 if FTreeType = gtt2ch then begin
6476 if not (TObject(Node.Data) is TBoard) then Exit;
6477 Board := TBoard(Node.Data);
6478 DownloadList(Board, shiftDown);
6479 end else if FTreeType = gttHistory then begin
6480 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6481 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6482 DownloadContent(ThreadItem, shiftDown);
6486 // *************************************************************************
6487 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6488 // *************************************************************************
6489 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6490 Shift: TShiftState);
6492 if Key = VK_BACK then begin
6493 // UpFolderButtonClick(Sender);
6494 end else if Key = VK_SPACE then begin
6495 TreeDoubleClick( TreeView.Selected );
6496 end else if Key = VK_RETURN then begin
6497 TreeClick( TreeView.Selected );
6498 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6499 if (TreeView.Selected <> nil) then begin
6500 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6504 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6505 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6506 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6508 favItem : TTreeNode;
6509 favThreadItem : TFavoriteThreadItem;
6515 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6516 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6517 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6518 rect := FavoriteTreeView.Selected.DisplayRect(true);
6519 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6520 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6521 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6522 if ssDouble in Shift then begin
6523 FClickNode := FavoriteTreeView.Selected;
6524 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6528 TObject(FavoriteTreeView.Selected));
6535 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6536 if favItem = nil then Exit;
6538 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6539 favThreadItem := TFavoriteThreadItem( favItem.Data );
6540 if favThreadItem.Item <> nil then
6541 InsertBrowserTab( favThreadItem.Item, False );
6548 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6551 if FIsIgnoreResize <> rtNone then
6554 if GikoSys.Setting.ListOrientation = gloVertical then begin
6555 if GikoSys.Setting.ListHeightState = glsMin then begin
6556 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6557 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6563 procedure TGikoForm.OnResized;
6568 FOldFormWidth := Width;
6569 FIsIgnoreResize := rtNone;
6574 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6575 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6580 //
\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)
6581 if FActiveContent <> nil then begin
6582 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6583 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6585 FIsMinimize := mtNone;
6590 // *************************************************************************
6591 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6592 // *************************************************************************
6593 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6600 stlist : TStringList;
6607 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6608 FActiveContent.Browser.SetFocus;
6611 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6612 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6613 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6614 if (Assigned(e)) then begin
6615 if (e.className = 'date') or (e.id = 'date') then begin
6617 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6618 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6619 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6620 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6623 stlist := TStringList.Create;
6625 stList.DelimitedText := AID;
6627 for i := 0 to stList.Count - 1 do
6628 if Length(WideString(stList[i])) = 8 then begin
6629 if GikoSys.NotDateorTimeString(stList[i]) then begin
6638 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6640 if count > LIMIT then begin
6641 if (GikoUtil.MsgBox(Handle,
6642 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6643 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6644 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6648 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6649 FActiveContent.IDAnchorPopup(body);
6658 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6659 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6661 SelectTimer.Interval := 0;
6662 if not (ListView.Selected = nil) then
6663 if( FActiveContent = nil) or
6664 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6669 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6670 procedure TGikoForm.ActiveListColumnSave;
6672 ActivListObj : TObject;
6673 i, id, idx : Integer;
6674 BBSOrder : TGikoBBSColumnList;
6675 CategoryOrder : TGikoCategoryColumnList;
6676 BoardOrder : TGikoBoardColumnList;
6679 ActivListObj := ActiveList;
6680 if ActivListObj is TBBS then begin
6681 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6682 BBSOrder := TGikoBBSColumnList.Create;
6684 for i := 0 to ListView.Columns.Count - 1 do begin
6685 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6686 idx := ListView.Column[ i ].Tag;
6687 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6688 BBSOrder.Add( TGikoBBSColumnID( id ) );
6689 //
\95\9d\82Ì
\95Û
\91¶
6690 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6692 for i := 0 to ListView.Columns.Count - 1 do
6693 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6694 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6698 end else if ActivListObj is TCategory then begin
6699 //=====
\94Â
\83\8a\83X
\83g =====
6700 CategoryOrder := TGikoCategoryColumnList.Create;
6702 for i := 0 to ListView.Columns.Count - 1 do begin
6703 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6704 idx := ListView.Column[ i ].Tag;
6705 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6706 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6707 //
\95\9d\82Ì
\95Û
\91¶
6708 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6710 for i := 0 to ListView.Columns.Count - 1 do
6711 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6712 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6716 end else if ActivListObj is TBoard then begin
6717 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6718 BoardOrder := TGikoBoardColumnList.Create;
6720 for i := 0 to ListView.Columns.Count - 1 do begin
6721 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6722 idx := ListView.Column[ i ].Tag;
6723 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6724 BoardOrder.Add( TGikoBoardColumnID( id ) );
6725 //
\95\9d\82Ì
\95Û
\91¶
6726 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6728 for i := 0 to ListView.Columns.Count - 1 do
6729 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6730 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6738 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6739 Column: TListColumn; Point: TPoint);
6745 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6746 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6747 ListColumnPopupMenu.Items.Items[ i ].Free;
6749 //
\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¢)
6750 if TObject( FActiveList ) is TBBS then begin
6752 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6753 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6754 item := TMenuItem.Create( ListColumnPopupMenu );
6755 item.Caption := GikoBBSColumnCaption[ i ];
6757 item.OnClick := ListColumnPopupMenuOnClick;
6758 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6759 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6760 item.Checked := True;
6764 ListColumnPopupMenu.Items.Add( item );
6767 end else if TObject( FActiveList ) is TCategory then begin
6769 //=====
\94Â
\83\8a\83X
\83g =====
6770 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6771 item := TMenuItem.Create( ListColumnPopupMenu );
6772 item.Caption := GikoCategoryColumnCaption[ i ];
6774 item.OnClick := ListColumnPopupMenuOnClick;
6775 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6776 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6777 item.Checked := True;
6781 ListColumnPopupMenu.Items.Add( item );
6784 end else if TObject( FActiveList ) is TBoard then begin
6786 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6787 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6788 item := TMenuItem.Create( ListColumnPopupMenu );
6789 item.Caption := GikoBoardColumnCaption[ i ];
6791 item.OnClick := ListColumnPopupMenuOnClick;
6792 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6793 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6794 item.Checked := True;
6798 ListColumnPopupMenu.Items.Add( item );
6803 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6804 Point := ListView.ClientToScreen( Point );
6805 if ListColumnPopupMenu.Items.Count > 0 then
6806 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6810 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6811 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6818 if not (Sender is TMenuItem) then
6821 ActiveListColumnSave;
6822 item := TMenuItem( Sender );
6824 if TObject( FActiveList ) is TBBS then
6825 orderList := GikoSys.Setting.BBSColumnOrder
6826 else if TObject( FActiveList ) is TCategory then
6827 orderList := GikoSys.Setting.CategoryColumnOrder
6828 else if TObject( FActiveList ) is TBoard then
6829 orderList := GikoSys.Setting.BoardColumnOrder
6833 if item.Checked then begin
6834 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6835 for i := orderList.Count - 1 downto 0 do begin
6836 if Integer( orderList[ i ] ) = item.Tag then begin
6837 orderList.Delete( i );
6842 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6843 orderList.Add( Pointer( item.Tag ) );
6846 SetActiveList( FActiveList );
6850 procedure TGikoForm.OnGestureStart(Sender: TObject);
6855 procedure TGikoForm.OnGestureMove(Sender: TObject);
6862 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6864 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6865 s := MouseGesture.GetGestureStr;
6867 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6868 if Action <> nil then
6869 ActStr := '
\81i' + Action.Caption + '
\81j';
6870 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6871 StatusBar.Panels[1].Text := s;
6874 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6879 s := MouseGesture.GetGestureStr;
6881 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6882 if Action <> nil then
6884 StatusBar.Panels[1].Text := '';
6887 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6888 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6890 ThreadItem: TThreadItem;
6892 DefaultDraw := true;
6893 if TObject(Item.Data) is TThreadItem then begin
6894 ThreadItem := TThreadItem(Item.Data);
6895 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6896 ListView.Canvas.Brush.Color := FOddColor;
6897 //
\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
6898 if (GikoSys.Setting.UnFocusedBold) and
6899 (Item.Selected) and (not ListView.Focused) then begin
6900 ListView.Canvas.Font.Style := [fsBold];
6903 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6906 if ThreadItem.UnRead then
6907 ListView.Canvas.Font.Style := [fsBold];
6912 procedure TGikoForm.FormActivate(Sender: TObject);
6914 if GikoSys.Setting.GestureEnabled then begin
6915 GikoSys.Setting.Gestures.ClearGesture;
6916 GikoSys.Setting.Gestures.LoadGesture(
6917 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6918 MouseGesture.UnHook;
6919 MouseGesture.OnGestureStart := OnGestureStart;
6920 MouseGesture.OnGestureMove := OnGestureMove;
6921 MouseGesture.OnGestureEnd := OnGestureEnd;
6922 MouseGesture.SetHook(Handle);
6924 //MouseGesture.UnHook;
6925 MouseGesture.OnGestureStart := nil;
6926 MouseGesture.OnGestureMove := nil;
6927 MouseGesture.OnGestureEnd := nil;
6931 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6933 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6934 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6938 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6943 affectedBand : TCoolBand;
6946 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6947 FIsIgnoreResize := rtResizing;
6948 PostMessage( Handle, USER_RESIZED, 0, 0 );
6950 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6951 if CoolBar = MainCoolBar then begin
6952 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6953 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6954 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6955 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6956 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6958 end else if CoolBar = ListCoolBar then begin
6959 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
6960 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6961 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6962 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6963 GikoSys.Setting.ListCoolSet[i] := CoolSet;
6965 end else if CoolBar = BrowserCoolBar then begin
6966 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
6967 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6968 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6969 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6970 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
6973 if not (Sender is TToolBar) or (CoolBar = nil) then
6975 toolbar := TToolBar( Sender );
6976 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
6977 affectedBand := nil;
6978 for i := CoolBar.Bands.Count - 1 downto 0 do begin
6979 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
6980 band := CoolBar.Bands[ i ];
6981 if band.Break or (i = 0) then begin
6982 if i + 1 < CoolBar.Bands.Count then
6983 if not CoolBar.Bands[ i + 1 ].Break then
6984 affectedBand := CoolBar.Bands[ i + 1 ];
6987 affectedBand := CoolBar.Bands[ i - 1 ];
6992 //
\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·
6993 if CoolBar = MainCoolBar then begin
6994 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
6995 coolSet.FCoolWidth := toolbar.Width + 25;
6996 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
6997 if affectedBand <> nil then begin
6998 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
6999 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7000 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7002 end else if CoolBar = ListCoolBar then begin
7003 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7004 coolSet.FCoolWidth := toolbar.Width + 25;
7005 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7006 if affectedBand <> nil then begin
7007 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7008 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7009 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7011 end else if CoolBar = BrowserCoolBar then begin
7012 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7013 coolSet.FCoolWidth := toolbar.Width + 25;
7014 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7015 if affectedBand <> nil then begin
7016 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7017 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7018 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7025 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7027 CoolBarResized( Sender, MainCoolBar );
7030 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7032 CoolBarResized( Sender, ListCoolBar );
7035 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7037 CoolBarResized( Sender, BrowserCoolBar );
7040 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7041 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7043 ThreadItem : TThreadItem;
7044 ReadList : TStringList;
7045 wordCount : TWordCount;
7047 ThreadItem := GetActiveContent;
7048 ReadList := TStringList.Create;
7049 wordCount := TWordCount.Create;
7051 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7052 {$IFDEF SPAM_FILTER_ENABLED}
7053 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7054 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7055 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7056 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7057 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7059 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7060 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7065 FActiveContent.Repaint := true;
7066 if ThreadItem <> nil then
7067 InsertBrowserTab( ThreadItem, True );
7070 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7071 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7073 ThreadItem : TThreadItem;
7076 ReadList : TStringList;
7077 wordCount : TWordCount;
7079 No := KokoPopupMenu.Tag;
7080 if No = 0 then Exit;
7081 ThreadItem := GetActiveContent;
7082 if ThreadItem = nil then Exit;
7083 body := TStringList.Create;
7085 GikoSys.GetSameIDRes(No, ThreadItem, body);
7087 ReadList := TStringList.Create;
7088 wordCount := TWordCount.Create;
7090 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7091 {$IFDEF SPAM_FILTER_ENABLED}
7092 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7093 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7095 for i := 0 to body.Count - 1 do begin
7096 {$IFDEF SPAM_FILTER_ENABLED}
7097 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7098 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7099 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7101 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7102 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7108 FActiveContent.Repaint := true;
7109 if ThreadItem <> nil then
7110 InsertBrowserTab( ThreadItem, True );
7117 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7119 firstElement: IHTMLElement;
7120 document: IHTMLDocument2;
7122 document := FActiveContent.Browser.Document as IHTMLDocument2;
7123 if Assigned(document) then
7124 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7125 if Assigned(firstElement) then
7126 if firstElement.style.visibility <> 'hidden' then
7127 firstElement.style.visibility := 'hidden';
7131 procedure TGikoForm.RepaintAllTabsBrowser();
7134 ThreadItem: TThreadItem;
7136 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7137 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7139 ThreadItem := GetActiveContent;
7140 if ThreadItem <> nil then
7141 InsertBrowserTab( ThreadItem, True );
7145 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7146 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7147 Shift: TShiftState);
7149 //
\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Ì
7150 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7151 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7152 SelectTimer.Interval := 0;
7153 if not (GikoSys.Setting.BrowserTabVisible) then begin
7154 if (GetActiveList is TBoard) then begin
7155 //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
7156 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7157 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7158 (Key = VK_UP) or (Key = VK_DOWN)) then
7159 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7163 // *************************************************************************
7164 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7165 // *************************************************************************
7166 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7167 Node: TTreeNode; var AllowEdit: Boolean);
7169 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7170 FOrigenCaption := Node.Text;
7172 // *************************************************************************
7173 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7174 // *************************************************************************
7175 function TGikoForm.GetMainForm(): TComponent;
7177 Result := Application.MainForm;
7179 // *************************************************************************
7180 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7181 // *************************************************************************
7182 function TGikoForm.GetScreenCursor(): TCursor;
7184 Result := Screen.Cursor;
7186 // *************************************************************************
7187 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7188 // *************************************************************************
7189 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7191 if (Screen.Cursor <> Cursor) then
7192 Screen.Cursor := Cursor;
7194 // *************************************************************************
7195 //!
\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
7196 // *************************************************************************
7197 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7199 //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Ì
7200 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7201 if GikoDM.CabinetVisibleAction.Enabled then begin
7202 GikoDM.CabinetVisibleAction.Execute;
7205 // *************************************************************************
7206 //!
\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
7207 // *************************************************************************
7208 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7210 if GikoDM.FavoriteArrangeAction.Enabled then begin
7211 GikoDM.FavoriteArrangeAction.Execute;
7214 // *************************************************************************
7215 //!
\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
7216 // *************************************************************************
7217 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7218 var Handled: Boolean);
7222 //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ß
7223 if Self.Active then begin
7225 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7226 WM_KEYFIRST..WM_KEYLAST :
7228 //
\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ç
7229 if (Msg.message <> WM_KEYUP)
7230 and (Msg.message <> WM_CHAR)
7231 and (Msg.message <> WM_SYSKEYUP) then begin
7232 wmMsg.Msg := Msg.message;
7233 wmMsg.CharCode := Word(Msg.wParam);
7234 wmMsg.KeyData := Msg.lParam;
7235 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7236 Self.OnShortCut(wmMsg, Handled);
7242 // *************************************************************************
7243 //!
\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
7244 // *************************************************************************
7245 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7247 Application.ProcessMessages;
7248 if not Application.Terminated then begin
7249 if PreviewTimer.Enabled then
7250 PreviewTimer.Enabled := False;
7251 //
\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
7252 if FHint <> nil then begin
7253 FHint.ReleaseHandle;
7256 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7257 if FPreviewBrowser <> nil then
7258 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7262 // *************************************************************************
7263 //!
\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
7264 // *************************************************************************
7265 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7270 if (Sender <> nil) then begin
7271 s := ' [' + Sender.ClassName + ']' + #13#10;
7273 s := ' [ Sender is nil ] ' + #13#10;
7276 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7278 // *************************************************************************
7279 //!
\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¬
7280 // *************************************************************************
7281 procedure TGikoForm.CreateControlThread();
7283 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7284 FControlThread := TThreadControl.Create(True);
7285 FControlThread.MaxThreadCount := 1;
7286 FControlThread.Resume;
7287 FControlThread.OnDownloadEnd := DownloadEnd;
7288 FControlThread.OnDownloadMsg := DownloadMsg;
7289 FControlThread.OnWork := Work;
7290 FControlThread.OnWorkBegin := WorkBegin;
7291 FControlThread.OnWorkEnd := WorkEnd;
7293 // *************************************************************************
7294 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7295 // *************************************************************************
7296 procedure TGikoForm.CreateBrowsers(count: Integer);
7299 newBrowser: TWebBrowser;
7301 BrowserNullTab := TBrowserRecord.Create;
7302 BrowserNullTab.Browser := Browser;
7303 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7304 FBrowsers := TList.Create;
7305 for i := 0 to count -1 do begin
7306 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7307 newBrowser := FBrowsers[FBrowsers.Count - 1];
7308 TOleControl(newBrowser).Parent := BrowserPanel;
7309 TOleControl(newBrowser).Align := alNone;
7310 TOleControl(newBrowser).Left := 0;
7311 TOleControl(newBrowser).Top := 0;
7312 newBrowser.RegisterAsDropTarget := False;
7313 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7314 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7315 newBrowser.OnEnter := BrowserEnter;
7316 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7317 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7318 newBrowser.Navigate(BLANK_HTML);
7319 ShowWindow(newBrowser.Handle, SW_HIDE);
7321 BrowserNullTab.Browser.BringToFront;
7322 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7323 //
\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Ì
7324 //
\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Å
7325 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7326 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7327 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7328 Application.ProcessMessages;
7331 // *************************************************************************
7332 //!
\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é
7333 // *************************************************************************
7334 procedure TGikoForm.SetSelectComboBox();
7336 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7339 ToolButton: TToolButton;
7341 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7342 SelectComboBoxPanel.Visible := False;
7344 for i := ListToolBar.ControlCount - 1 downto 0 do
7346 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7348 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7349 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7350 SelectComboBoxPanel.Parent := ListToolBar;
7351 SelectComboBoxPanel.Visible := True;
7353 SelectComboBox.Left := 0;
7354 SelectComboBox.Top := 0;
7355 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7356 SelectComboBox.Width := SelectComboBoxPanel.Width -
7357 SelectComboBoxSplitter.Width;
7359 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7360 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7361 if ToolButton = nil then begin
7362 ToolButton := TToolButton.Create(ListToolBar);
7363 ToolButton.Name := DUMMYCOMPNAME;
7365 ToolButton.Style := tbsSeparator;
7366 ToolButton.Width := 0;
7367 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7368 ListToolBar.InsertControl(ToolButton);
7369 ToolButton.Visible := False;
7371 //
\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·
7372 if (i + 1) < ListToolBar.ControlCount then
7373 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7374 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7375 ListToolBar.Controls[ i + 1 ].Visible := False;
7378 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7379 ListToolBar.Controls[ i ].Visible := False;
7387 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7388 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7389 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7396 if (TreeView.Selected <> nil) and
7397 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7398 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7399 rect := TreeView.Selected.DisplayRect(true);
7400 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7401 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7402 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7403 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7404 if ssDouble in Shift then begin
7405 TreeDoubleClick( TreeView.Selected );
7407 TreeClick(TreeView.Selected);
7414 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7415 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7419 if ActionList <> nil then begin
7420 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7422 for i := 0 to ActionList.ActionCount - 1 do begin
7424 FActionListGroupIndexes[i] :=
7425 TCustomAction(ActionList.Actions[i]).GroupIndex;
7426 TCustomAction(ActionList.Actions[i]).GroupIndex
7429 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7435 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7436 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7440 if ActionList <> nil then begin
7441 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7442 for i := 0 to ActionList.ActionCount - 1 do begin
7444 TCustomAction(ActionList.Actions[i]).GroupIndex
7445 := FActionListGroupIndexes[i];
7447 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7453 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7454 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7458 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7459 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7461 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7462 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7467 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7468 MousePos: TPoint; var Handled: Boolean);
7471 coolBar: TGikoCoolBar;
7474 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7475 coolBar := TGikoCoolBar(Sender);
7476 if (coolBar = MainCoolBar) then begin
7477 FToolBarSettingSender := tssMain;
7478 end else if (coolBar = ListCoolBar) then begin
7479 FToolBarSettingSender := tssList;
7480 end else if (coolBar = BrowserCoolBar) then begin
7481 FToolBarSettingSender := tssBrowser;
7483 FToolBarSettingSender := tssNone;
7485 pos := coolBar.ClientToScreen( MousePos );
7486 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7491 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7493 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7494 if (Msg.wParam = WM_LBUTTONUP) then begin
7498 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7499 procedure TGikoForm.StoredTaskTray;
7502 if (FIconData.uID = 0) then begin
7503 FIconData.cbSize := SizeOf(TNotifyIconData);
7504 FIconData.uID := Self.Handle;
7505 FIconData.Wnd := Handle;
7506 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7507 FIconData.uCallbackMessage := USER_TASKTRAY;
7508 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7509 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7510 Shell_NotifyIcon(NIM_ADD, @FIconData);
7511 ShowEditors(SW_HIDE);
7512 ShowWindow(Self.Handle, SW_HIDE);
7517 //!
\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¦
7518 procedure TGikoForm.UnStoredTaskTray;
7522 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7523 SetForegroundWindow(Application.Handle);
7528 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7529 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7530 ShowWindow(Self.Handle, SW_RESTORE);
7532 ShowWindow(Self.Handle, SW_SHOW);
7534 ShowEditors(SW_SHOW);
7535 GikoDM.StoredTaskTrayAction.Tag := 0;
7539 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7540 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7542 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7546 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7547 for i := 0 to Screen.CustomFormCount - 1 do begin
7548 if TObject(Screen.CustomForms[i]) is TEditorForm then
7549 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);