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;
288 SelectComboBox: TComboBox;
289 MainCoolBarPopupMenu: TPopupMenu;
290 StdToolBarVisiblePMenu: TMenuItem;
291 AddressToolBarVisiblePMenu: TMenuItem;
292 LinkToolBarVisiblePMenu: TMenuItem;
313 ToolButton16: TToolButton;
320 IndividualAbon1: TMenuItem;
322 IndividualAbon2: TMenuItem;
323 AntiIndivAbonMenuItem: TMenuItem;
324 AntiIndividualAbon: TMenuItem;
328 SearchBoardName: TMenuItem;
329 TreeSelectLogDeleteSeparator: TMenuItem;
332 FavoriteTreePopupMenu: TPopupMenu;
333 FavoriteTreeRenamePopupMenu: TMenuItem;
334 FavoriteTreeNewFolderPopupMenu: TMenuItem;
336 FavoriteTreeDeletePopupMenu: TMenuItem;
337 FavoriteToolBar: TToolBar;
338 FavoriteAddToolButton: TToolButton;
339 FavoriteArrangeToolButton: TToolButton;
340 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
342 FavoriteTreeReloadPopupMenu: TMenuItem;
344 FavoriteTreeURLCopyPopupMenu: TMenuItem;
345 FavoriteTreeNameCopyPopupMenu: TMenuItem;
346 FavoriteTreeLogDeletePopupMenu: TMenuItem;
348 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
349 ToolButton20: TToolButton;
351 ExportFavoriteFileAction1: TMenuItem;
362 TreeSelectLogDeletePopupMenu: TMenuItem;
364 BBSSelectPopupMenu: TPopupMenu;
365 PlugInMenu: TMenuItem;
366 TreeSelectNamePupupMenu: TMenuItem;
367 BrowserPanel: TPanel;
369 SelectThreadSave: TMenuItem;
373 OpenLogFolder: TMenuItem;
374 Browser: TWebBrowser;
377 ResRangePopupMenu: TPopupMenu;
378 ResRangeHundPMenuItem: TMenuItem;
379 ResRangeKokoPMenuItem: TMenuItem;
380 ResRangeNewPMenuItem: TMenuItem;
381 ResRangeAllPMenuItem: TMenuItem;
382 BrowsBoradHeadAction1: TMenuItem;
383 ThreadRangePopupMenu: TPopupMenu;
390 ResRangeSelectPMenuItem: TMenuItem;
391 ListColumnPopupMenu: TPopupMenu;
400 SelectComboBoxPanel: TPanel;
401 SelectComboBoxSplitter: TImage;
402 ToolButton1: TToolButton;
405 GikoApplicationEvents: TApplicationEvents;
412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
415 SaveThreadFile: TMenuItem;
419 procedure FormCreate(Sender: TObject);
420 procedure FormDestroy(Sender: TObject);
421 procedure BrowserStatusTextChange(Sender: TObject;
422 const Text: WideString);
423 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
424 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
425 var AllowChange: Boolean);
426 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
428 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
429 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
430 Button: TToolButton; State: TCustomDrawState;
431 var DefaultDraw: Boolean);
432 procedure BrowserBeforeNavigate2(Sender: TObject;
433 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
434 Headers: OleVariant; var Cancel: WordBool);
435 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
436 const ARect: TRect; var DefaultDraw: Boolean);
437 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
438 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
439 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
440 procedure ListViewCustomDraw(Sender: TCustomListView;
441 const ARect: TRect; var DefaultDraw: Boolean);
442 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
443 Shift: TShiftState; X, Y: Integer);
444 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
445 procedure MessageListViewResize(Sender: TObject);
446 procedure CabinetVisible( isVisible : Boolean );
447 procedure FormResize(Sender: TObject);
448 procedure ListPopupMenuPopup(Sender: TObject);
449 procedure TreePopupMenuPopup(Sender: TObject);
450 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
451 var Cancel: WordBool);
452 procedure ListSplitterMoved(Sender: TObject);
453 procedure BrowserTabChange(Sender: TObject);
454 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
455 Shift: TShiftState; X, Y: Integer);
456 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
457 State: TDragState; var Accept: Boolean);
458 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
459 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
461 procedure BrowserDocumentComplete(Sender: TObject;
462 const pDisp: IDispatch; var URL: OleVariant);
463 procedure RoundNamePopupMenuPopup(Sender: TObject);
464 procedure FormShow(Sender: TObject);
465 procedure BrowserTabToolBarResize(Sender: TObject);
466 procedure FavoriteMenuClick(Sender: TObject);
467 procedure MainCoolBarResize(Sender: TObject);
468 procedure AddressToolBarResize(Sender: TObject);
469 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
471 procedure BrowserEnter(Sender: TObject);
472 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
473 procedure PreviewTimerTimer(Sender: TObject);
474 procedure MessageHideButtonClick(Sender: TObject);
475 procedure HistoryAllClearToolButtonClick(Sender: TObject);
476 procedure MainCoolBarBandInfo(Sender: TObject;
477 var BandInfo: PReBarBandInfoA);
478 procedure MainCoolBarChevronClick(Sender: TObject;
479 RebarChevron: PNMRebarChevron);
480 procedure ListCoolBarBandInfo(Sender: TObject;
481 var BandInfo: PReBarBandInfoA);
482 procedure ListCoolBarChevronClick(Sender: TObject;
483 RebarChevron: PNMRebarChevron);
484 procedure BrowserCoolBarBandInfo(Sender: TObject;
485 var BandInfo: PReBarBandInfoA);
486 procedure BrowserCoolBarChevronClick(Sender: TObject;
487 RebarChevron: PNMRebarChevron);
488 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
489 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
490 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
491 procedure SelectComboBoxChange(Sender: TObject);
492 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
494 procedure SelectComboBoxExit(Sender: TObject);
495 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
496 Shift: TShiftState; X, Y: Integer);
497 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
498 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
499 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
500 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
501 procedure StatusBarResize(Sender: TObject);
502 procedure SelectComboBoxEnter(Sender: TObject);
503 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
505 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
506 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
508 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
510 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
511 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
512 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
513 Shift: TShiftState; X, Y: Integer);
514 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
515 State: TDragState; var Accept: Boolean);
516 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
518 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
519 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
520 var Handled: Boolean);
521 procedure BrowserTabPopupMenuPopup(Sender: TObject);
522 procedure BrowserTabResize(Sender: TObject);
523 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
525 procedure FavoriteTreeViewMouseDown(Sender: TObject;
526 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
527 procedure MessagePanelResize(Sender: TObject);
529 procedure SelectTimerTimer(Sender: TObject);
530 procedure ListViewColumnRightClick(Sender: TObject;
531 Column: TListColumn; Point: TPoint);
532 procedure ListViewCustomDrawItem(Sender: TCustomListView;
533 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
534 procedure FormActivate(Sender: TObject);
535 procedure BrowserPanelResize(Sender: TObject);
536 procedure MenuToolBarResize(Sender: TObject);
537 procedure ListToolBarResize(Sender: TObject);
538 procedure BrowserToolBarResize(Sender: TObject);
539 procedure KokoPopupMenuPopup(Sender: TObject);
540 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
542 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
543 var AllowEdit: Boolean);
544 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
545 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
546 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
547 var Handled: Boolean);
548 procedure GikoApplicationEventsDeactivate(Sender: TObject);
549 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
550 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
551 Shift: TShiftState; X, Y: Integer);
552 procedure GetResURLMenuClick(Sender: TObject);
553 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
554 var Handled: Boolean);
557 FEnabledCloseButton: Boolean;
558 FClickNode: TTreeNode;
561 FPreviewBrowser: TPreviewBrowser;
563 FBrowserSizeHeight: Integer;
564 FBrowserSizeWidth: Integer;
565 FTabHintIndex: Integer;
566 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
567 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
568 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
569 FActiveList: TObject;
570 FActiveContent: TBrowserRecord; //
572 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
573 FTreeType: TGikoTreeType;
577 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
578 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
579 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
580 IsDraggingSelectComboBox : Boolean;
581 DraggingSelectComboBoxPosition : TPoint;
582 FSearchDialog: TSearchDialog;
583 FDropSpaceNode: TTreeNode;
584 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
585 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
586 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
587 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
588 FUseOddResOddColor : Boolean; ///<
\8eæ
\93¾
\83\8c\83X
\90\94\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\83\8c\83X
\90\94\82ª
\88á
\82Á
\82½
\82Æ
\82«
\82É
\91¼
\82Ì
\90F
\82Å
\95\
\8e¦
589 FOddColor : TColor; ///<
\82»
\82Ì
\90F
590 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
591 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
592 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
593 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
594 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
595 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
597 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
599 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
600 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
601 FOrigenCaption: String; //
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83A
\83C
\83e
\83\80\95Ò
\8fW
\8e\9e\82Ì
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
602 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
603 FActionListGroupIndexes: array of Integer; ///<GikoDM
\8fã
\82Ì
\83A
\83N
\83V
\83\87\83\93\83\8a\83X
\83g
\82Ì
\8ae
\83A
\83N
\83V
\83\87\83\93\82É
\90Ý
\92è
\82³
\82ê
\82½GroupIndex
\82ð
\95Û
\91¶
\82·
\82é
\94z
\97ñ
605 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
606 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
607 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
608 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
609 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
611 procedure ListDoubleClick(Shift: TShiftState);
612 function Hook(var Message: TMessage): Boolean;
613 procedure AddRoundNameMenu(MenuItem: TMenuItem);
614 procedure SetMenuFont;
615 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
616 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
617 procedure FavoriteClick(Sender: TObject); overload;
618 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
619 function OnDocumentContextMenu(Sender: TObject): WordBool;
620 procedure ShowTextPopup;
621 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
622 procedure MenuBarChevronMenu;
623 procedure LinkBarChevronMenu;
624 procedure ToolBarChevronMenu(ToolBar: TToolBar);
625 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
626 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
627 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
630 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
631 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
632 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
633 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
635 procedure SetListViewBackGroundColor(value: TColor);
636 procedure BBSMenuItemOnClick( Sender : TObject );
637 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
638 procedure SaveCoolBarSettings;
639 procedure SaveMainCoolBarSettings;
640 procedure SaveBoardCoolBarSettings;
641 procedure SaveBrowserCoolBarSettings;
642 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
643 procedure LoadCoolBarSettings;
644 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
645 procedure OnMinimize;
646 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
647 procedure OnMinimized;
648 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
649 procedure TreeClick( Node : TTreeNode );
650 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
651 procedure TreeDoubleClick( Node : TTreeNode );
652 ///
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
653 procedure SetBBSMenu;
654 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
655 procedure ListColumnPopupMenuOnClick( Sender : TObject );
656 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
657 procedure SetSelectWord( const text : string );
658 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
659 function GetScreenCursor(): TCursor;
660 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
661 procedure SetScreenCursor(Cursor : TCursor);
662 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
663 procedure CreateControlThread();
664 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
665 procedure CreateBrowsers(count: Integer);
666 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
667 procedure GetGroupIndex(ActionList: TActionList);
668 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
669 procedure SetGroupIndex(ActionList: TActionList);
670 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
671 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
672 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
673 procedure RefreshListView(Thread: TThreadItem);
674 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
675 procedure ClearThreadRengeAction;
676 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
677 procedure UnStoredTaskTray;
678 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
679 procedure ShowEditors(nCmdShow: Integer);
681 procedure CreateParams(var Params: TCreateParams); override;
682 procedure WndProc(var Message: TMessage); override;
683 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
684 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
685 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
689 LastRoundTime: TDateTime;
690 BrowserNullTab: TBrowserRecord;
691 FControlThread: TThreadControl;
692 FIconData : TNotifyIconData;
693 procedure MoveToURL(const inURL: string);
694 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
696 function GetHttpState: Boolean;
697 procedure SetEnabledCloseButton(Enabled: Boolean);
698 function GetTreeNode(Data: TObject): TTreeNode;
699 procedure ListViewAllSelect;
700 property ListStyle: TViewStyle read FListStyle write FListStyle;
701 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
702 property ViewType: TGikoViewType read FViewType write FViewType;
703 property NameCookie: string read FNameCookie write FNameCookie;
704 property MailCookie: string read FMailCookie write FMailCookie;
705 property ClickNode: TTreeNode read FClickNode write FClickNode;
706 property TreeType: TGikoTreeType read FTreeType write FTreeType;
707 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
708 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
709 property SelectResWord : string read FSelectResWord write FSelectResWord;
710 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
711 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
712 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
713 property ToolBarSettingSender : TToolBarSettingSenderType
714 read FToolBarSettingSender write FToolBarSettingSender;
715 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
716 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
717 property WorkCount: Integer read FWorkCount write FWorkCount;
718 procedure SetContent(inThread: TBrowserRecord);
719 function GetActiveContent: TThreadItem;
720 function GetActiveList: TObject;
722 procedure SetListViewType(AViewType: TGikoViewType); overload;
723 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
724 procedure PlaySound(SoundEventName: string);
725 procedure ShowBBSTree( inBBS : TBBS );
726 procedure ShowBBSTreeOld( inBBS : TBBS );
727 procedure ShowHistoryTree;
728 procedure SetHistoryTreeNode;
729 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
730 procedure SetBrowserTabState;
731 procedure SetToolBarPopup;
732 procedure ShowFavoriteAddDialog( Item : TObject );
733 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
734 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
735 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
736 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
737 property OddColor : TColor read FOddColor write FOddColor;
738 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
739 procedure OnPlugInMenuItem( Sender : TObject );
740 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
741 /// 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Å
742 procedure ActiveListColumnSave;
743 procedure SetActiveList(Obj: TObject);
744 property ActiveList: TObject read GetActiveList write SetActiveList;
745 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
746 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
747 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
748 procedure IndividualAbonID(Atype : Integer);
749 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
750 procedure IndividualAbon(Atag, Atype : Integer);
751 //
\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Ý
752 procedure RepaintAllTabsBrowser();
753 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
754 procedure SetLinkBar;
755 procedure FavoriteBrowseFolder( node: TTreeNode );
756 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
757 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
758 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
759 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
760 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
761 procedure DeleteHistory( threadItem: TThreadItem );
762 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
763 procedure DeleteTab(ThreadItem: TThreadItem); overload;
764 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
765 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
766 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
767 procedure DeleteTab(index, selectIndex: Integer); overload;
768 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
769 procedure BrowserMovement(const AName: string);
770 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
771 function GetMainForm(): TComponent;
772 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
773 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
774 procedure OnGestureStart(Sender: TObject);
775 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
776 procedure OnGestureMove(Sender: TObject);
777 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
778 procedure OnGestureEnd(Sender: TObject);
779 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
780 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
781 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
782 procedure SelectListItem(List: TList);
783 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
784 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
786 procedure ModifySelectList;
788 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
790 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
792 procedure SetSelectRoundName(Sender: TObject);
794 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
796 function WebBrowserClick(Sender: TObject): WordBool;
797 //!
\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é
798 procedure SetSelectComboBox();
800 //!
\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
801 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
802 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
803 procedure StoredTaskTray;
805 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
808 TFavoriteMenuItem = class(TMenuItem)
812 property Data: Pointer read FData write FData;
815 TBBSMenuItem = class(TMenuItem)
819 property Data: Pointer read FData write FData;
822 TLinkToolButton = class(TToolButton)
826 property Data: Pointer read FData write FData;
835 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
836 YofUtils, ToolBarUtil, ToolBarSetting,
837 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
838 FavoriteArrange, AddressHistory, Gesture,
839 About, Option, Round, Splash, Sort, ListSelect, Imm,
840 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
841 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
842 InputAssistDataModule, Types;
845 BLANK_HTML: string = 'about:blank';
846 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
848 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
849 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
850 HTML_FILE_NAME = 'temp_preview.html';
851 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
852 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
853 //
\83\81\83b
\83Z
\81[
\83WID
854 USER_TREECLICK = WM_USER + 2000;
855 USER_RESIZED = WM_USER + 2001;
856 USER_MINIMIZED = WM_USER + 2002;
857 USER_SETLINKBAR = WM_USER + 2003;
858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
859 USER_TASKTRAY = WM_USER + 2010;
862 procedure TGikoForm.CreateParams(var Params: TCreateParams);
865 if FormStyle in [fsNormal, fsStayOnTop] then begin
866 if BorderStyle in [bsSingle, bsSizeable] then begin
867 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
868 Params.WndParent := 0;
873 procedure TGikoForm.FormCreate(Sender: TObject);
875 TVS_NOTOOLTIPS = $0080;
881 wp: TWindowPlacement;
885 Writeln('============================================================');
886 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
888 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
889 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¢');
890 Writeln('============================================================');
893 Sort.SetSortDate(Now());
895 FTreeType := gttNone;
896 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
898 Application.HookMainWindow(Hook);
899 FIsIgnoreResize := rtResizing;
900 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
901 //(
\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¢)
902 //
\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
903 GetGroupIndex(GikoDM.GikoFormActionList);
904 FSearchDialog := nil;
905 CreateBrowsers(BROWSER_COUNT);
908 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
911 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
912 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
914 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
915 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
917 EnabledCloseButton := True;
919 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
920 ListView.ViewStyle := GikoSys.Setting.ListStyle;
922 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
924 AnimePanel.Left := 0;
926 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
928 //
\83L
\83\83\83r
\83l
\83b
\83g
929 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
931 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
932 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
933 GikoDM.MsgBarVisibleActionExecute(nil);
934 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
936 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
937 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
938 GikoDM.StatusBarVisibleActionExecute(nil);
940 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
941 TreeView.Items.BeginUpdate;
942 FavoriteTreeView.Items.BeginUpdate;
943 ListView.Items.BeginUpdate;
945 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
946 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
947 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
948 TreeView.Color := GikoSys.Setting.CabinetBackColor;
949 FavoriteTreeView.Font.Assign(TreeView.Font);
950 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
952 ListView.Font.Name := GikoSys.Setting.ListFontName;
953 ListView.Font.Size := GikoSys.Setting.ListFontSize;
954 ListView.Font.Color := GikoSys.Setting.ListFontColor;
955 ListView.Font.Style := [];
956 if GikoSys.Setting.ListFontBold then
957 ListView.Font.Style := [fsbold];
958 if GikoSys.Setting.ListFontItalic then
959 ListView.Font.Style := ListView.Font.Style + [fsitalic];
961 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
962 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
963 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
964 FOddColor := GikoSys.Setting.OddColor;
967 TreeView.Items.EndUpdate;
968 FavoriteTreeView.Items.EndUpdate;
969 ListView.Items.EndUpdate;
971 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
972 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
974 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
975 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
977 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
978 FResRangeMenuSelect := GikoSys.ResRange;
979 case GikoSys.ResRange of
982 GikoDM.AllResAction.Execute;
986 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
987 GikoDM.SelectResAction.Checked := True;
990 case FResRangeMenuSelect of
991 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
992 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
993 100: GikoDM.OnlyAHundredResAction.Checked := True;
997 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
998 case GikoSys.Setting.ThreadRange of
1001 GikoDM.AllItemAction.Checked := True;
1006 GikoDM.LogItemAction.Checked := True;
1011 GikoDM.NewItemAction.Checked := True;
1016 GikoDM.LiveItemAction.Checked := True;
1017 ViewType := gvtLive;
1021 GikoDM.ArchiveItemAction.Checked := True;
1022 ViewType := gvtArch;
1027 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1028 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1029 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1030 BrowserTab.Font.Style := [];
1031 if GikoSys.Setting.BrowserTabFontBold then
1032 BrowserTab.Font.Style := [fsBold];
1033 if GikoSys.Setting.BrowserTabFontItalic then
1034 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1035 BrowserTab.DoubleBuffered := True;
1036 FDragWFirst := false;
1037 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1039 //
\83u
\83\89\83E
\83U
\83^
\83u
1040 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1042 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1043 GikoDM.BrowserTabTopAction.Checked := True;
1045 GikoDM.BrowserTabBottomAction.Checked := True;
1048 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1049 GikoDM.BrowserTabTabStyleAction.Checked := True;
1050 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1051 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1053 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1056 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1057 ProgressBar.Parent := StatusBar;
1058 ProgressBar.Top := 2;
1059 ProgressBar.Left := 0;
1060 ProgressBar.Width := StatusBar.Panels[0].Width;
1061 ProgressBar.Height := StatusBar.Height - 2;
1062 ProgressBar.Position := 0;
1064 //
\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Æ)
1065 InitializeBoardPlugIns;
1067 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1068 GikoSys.ListBoardFile;
1069 //
\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É
1071 //
\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è
1072 if (SplashWindow <> nil) then begin
1073 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1077 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1078 for i := Length(BBSs) - 1 downto 0 do begin
1079 if not BBSs[i].IsBoardFileRead then
1080 GikoSys.ReadBoardFile(BBSs[i]);
1082 if SplashWindow <> nil then begin
1083 SplashWindow.ProgressBar.StepBy(20);
1084 SplashWindow.Update;
1088 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1089 RoundList := TRoundList.Create;
1090 RoundList.LoadRoundBoardFile;
1091 RoundList.LoadRoundThreadFile;
1093 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1094 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1095 Style := Style or TVS_NOTOOLTIPS;
1096 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1098 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1099 TreeView.Align := alClient;
1100 FavoriteTreeView.Align := alClient;
1101 FavoriteTreeView.Visible := False;
1103 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1106 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1107 wp.length := sizeof(wp);
1108 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1109 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1110 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1111 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1112 wp.showCmd := SW_HIDE;
1113 SetWindowPlacement(Handle, @wp);
1116 if GikoSys.Setting.WindowMax then
1117 WindowState := wsMaximized;
1119 //
\83M
\83R
\83A
\83j
\83\81
1121 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1122 if FileExists(FileName) then
1123 Animate.FileName := FileName;
1131 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1132 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1133 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1136 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1137 FHistoryList := THistoryList.Create;
1139 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1140 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1141 TreeView, FTreeType);
1143 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1144 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1145 FavoriteDM.ReadFavorite;
1147 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1148 GikoDM.ArrangeAction.Execute;
1150 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1151 case GikoSys.Setting.ListWidthState of
1153 ViewPanel.Width := 1;
1154 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1155 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1158 ViewPanel.Width := GikoSys.Setting.ListWidth;
1159 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1160 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1163 ViewPanel.Width := GikoSys.Setting.ListWidth;
1164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1169 case GikoSys.Setting.ListHeightState of
1171 ViewPanel.Height := 1;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1176 ViewPanel.Height := GikoSys.Setting.ListHeight;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1181 ViewPanel.Height := GikoSys.Setting.ListHeight;
1182 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1183 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1188 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1189 CreateControlThread();
1191 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1192 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1194 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1197 BrowserBoardNameLabel.Caption := '';
1198 BrowserNameLabel.Caption := '';
1201 FTabHintIndex := -1;
1203 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1204 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1205 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1207 MakeDefaultINIFile();
1208 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1209 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1210 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1211 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1214 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1215 SetSelectComboBox();
1217 //
\83A
\83h
\83\8c\83X
\83o
\81[
1218 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1220 //
\83\8a\83\93\83N
\83o
\81[
1222 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1224 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1225 if not FileExists(GikoSys.GetBoardFileName) then begin
1226 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
1227 + '
\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
1228 + '
\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';
1229 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1230 GikoDM.NewBoardAction.Execute;
1233 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1234 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1236 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1237 // FLastRoundTime := 0;
1240 FHint := TResPopup.Create(Self);
1242 ListView.OnData := TListViewUtils.ListViewData;
1244 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1245 CabinetVisible( False );
1246 if GikoSys.Setting.CabinetVisible then begin
1247 i := CabinetSelectPopupMenu.Items.Count - 1;
1248 if GikoSys.Setting.CabinetIndex = i - 1 then
1249 GikoDM.CabinetHistoryAction.Execute
1250 else if GikoSys.Setting.CabinetIndex = i then
1251 GikoDM.CabinetFavoriteAction.Execute
1253 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1254 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1255 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1256 FIsIgnoreResize := rtResizing;
1257 GikoDM.CabinetBBSAction.Execute;
1260 ShowBBSTreeOld( BBSs[ 0 ] );
1261 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1264 //
\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
1265 for i := 1 to ParamCount do begin
1266 MoveToURL(ParamStr(i));
1269 GikoDM.RepaintStatusBar;
1270 StatusBarResize(Sender);
1272 dummy1.Caption := ItemReservPMenu.Caption;
1273 dummy1.Hint := ItemReservPMenu.Hint;
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1280 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1291 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1292 GikoSys.SetGikoMessage;
1294 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1300 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1301 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1302 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1304 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1309 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1310 procedure TGikoForm.SaveCoolBarSettings;
1313 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1315 SaveMainCoolBarSettings;
1316 SaveBoardCoolBarSettings;
1317 SaveBrowserCoolBarSettings;
1320 procedure TGikoForm.SaveMainCoolBarSettings;
1325 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1326 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1327 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1328 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1329 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1330 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1333 procedure TGikoForm.SaveBoardCoolBarSettings;
1338 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1339 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1340 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1341 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1342 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1343 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1346 procedure TGikoForm.SaveBrowserCoolBarSettings;
1351 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1352 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1353 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1354 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1355 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1356 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1359 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1360 procedure TGikoForm.LoadCoolBarSettings;
1366 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1367 MainCoolBar.Bands.BeginUpdate;
1369 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1370 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1371 CoolSet := GikoSys.Setting.MainCoolSet[i];
1372 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1373 FIsIgnoreResize := rtNone;
1374 SaveCoolBarSettings;
1377 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1378 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1379 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1382 MainCoolBar.Bands.EndUpdate;
1385 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1386 ListCoolBar.Bands.BeginUpdate;
1388 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1389 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1390 CoolSet := GikoSys.Setting.ListCoolSet[i];
1391 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1392 FIsIgnoreResize := rtNone;
1393 SaveCoolBarSettings;
1396 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1397 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1398 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1401 ListCoolBar.Bands.EndUpdate;
1404 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1405 BrowserCoolBar.Bands.BeginUpdate;
1407 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1408 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1409 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1410 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1411 FIsIgnoreResize := rtNone;
1412 SaveCoolBarSettings;
1415 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1416 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1417 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1420 BrowserCoolBar.Bands.EndUpdate;
1425 procedure TGikoForm.FormShow(Sender: TObject);
1427 if FStartUp then begin
1428 ShowWindow(Application.Handle, SW_HIDE);
1430 //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½
1431 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1432 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1433 GikoDM.StdToolBarVisibleActionExecute( nil );
1434 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1435 GikoDM.AddressBarVisibleActionExecute( nil );
1436 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1437 GikoDM.LinkBarVisibleActionExecute( nil );
1438 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1439 GikoDM.ListToolBarVisibleActionExecute( nil );
1440 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1441 GikoDM.ListNameBarVisibleActionExecute( nil );
1442 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1443 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1444 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1445 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1447 // CoolBar
\95\9c\8c³
1448 LoadCoolBarSettings;
1450 //
\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é
1451 // ResetBandInfo( ListCoolBar, ListToolBar );
1452 FIsIgnoreResize := rtNone;
1454 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1455 if GikoSys.Setting.TabAutoLoadSave then begin
1456 GikoDM.TabsOpenAction.Tag := 1;
1457 GikoDM.TabsOpenAction.Execute;
1458 GikoDM.TabsOpenAction.Tag := 0;
1461 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1462 SetGroupIndex(GikoDM.GikoFormActionList);
1468 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1470 // if GikoForm.WindowState <> wsMinimized then
1471 // SaveCoolBarSettings;
1473 if ( GikoSys.Setting.ShowDialogForEnd ) and
1474 (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
1479 if GikoSys.Setting.TabAutoLoadSave then begin
1480 GikoDM.TabsSaveAction.Execute;
1483 if (SearchDialog <> nil) then begin
1484 if (SearchDialog.Visible) then begin
1487 SearchDialog.Release;
1490 SearchDialog := nil;
1494 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1495 GikoDM.CloseAllEditorAction.Execute;
1497 Application.UnhookMainWindow(Hook);
1498 Application.Terminate;
1501 procedure TGikoForm.FormDestroy(Sender: TObject);
1504 // CoolSet: TCoolSet;
1505 wp : TWindowPlacement;
1508 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1510 MouseGesture.UnHook;
1514 ActiveListColumnSave;
1518 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1519 wp.length := sizeof(wp);
1520 GetWindowPlacement(Handle, @wp);
1521 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1522 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1523 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1524 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1525 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1527 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1528 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1529 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1530 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1531 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1532 if GikoDM.ArrangeAction.Checked then
1533 GikoSys.Setting.ListOrientation := gloVertical
1535 GikoSys.Setting.ListOrientation := gloHorizontal;
1536 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1541 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1542 if not GikoSys.Setting.ResRangeHold then
1543 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1546 if WindowState <> wsNormal then
1547 WindowState := wsNormal;
1548 SaveCoolBarSettings;
1550 GikoSys.Setting.WriteWindowSettingFile;
1551 GikoSys.Setting.WriteNameMailSettingFile;
1554 //
\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è
1555 //
\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¢
1557 //
\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
1559 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1561 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1562 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1564 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1566 //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é
1567 FavoriteDM.WriteFavorite;
1571 LockWindowUpdate(Self.Handle);
1573 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1574 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1575 GikoSys.Setting.ShowDialogForAllTabClose := false;
1576 GikoDM.AllTabCloseAction.Execute;
1577 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1581 for i := FBrowsers.Count - 1 downto 0 do begin
1582 TWebBrowser(FBrowsers[i]).Free;
1585 FBrowsers.Capacity := 0;
1590 if BrowserNullTab <> nil then begin
1591 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1592 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1594 BrowserNullTab.Free;
1600 TreeView.Items.BeginUpdate;
1601 TreeView.Items.GetFirstNode.Free;
1602 TreeView.Items.Clear;
1603 TreeView.Items.EndUpdate;
1607 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1609 //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
1610 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1614 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1616 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1628 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1630 RoundList.SaveRoundFile;
1644 FControlThread.Terminate;
1645 FControlThread.WaitFor;
1649 FControlThread.Free;
1651 //
\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é
1652 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1653 GikoForm.PlugInMenu.items[i].Free;
1655 GikoForm.PlugInMenu.Clear;
1658 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1659 // 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Å
1660 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1661 for i := Length(BoardGroups) - 1 downto 0 do begin
1662 //BoardGroups[i].Clear;
1663 BoardGroups[i].Free;
1667 for i := Length( BBSs ) - 1 downto 0 do begin
1668 if BBSs[ i ] <> nil then
1676 if FEvent <> nil then
1680 if FHint <> nil then begin
1681 FHint.ReleaseHandle;
1686 if TPreviewBrowser <> nil then begin
1687 FPreviewBrowser.Free;
1688 FPreviewBrowser := nil;
1692 LockWindowUpdate(0);
1695 //
\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
1696 procedure TGikoForm.SetBBSMenu;
1699 item : TBBSMenuItem;
1702 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1703 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1705 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1706 CabinetSelectPopupMenu.Items[ i ].Free;
1707 CabinetMenu.Items[ i ].Free;
1708 BBSSelectPopupMenu.Items[ i ].Free;
1714 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1715 for i := Length( BBSs ) - 1 downto 0 do begin
1717 item := TBBSMenuItem.Create( PopupMenu );
1718 item.Caption := BBSs[ i ].Title;
1719 item.Data := BBSs[ i ];
1720 item.OnClick := BBSMenuItemOnClick;
1721 CabinetSelectPopupMenu.Items.Insert( 0, item );
1722 item := TBBSMenuItem.Create( PopupMenu );
1723 item.Caption := BBSs[ i ].Title;
1724 item.Data := BBSs[ i ];
1725 item.OnClick := BBSMenuItemOnClick;
1726 CabinetMenu.Insert( 0, item );
1727 item := TBBSMenuItem.Create( PopupMenu );
1728 item.Caption := BBSs[ i ].Title;
1729 item.Data := BBSs[ i ];
1730 item.OnClick := BBSMenuItemOnClick;
1731 BBSSelectPopupMenu.Items.Insert( 0, Item );
1738 procedure TGikoForm.ReloadBBS;
1743 LockWindowUpdate(Self.Handle);
1745 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1746 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1747 GikoSys.Setting.ShowDialogForAllTabClose := false;
1748 GikoDM.AllTabCloseAction.Execute;
1749 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1750 SetContent(BrowserNullTab);
1751 //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
1752 TreeView.Items.Clear;
1754 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1756 RoundList.SaveRoundFile;
1759 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1765 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1767 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1772 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1774 FavoriteDM.WriteFavorite;
1779 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1780 for i := Length(BoardGroups) - 1 downto 0 do begin
1782 BoardGroups[i].Free;
1788 for i := Length( BBSs ) - 1 downto 0 do begin
1789 if BBSs[ i ] <> nil then
1798 FTreeType := gttNone;
1800 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1802 //
\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Æ)
1803 InitializeBoardPlugIns;
1805 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1807 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1808 for i := Length(BBSs) - 1 downto 0 do begin
1809 if not BBSs[i].IsBoardFileRead then
1810 GikoSys.ReadBoardFile(BBSs[i]);
1813 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1816 ShowBBSTree( BBSs[ 0 ] );
1818 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1819 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1820 TreeView, FTreeType);
1822 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1823 FavoriteDM.ReadFavorite;
1827 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1828 RoundList.LoadRoundBoardFile;
1829 RoundList.LoadRoundThreadFile;
1831 LockWindowUpdate(0);
1835 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1836 (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©)
1837 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1839 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1847 threadItem : TThreadItem;
1849 Protocol, Host, Path, Document, Port, Bookmark: string;
1854 ActiveFileName: string;
1860 //
\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ª
1861 // 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è)
1862 if Pos('about:..', Text) = 1 then
1863 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1866 if not( TObject(Sender) is TWebBrowser )then
1870 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1871 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1872 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1879 if PreviewTimer.Enabled then
1880 PreviewTimer.Enabled := False;
1881 Application.CancelHint;
1883 if GetActiveContent <> nil then
1884 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1886 ActiveFileName := '';
1888 FActiveContent := nil;
1892 StatusBar.Panels[1].Text := Text2;
1894 if FHint <> nil then begin
1895 FHint.ReleaseHandle;
1898 if FPreviewBrowser <> nil then
1899 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1901 if not GikoSys.Setting.UnActivePopup then
1902 if not GikoForm.Active then
1905 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1906 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1909 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1910 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1911 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1912 if FPreviewBrowser = nil then begin
1913 FPreviewBrowser := TPreviewBrowser.Create(Self);
1914 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1915 TOleControl(FPreviewBrowser).Parent := nil;
1917 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1918 FPreviewURL := Text2;
1919 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1920 PreviewTimer.Enabled := True;
1921 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1922 if Pos('mailto:', Text2) = 1 then begin
1923 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1924 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1926 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1927 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1928 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1929 if (Assigned(e)) then begin
1930 tmp2 := ZenToHan(e.Get_outerText);
1931 if (GikoSys.IsNumeric(tmp2)) then begin
1932 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1933 wkIntSt := StrToInt64(tmp2);
1934 wkIntTo := StrToInt64(tmp2);
1935 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1936 FHint.PopupType := gptThread;
1937 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1939 FHint.PopupType := gptRaw;
1944 threadItem := GetActiveContent;
1945 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1946 PathRec := Gikosys.Parse2chURL2(URL);
1947 if (PathRec.FNoParam) then begin
1951 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1953 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1955 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1957 URL := GikoSys.GetBrowsableThreadURL( URL );
1958 wkIntSt := PathRec.FSt;
1959 wkIntTo := PathRec.FTo;
1961 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1964 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1966 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1968 end else if wkIntSt > wkIntTo then begin
1973 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1978 threadItem := BBSsFindThreadFromURL( URL );
1980 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1981 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1982 if board <> nil then begin
1983 if not board.IsThreadDatRead then
1984 GikoSys.ReadSubjectFile( board );
1985 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1989 if threadItem <> nil then begin
1990 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1991 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
1992 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
1996 FHint.PopupType := gptThread;
1997 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2002 if FHint.PopupType = gptRaw then begin
2003 if FHint.Caption <> '' then
2006 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2012 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2016 FEnabledCloseButton := Enabled;
2017 SysMenu := GetSystemMenu(Handle, False);
2019 if Enabled then begin
2020 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2022 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2025 DrawMenuBar(Handle);
2028 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2029 var AllowChange: Boolean);
2031 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2032 // if FTreeType = gtt2ch then
2033 // FSortIndex := -1;
2036 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2037 Shift: TShiftState);
2041 if GetActiveList is TBoard then begin
2043 VK_BACK:; // UpFolderButtonClick(Sender);
2044 VK_SPACE: ListDoubleClick(Shift);
2045 VK_RETURN: ListClick;
2048 if ListView.Selected <> nil then begin
2049 pos.X := ListView.Column[ 0 ].Width;
2050 pos.Y := ListView.Selected.Top;
2052 pos.X := ListView.Left;
2053 pos.Y := ListView.Top;
2055 Windows.ClientToScreen( ListView.Handle, pos );
2056 ListPopupMenu.Popup( pos.X, pos.Y );
2059 end else begin // TBBS, TCategory
2061 VK_BACK:; // UpFolderButtonClick(Sender);
2062 VK_SPACE: ListClick;
2063 VK_RETURN: ListDoubleClick(Shift);
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 );
2080 function TGikoForm.GetHttpState: Boolean;
2082 Result := FHttpState;
2085 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2086 Column: TListColumn);
2090 vSortIndex : Integer;
2091 vSortOrder : Boolean;
2093 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2094 if TObject( FActiveList ) is TBBS then begin
2095 orderList := GikoSys.Setting.BBSColumnOrder;
2096 vSortIndex := GikoSys.Setting.BBSSortIndex;
2097 vSortOrder := GikoSys.Setting.BBSSortOrder;
2098 end else if TObject( FActiveList ) is TCategory then begin
2099 orderList := GikoSys.Setting.CategoryColumnOrder;
2100 vSortIndex := GikoSys.Setting.CategorySortIndex;
2101 vSortOrder := GikoSys.Setting.CategorySortOrder;
2102 end else if TObject( FActiveList ) is TBoard then begin
2103 orderList := GikoSys.Setting.BoardColumnOrder;
2104 vSortIndex := GikoSys.Setting.BoardSortIndex;
2105 vSortOrder := GikoSys.Setting.BoardSortOrder;
2109 id := Integer( orderList[ idx ] );
2112 if vSortIndex = id then
2113 vSortOrder := not vSortOrder
2115 vSortOrder := id = 0;
2118 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2121 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2122 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2126 DefaultDraw := True;
2128 DefaultDraw := False;
2129 if (cdsSelected in State) or (cdsHot in State) then begin
2130 Sender.Canvas.Brush.Color := clHighlight;
2131 Sender.Canvas.Font.Color := clHighlightText;
2133 Sender.Canvas.Brush.Color := clBtnFace;
2134 Sender.Canvas.Font.Color := clBtnText;
2136 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2137 Sender.Canvas.FillRect(ARect);
2138 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2141 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2146 Nodes := TreeView.Items;
2148 for i := 0 to Nodes.Count - 1 do begin
2149 if Nodes.Item[i].Data = Data then begin
2150 Result := Nodes.Item[i];
2157 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2158 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2159 Headers: OleVariant; var Cancel: WordBool);
2164 kMenuName: string = 'menu:';
2167 if Pos(kMenuName, URL) <> 0 then begin
2168 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2170 if not GikoSys.IsNumeric(sNo) then Exit;
2174 KokoPopupMenu.Tag := StrToInt(sNo);
2175 KokoPopupMenu.Popup(p.x, p.y);
2176 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2177 Cancel := not GikoSys.Setting.OpenMailer;
2182 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2183 const ARect: TRect; var DefaultDraw: Boolean);
2187 IsBoardNode: Boolean;
2193 Category: TCategory;
2197 DefaultDraw := True;
2199 if FTreeType = gttHistory then Exit;
2201 TreeView.Canvas.Font.Color := clBlue;
2202 IsBoardNode := False;
2203 for i := 0 to TreeView.Items.Count - 1 do begin
2205 if not TreeView.Items[i].IsVisible then
2208 if TObject(TreeView.Items[i].Data) is TCategory then begin
2209 if TreeView.Items[i].Expanded then
2212 IsBoardNode := False;
2213 Category := TCategory(TreeView.Items[i].Data);
2214 for j := 0 to Category.Count - 1 do begin
2215 Board := Category.Items[j];
2216 if Board <> nil then begin
2217 if Board.UnRead > 0 then begin
2225 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2226 IsBoardNode := True;
2227 Board := TBoard(TreeView.Items[i].Data);
2229 Cnt := Board.UnRead;
2235 Bitmap := TBitmap.Create;
2237 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2238 Bitmap.Canvas.Font.Style := [fsBold];
2239 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2244 NodeRect := TreeView.Items[i].DisplayRect(True);
2247 CntText := '(' + IntToStr(Cnt) + ')'
2248 else if Cnt = 1 then
2252 TextWidth := TreeView.Canvas.TextWidth(CntText);
2254 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2256 NodeRect.Left + NodeWidth + TextWidth + 8,
2258 DrawText(TreeView.Canvas.Handle,
2262 DT_SINGLELINE or DT_VCENTER);
2264 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2267 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2268 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2271 Category: TCategory;
2274 DefaultDraw := True;
2276 if FTreeType = gttHistory then Exit;
2278 TreeView.Canvas.Font.Style := [];
2279 if Node <> nil then begin
2280 if TObject(Node.Data) is TCategory then begin
2281 Category := TCategory(Node.Data);
2282 for i := 0 to Category.Count - 1 do begin
2283 Board := Category.Items[i];
2284 if Board <> nil then begin
2285 if Board.UnRead > 0 then begin
2286 TreeView.Canvas.Font.Style := [fsBold];
2291 end else if TObject(Node.Data) is TBoard then begin
2292 Board := TBoard(Node.Data);
2293 if Board.UnRead > 0 then
2294 TreeView.Canvas.Font.Style := [fsBold];
2299 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2301 TreeView.Invalidate;
2303 if TObject(Node.Data) is TBBS then begin
2304 TBBS(Node.Data).NodeExpand := True;
2305 end else if TObject(Node.Data) is TCategory then begin
2306 TCategory(Node.Data).NodeExpand := True;
2307 end else if TObject(Node.Data) is TBoard then begin
2308 TBoard(Node.Data).NodeExpand := True;
2312 procedure TGikoForm.ListViewAllSelect;
2317 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2319 AddMessageList(Msg, nil, Icon);
2321 // *************************************************************************
2322 //!
\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
2323 // *************************************************************************
2324 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2328 boardPlugIn : TBoardPlugIn;
2333 if Item.DownType = gdtBoard then
2334 ATitle := Item.Board.Title
2336 ATitle := Item.ThreadItem.Title;
2338 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2340 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2342 if Item.DownType = gdtBoard then begin
2345 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2346 if GetActiveList = Item.Board then begin
2348 //
\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é
2349 if (GikoSys.Setting.AutoSortThreadList) then begin
2350 GikoSys.Setting.BoardSortIndex := 0;
2351 GikoSys.Setting.BoardSortOrder := True;
2353 Sort.SetSortDate(Now());
2354 SetActiveList(Item.Board);
2356 Item.Board.Modified := True;
2357 Item.Board.IsThreadDatRead := True;
2360 end else if Item.DownType = gdtThread then begin
2363 Item.ThreadItem.NewArrival := True;
2364 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2365 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2366 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2367 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2368 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2369 Item.ThreadItem.Title := Res.FTitle;
2370 ATitle := Item.ThreadItem.Title;
2371 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2372 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2373 ATitle := Res.FTitle;
2375 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2376 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2377 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2381 if GikoSys.Setting.BrowserTabVisible then begin
2382 if GetActiveContent = Item.ThreadItem then
2383 InsertBrowserTab(Item.ThreadItem)
2384 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2385 InsertBrowserTab(Item.ThreadItem, True)
2387 InsertBrowserTab(Item.ThreadItem, False);
2390 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2391 InsertBrowserTab(Item.ThreadItem);
2394 Application.ProcessMessages;
2396 if Item.State = gdsComplete then begin
2398 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2402 PlaySound('NewDiff');
2403 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2408 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2409 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2410 Item.ThreadItem.Round := False;
2411 //Item.ThreadItem.RoundName := '';
2412 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);
2415 //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
2416 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2417 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2418 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2419 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2420 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2421 case GikoForm.ViewType of
2422 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2423 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2424 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2425 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2426 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2427 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2430 RefreshListView(Item.ThreadItem);
2433 end else if Item.State = gdsNotModify then begin
2435 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2436 //SetContent(Item.ThreadItem);
2437 InsertBrowserTab(Item.ThreadItem);
2439 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2440 PlaySound('NoChange');
2441 Screen.Cursor := crDefault;
2442 end else if Item.State = gdsAbort then begin
2444 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2445 end else if Item.State = gdsError then begin
2450 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2451 // if Item.ResponseCode = 302 then
2452 // 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);
2458 if FWorkCount < 0 then FWorkCount := 0;
2459 if FWorkCount = 0 then begin
2461 Animate.Active := False;
2463 Screen.Cursor := crDefault;
2470 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2472 // SetProgressValue(Number, 0, AWorkCountMax);
2473 // ProgressBar.Visible := True;
2474 ProgressBar.Position := 0;
2475 ProgressBar.Max := AWorkCountMax;
2476 FDownloadTitle := AWorkTitle;
2477 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2478 FDownloadMax := AWorkCountMax;
2481 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2483 ProgressBar.Position := 0;
2484 if FDownloadMax <> 0 then
2485 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2488 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2490 ProgressBar.Position := AWorkCount;
2491 // SetProgressValue(Number, AWorkCount);
2492 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2495 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2497 ListItem: TListItem;
2499 MessageListView.Items.BeginUpdate;
2501 ListItem := MessageListView.Items.Add;
2502 ListItem.Caption := ACaption;
2503 ListItem.Data := AObject;
2504 ListItem.MakeVisible(False);
2506 gmiOK: ListItem.ImageIndex := 0;
2507 gmiSAD: ListItem.ImageIndex := 1;
2508 gmiNG: ListItem.ImageIndex := 2;
2509 gmiWhat: ListItem.ImageIndex := 3;
2512 MessageListView.Items.EndUpdate;
2517 function TGikoForm.InsertBrowserTab(
2518 ThreadItem : TThreadItem;
2519 ActiveTab : Boolean = True
2522 i, j, idx : Integer;
2523 favItem : TFavoriteThreadItem;
2524 newBrowser : TBrowserRecord;
2528 if Threaditem = nil then Exit;
2530 if ThreadItem.IsLogFile then begin
2531 //
\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é
2532 //
\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é
2533 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2534 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2535 j := FBrowsers.IndexOf(FActiveContent.Browser);
2536 if j = BROWSER_COUNT - 1 then
2537 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2539 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2540 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2543 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2544 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2545 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2546 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2547 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2548 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2549 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2550 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2554 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2555 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2556 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2558 if ActiveTab then begin
2559 BrowserTab.TabIndex := i;
2560 BrowserTab.OnChange(nil);
2567 idx := BrowserTab.TabIndex;
2568 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2569 newBrowser := TBrowserRecord.Create;
2570 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2571 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2572 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2576 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2577 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2578 //newBrowser.Browser.Navigate(BLANK_HTML);
2579 newBrowser.thread := ThreadItem;
2580 newBrowser.Repaint := true;
2581 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2583 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2584 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2585 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2589 if ActiveTab then begin
2590 BrowserTab.TabIndex := 0;
2594 newBrowser := TBrowserRecord.Create;
2595 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2596 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2597 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2601 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2602 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2603 //newBrowser.Browser.Navigate(BLANK_HTML);
2604 newBrowser.thread := ThreadItem;
2605 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2606 newBrowser.Repaint := true;
2608 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2609 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2610 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2614 if ActiveTab then begin
2615 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2616 BrowserTab.TabIndex := 0
2618 BrowserTab.TabIndex := i;
2621 Result := newBrowser;
2622 if(ActiveTab) or (idx = -1) then begin
2623 BrowserTab.OnChange(nil);
2626 if BrowserNullTab = nil then begin
2627 BrowserNullTab := TBrowserRecord.Create;
2628 BrowserNullTab.Browser := Browser;
2630 // if BrowserNullTab.thread <> ThreadItem then begin
2631 // BrowserNullTab.Movement := '';
2633 BrowserNullTab.thread := ThreadItem;
2634 Result := BrowserNullTab;
2635 BrowserTab.TabIndex := -1;
2636 SetContent(BrowserNullTab);
2639 if GikoSys.Setting.URLDisplay then
2640 AddressComboBox.Text := ThreadItem.URL;
2644 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2653 ThreadItem: TThreadItem;
2654 Thread: TBrowserRecord;
2655 ThreadTitle, ThreadPTitle: string;
2656 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2659 idx := BrowserTab.TabIndex;
2660 if (FActiveContent <> nil) and
2661 (FActiveContent.Thread <> Thread.Thread) and
2662 (FActiveContent.Browser <> nil) and
2663 (Assigned(FActiveContent.Browser.Document)) then begin
2666 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2669 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2674 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2675 Thread.Browser.Navigate(BLANK_HTML);
2676 BrowserBoardNameLabel.Caption := '';
2677 ItemBoardImage.Picture := nil;
2678 BrowserNameLabel.Caption := '';
2679 ItemImage.Picture := nil;
2680 BrowserNullTab.Thread := nil;
2681 //TOleControl(BrowserNullTab.Browser).Visible := true;
2682 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2683 FActiveContent := nil;
2685 end else if Thread.Browser = nil then begin
2686 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2687 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2688 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2689 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2690 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2694 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2695 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2698 ThreadTitle := Thread.Thread.Title;
2699 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2700 //ThreadScrollTop := Thread.Thread.ScrollTop;
2701 ThreadIsLog := Thread.Thread.IsLogFile;
2702 ThreadItem := Thread.Thread;
2703 ThreadNewArraical := Thread.Thread.NewArrival;
2704 //ThreadUnRead := Thread.Thread.UnRead;
2705 BBSID := ThreadItem.ParentBoard.BBSID;
2706 FileName := ThreadItem.FileName;
2708 if GetCapture = ListView.Handle then
2711 Screen.Cursor := crHourGlass;
2715 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2716 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2717 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2719 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2720 if (not Assigned(Thread.Browser.Document)) then begin
2721 Thread.Browser.Navigate('about:blank');
2723 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2724 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2725 Application.ProcessMessages;
2726 if idx <> BrowserTab.TabIndex then begin
2731 if (Thread <> nil) and (ThreadItem <>nil) then begin
2732 BrowserBoardNameLabel.Caption := ThreadPTitle;
2733 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2734 BrowserNameLabel.Caption := ThreadTitle;
2735 ItemImage.Picture := nil;
2737 if ThreadNewArraical then
2738 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2740 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2742 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2744 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2745 BrowserNameLabel.Left := ItemImage.Left + 20;
2748 //ActiveContent
\81@
\82Ì
\8dX
\90V
2749 FActiveContent := Thread;
2751 if not ThreadIsLog then begin
2752 Self.Caption := GikoDataModule.CAPTION_NAME ;
2753 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2754 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2756 Thread.Browser.BringToFront;
2757 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2758 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2760 doc.charset := 'Shift_JIS';
2767 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2768 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2769 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2770 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2771 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2772 //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«
2773 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2774 if Thread.Repaint then begin
2775 Thread.Repaint := false;
2777 Thread.Browser.OnStatusTextChange := nil;
2778 LockWindowUpdate(Thread.Browser.ParentWindow);
2779 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2780 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2781 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2785 RefreshListView(ThreadItem);
2787 Screen.Cursor := crDefault;
2791 function TGikoForm.GetActiveContent: TThreadItem;
2794 if FActiveContent <> nil then
2795 Result := FActiveContent.Thread
2804 procedure TGikoForm.SetActiveList(Obj: TObject);
2808 // if FActiveList <> Obj then begin
2811 if ListView.Selected <> nil then
2812 idx := ListView.Selected.Index
2818 ListView.Items.Count := 0;
2819 ListView.Items.Clear;
2820 ListView.Selected := nil;
2821 // ListView.Columns.Clear;
2822 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2823 and (FActiveContent.Thread.IsLogFile) then begin
2825 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2827 on E: Exception do begin
2828 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2829 //
\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é
2830 ReleaseBrowser(FActiveContent);
2831 FActiveContent.Thread := nil;
2832 Self.Caption := GikoDataModule.CAPTION_NAME;
2836 Self.Caption := GikoDataModule.CAPTION_NAME;
2837 //Application.Title := CAPTION_NAME;
2839 // ActiveListColumnSave;
2841 Screen.Cursor := crHourGlass;
2843 if Obj is TBBS then begin
2844 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2845 end else if Obj is TCategory then begin
2846 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2847 end else if Obj is TBoard then begin
2848 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2851 Screen.Cursor := crDefault;
2854 if idx >= 0 then begin
2855 if idx >= ListView.Items.Count then
2856 idx := ListView.Items.Count - 1;
2857 ListView.ItemIndex := idx;
2858 ListView.ItemFocused := ListView.Items.Item[ idx ];
2864 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2865 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2866 function TGikoForm.GetActiveList: TObject;
2868 Result := FActiveList;
2871 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2873 SetListViewType(AViewType, '', False);
2876 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2881 for i := Length( BBSs ) - 1 downto 0 do begin
2882 BBSs[i].SelectText := SelectText;
2883 BBSs[i].KubetsuChk := KubetsuChk;
2885 ViewType := AViewType;
2886 if ActiveList is TBoard then begin
2887 Board := TBoard(ActiveList);
2889 //gvtAll: ListView.Items.Count := Board.Count;
2890 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2891 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2892 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2893 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2894 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2898 SetActiveList(Board);
2902 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2903 const ARect: TRect; var DefaultDraw: Boolean);
2909 if ListView.Items.Count = 0 then begin
2910 DefaultDraw := true;
2911 ListView.Canvas.Brush.Color := ListView.Color;
2912 ListView.Canvas.FillRect(ARect);
2916 ListView.Canvas.Font.Color := clWindowText;
2917 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2920 ListView.Canvas.Font.Color := clBlue;
2921 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';
2924 ListView.Canvas.Font.Color := clGreen;
2925 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2928 ListView.Canvas.Font.Color := clFuchsia;
2929 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';
2932 ListView.Canvas.Font.Color := clMaroon;
2933 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2936 ListView.Canvas.Font.Color := clNavy;
2937 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';
2938 if GetActiveList is TBoard then
2939 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2947 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2948 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2949 ListView.Canvas.TextOut(p.X, p.Y, s);
2951 DefaultDraw := True;
2955 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2957 Item: TDownloadItem;
2959 if not Board.IsThreadDatRead then
2960 GikoSys.ReadSubjectFile(Board);
2961 Item := TDownloadItem.Create;
2963 Item.Board := Board;
2964 Item.DownType := gdtBoard;
2965 Item.ForceDownload := ForceDownload;
2966 FControlThread.AddItem(Item);
2967 if FWorkCount = 0 then begin
2969 Animate.Active := True;
2972 Screen.Cursor := crAppStart;
2980 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2982 Item: TDownloadItem;
2984 Item := TDownloadItem.Create;
2986 Item.ThreadItem := ThreadItem;
2987 Item.DownType := gdtThread;
2988 Item.ForceDownload := ForceDownload;
2989 FControlThread.AddItem(Item);
2990 if FWorkCount = 0 then begin
2992 Animate.Active := True;
2995 Screen.Cursor := crAppStart;
3003 procedure TGikoForm.PlaySound(SoundEventName: string);
3007 if not GikoSys.Setting.Mute then begin
3008 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3009 if FileExists(FileName) then begin
3010 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3011 sndPlaySound(nil, SND_SYNC);
3012 Application.ProcessMessages;
3014 sndPlaySound(PChar(FileName), SND_ASYNC);
3020 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3021 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3023 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3026 procedure TGikoForm.ShowBBSTreeOld(
3034 FavoriteTreeView.Visible := False;
3035 FavoriteToolBar.Hide;
3036 TreeView.Visible := True;
3038 b := CabinetSelectPopupMenu.Items.Count - 1;
3039 for i := 0 to b do begin
3040 item := CabinetSelectPopupMenu.Items[ i ];
3041 if item is TBBSMenuItem then begin
3042 if TBBSMenuItem( item ).Data = inBBS then begin
3043 item.Checked := True;
3044 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3045 CabinetMenu.Items[ i ].Checked := True;
3046 GikoSys.Setting.CabinetIndex := i;
3050 item.Checked := False;
3051 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3052 CabinetMenu.Items[ i ].Checked := False;
3054 CabinetSelectToolButton.Caption := inBBS.Title;
3056 GikoDM.CabinetHistoryAction.Checked := False;
3057 GikoDM.CabinetFavoriteAction.Checked := False;
3059 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3060 FTreeType := gtt2ch;
3061 HistoryToolBar.Hide;
3062 FActiveBBS := inBBS;
3063 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3064 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3065 //?c???[??g?b?v?????I????
3066 if GetActiveList = nil then
3067 TreeView.Selected := TreeView.Items[0]
3069 for i := 0 to TreeView.Items.Count - 1 do begin
3070 if TreeView.Items[i].Data = GetActiveList then begin
3071 TreeView.Selected := TreeView.Items[i];
3075 TreeView.Selected := TreeView.Items[0]
3083 procedure TGikoForm.ShowBBSTree(
3092 FavoriteTreeView.Visible := False;
3093 FavoriteToolBar.Hide;
3094 TreeView.Visible := True;
3096 b := CabinetSelectPopupMenu.Items.Count - 1;
3097 for i := 0 to b do begin
3098 item := CabinetSelectPopupMenu.Items[ i ];
3099 if item is TBBSMenuItem then begin
3100 if TBBSMenuItem( item ).Data = inBBS then begin
3101 item.Checked := True;
3102 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3103 CabinetMenu.Items[ i ].Checked := True;
3104 GikoSys.Setting.CabinetIndex := i;
3108 item.Checked := False;
3109 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3110 CabinetMenu.Items[ i ].Checked := False;
3112 CabinetSelectToolButton.Caption := inBBS.Title;
3114 GikoDM.CabinetHistoryAction.Checked := False;
3115 GikoDM.CabinetFavoriteAction.Checked := False;
3117 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3118 or (not (CabinetPanel.Visible)) then begin
3119 FTreeType := gtt2ch;
3120 HistoryToolBar.Hide;
3121 FActiveBBS := inBBS;
3122 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3123 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3124 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3125 if GetActiveList = nil then begin
3127 TreeClick( TreeView.Items[0] );
3131 for i := 0 to TreeView.Items.Count - 1 do begin
3132 if TreeView.Items[i].Data = GetActiveList then begin
3133 TreeClick( TreeView.Items[i] );
3137 TreeClick( TreeView.Items[0] );
3145 procedure TGikoForm.ShowHistoryTree;
3150 if CabinetPanel.Visible then begin
3151 if FTreeType = gttHistory then begin
3152 CabinetVisible( False );
3153 GikoDM.CabinetHistoryAction.Checked := False;
3155 GikoDM.CabinetHistoryAction.Checked := True;
3158 CabinetVisible( True );
3159 GikoDM.CabinetHistoryAction.Checked := True;
3162 // BBS...BBS, History, Favorite
3163 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3165 FavoriteTreeView.Visible := False;
3166 TreeView.Visible := True;
3168 GikoDM.CabinetBBSAction.Checked := False;
3169 GikoDM.CabinetFavoriteAction.Checked := False;
3171 if FTreeType <> gttHistory then begin
3172 b := CabinetSelectPopupMenu.Items.Count - 1;
3173 for i := 0 to b do begin
3174 item := CabinetSelectPopupMenu.Items[ i ];
3175 if item is TBBSMenuItem then begin
3176 item.Checked := False;
3177 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3178 CabinetMenu.Items[ i ].Checked := False;
3182 FTreeType := gttHistory;
3183 HistoryToolBar.Show;
3184 FavoriteToolBar.Hide;
3186 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3190 procedure TGikoForm.SetHistoryTreeNode;
3194 Item: TFavoriteThreadItem;
3196 TreeView.Items.BeginUpdate;
3198 TreeView.Items.Clear;
3199 for i := 0 to FHistoryList.Count - 1 do begin
3200 Item := TFavoriteThreadItem(FHistoryList[i]);
3201 Node := TreeView.Items.Add(nil, Item.Title);
3203 if Item.Item.NewArrival then begin
3204 Node.ImageIndex := ITEM_ICON_THREADNEW1;
3205 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
3207 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3208 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3211 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
3212 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
3213 Node.ImageIndex := ITEM_ICON_THREADLOG1;
3214 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
3218 TreeView.Items.EndUpdate;
3222 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3224 ChangeEvent: TTVChangedEvent;
3225 ChangingEvent: TTVChangingEvent;
3229 if Item is TCategory then
3230 bbs := TCategory( Item ).ParenTBBS
3231 else if Item is TBoard then
3232 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3236 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3237 if Item <> FActiveList then begin
3239 ChangingEvent := nil;
3241 if not CallEvent then begin
3242 ChangeEvent := TreeView.OnChange;
3243 ChangingEvent := TreeView.OnChanging;
3246 if not CallEvent then begin
3247 TreeView.OnChange := nil;
3248 TreeView.OnChanging := nil;
3250 //Application.ProcessMessages;
3251 for i := 0 to TreeView.Items.Count - 1 do begin
3252 if TreeView.Items[i].Data = Item then begin
3253 TreeView.Items[i].Selected := True;
3255 TreeClick(TreeView.Items[i]);
3259 //Application.ProcessMessages;
3261 if not CallEvent then begin
3262 TreeView.OnChange := ChangeEvent;
3263 TreeView.OnChanging := ChangingEvent;
3268 if Item <> FActiveList then begin
3269 ActiveListColumnSave;
3270 if (Item is TBBS) or (Item is TCategory) then begin
3271 ListView.Columns.Clear;
3272 SetActiveList( Item );
3273 end else if Item is TBoard then begin
3274 if not TBoard( Item ).IsThreadDatRead then begin
3275 Screen.Cursor := crHourGlass;
3277 if not TBoard( Item ).IsThreadDatRead then
3278 GikoSys.ReadSubjectFile(TBoard( Item ));
3280 Screen.Cursor := crDefault;
3283 Sort.SetSortDate(Now());
3284 SetActiveList( Item );
3289 if Item is TBoard then begin // not TCategory
3290 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3291 if GikoSys.Setting.ListWidthState = glsMax then begin
3292 GikoDM.BrowserMinAction.Execute;
3293 if GikoForm.Visible then
3297 if GikoSys.Setting.ListHeightState = glsMax then begin
3298 GikoDM.BrowserMinAction.Execute;
3299 if GikoForm.Visible then
3306 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3307 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3309 listItem : TListItem;
3310 threadItem : TThreadItem;
3317 if not (GetActiveList is TBoard) then Exit;
3318 listItem := ListView.GetItemAt( X, Y );
3319 if listItem = nil then Exit;
3320 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3322 threadItem := TThreadItem(ListItem.Data);
3323 InsertBrowserTab(threadItem, False);
3324 if threadItem.IsLogFile then
3325 ListView.UpdateItems(listItem.Index, listItem.Index);
3329 //
\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Å
3330 if (ssDouble in Shift) then
3331 ListDoubleClick(Shift)
3339 Windows.ClientToScreen( ListView.Handle, pos );
3340 ListPopupMenu.Popup( pos.X, pos.Y );
3346 procedure TGikoForm.ListClick;
3348 ListItem: TListItem;
3349 ThreadItem: TThreadItem;
3351 if ListView.SelCount <> 1 then Exit;
3352 ListItem := ListView.Selected;
3353 if ListItem = nil then Exit;
3354 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3356 ThreadItem := TThreadItem(ListItem.Data);
3357 if ThreadItem.IsLogFile then begin
3358 InsertBrowserTab(ThreadItem);
3359 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3361 InsertBrowserTab(ThreadItem);
3364 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3365 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3366 if GikoSys.Setting.ListWidthState = glsMin then begin
3367 GikoDM.BrowserMaxAndFocusAction.Execute;
3370 if GikoSys.Setting.ListHeightState = glsMin then begin
3371 GikoDM.BrowserMaxAndFocusAction.Execute;
3377 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3379 ThreadItem: TThreadItem;
3382 shiftDown := (ssShift in Shift);
3384 if ListView.Selected = nil then Exit;
3386 if TObject(ListView.Selected.Data) is TCategory then begin
3387 SelectTreeNode(ListView.Selected.Data, True);
3388 end else if TObject(ListView.Selected.Data) is TBoard then begin
3389 SelectTreeNode(ListView.Selected.Data, True)
3390 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3391 Application.ProcessMessages;
3392 ThreadItem := TThreadItem(ListView.Selected.Data);
3393 DownloadContent(ThreadItem, shiftDown);
3395 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3396 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3397 if GikoSys.Setting.ListWidthState = glsMin then begin
3398 GikoDM.BrowserMaxAction.Execute;
3399 GikoDM.SetFocusForBrowserAction.Execute;
3402 if GikoSys.Setting.ListHeightState = glsMin then begin
3403 GikoDM.BrowserMaxAction.Execute;
3404 GikoDM.SetFocusForBrowserAction.Execute;
3411 procedure TGikoForm.BrowserMovement(const AName: string);
3413 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3414 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3415 and (FActiveContent <> nil) then begin
3416 FActiveContent.Move(AName);
3420 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3422 if TObject(Node.Data) is TBBS then begin
3423 TBBS(Node.Data).NodeExpand := False;
3424 end else if TObject(Node.Data) is TCategory then begin
3425 TCategory(Node.Data).NodeExpand := False;
3426 end else if TObject(Node.Data) is TBoard then begin
3427 TBoard(Node.Data).NodeExpand := False;
3429 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3430 TreeClick(TreeView.Selected);
3434 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3436 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3438 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3440 TreeSplitter.Visible := isVisible;
3441 CabinetPanel.Visible := isVisible;
3442 GikoDM.CabinetVisibleAction.Checked := isVisible;
3445 procedure TGikoForm.SelectListItem(List: TList);
3447 TmpListItem: TListItem;
3451 TmpListItem := ListView.Selected;
3452 while TmpListItem <> nil do begin
3453 List.Add(TmpListItem.Data);
3454 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3459 procedure TGikoForm.FormResize(Sender: TObject);
3462 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3463 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3465 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3466 if GikoSys.Setting.ListWidthState = glsMin then begin
3467 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3468 ViewPanel.Width := ThreadMainPanel.Width - 80;
3471 if GikoSys.Setting.ListHeightState = glsMin then begin
3472 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3473 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3477 FIsIgnoreResize := rtResizing;
3478 PostMessage( Handle, USER_RESIZED, 0, 0 );
3483 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3487 FTabHintIndex := -1;
3488 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3489 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3490 DeleteTab(i, BrowserTab.TabIndex);
3495 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3499 FTabHintIndex := -1;
3500 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3501 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3502 DeleteTab(i, BrowserTab.TabIndex);
3507 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3513 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3514 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3515 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3518 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3520 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3521 FActiveContent := nil;
3522 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3523 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3525 FBrowsers.Move(j, BROWSER_COUNT - 1);
3527 BrowserTab.Tabs.BeginUpdate;
3529 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3530 if ( BrowserTab.Tabs.Count - 1 = index ) and
3531 ( BrowserTab.TabRect(index).Left
3532 <= BrowserTab.DisplayRect.Left ) then begin
3533 BrowserTab.ScrollTabs(-1);
3535 BrowserTab.Tabs.Delete(index);
3536 if selectIndex > index then begin
3537 BrowserTab.TabIndex := selectIndex - 1;
3539 if BrowserTab.Tabs.Count -1 >= selectIndex then
3540 BrowserTab.TabIndex := selectIndex
3542 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3545 BrowserTab.Tabs.EndUpdate;
3547 if BrowserTab.Tabs.Count = 0 then begin
3548 BrowserNullTab.Thread := nil;
3550 if(BrowserTab.TabIndex <> -1) and
3551 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3552 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3553 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3554 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3556 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3560 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3561 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3562 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3563 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3566 if( FActiveContent = nil) then
3567 BrowserTab.OnChange(nil);
3569 function TGikoForm.Hook(var Message: TMessage): Boolean;
3571 //
\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Ì
3572 //
\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ð
3576 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3578 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3582 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3584 bBoard, bCategory : Boolean;
3586 bBoard := (GetActiveList is TBoard);
3587 bCategory := (GetActiveList is TCategory);
3588 ItemRoundPMenu.Visible := bBoard;
3589 ItemReservPMenu.Visible := bBoard;
3590 LPMSep01.Visible := bBoard;
3591 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3592 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3593 LPMSep02.Visible := bCategory or bBoard;
3594 KidokuPMenu.Visible := bBoard;
3595 MidokuPMenu.Visible := bBoard;
3596 UrlCopyPMenu.Visible := bCategory or bBoard;
3597 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3598 AllSelectPMenu.Visible := bCategory or bBoard;
3599 LPMSep05.Visible := bCategory or bBoard;
3600 DeletePMenu.Visible := bBoard;
3601 LPMSep06.Visible := bCategory or bBoard;
3602 BoardFavoriteAddMenu.Visible := bCategory;
3603 ThreadFavoriteAddMenu.Visible := bBoard;
3604 SaveThreadFile.Visible := bBoard;
3605 AddRoundNameMenu(ItemReservPMenu);
3606 AddRoundNameMenu(ListReservPMenu);
3609 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3611 FClickNode := TreeView.Selected;
3612 if FClickNode = nil then begin
3613 TreeSelectThreadPupupMenu.Visible := False;
3614 TreeSelectBoardPupupMenu.Visible := False;
3615 TPMSep01.Visible := False;
3616 TreeSelectURLPupupMenu.Visible := False;
3617 TreeSelectNamePupupMenu.Visible := False;
3618 TreeSelectNameURLPupupMenu.Visible := False;
3619 TreeSelectFavoriteAddPupupMenu.Visible := False;
3620 TreeSelectLogDeleteSeparator.Visible := False;
3621 TreeSelectLogDeletePopupMenu.Visible := False;
3622 end else if TObject(FClickNode.Data) is TBoard then begin
3623 TreeSelectThreadPupupMenu.Visible := False;
3624 TreeSelectBoardPupupMenu.Visible := True;
3625 TPMSep01.Visible := True;
3626 TreeSelectURLPupupMenu.Visible := True;
3627 TreeSelectNamePupupMenu.Visible := True;
3628 TreeSelectNameURLPupupMenu.Visible := True;
3629 TreeSelectFavoriteAddPupupMenu.Visible := True;
3630 TreeSelectLogDeleteSeparator.Visible := False;
3631 TreeSelectLogDeletePopupMenu.Visible := False;
3632 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3633 TreeSelectThreadPupupMenu.Visible := False;
3634 TreeSelectBoardPupupMenu.Visible := True;
3635 TPMSep01.Visible := True;
3636 TreeSelectURLPupupMenu.Visible := True;
3637 TreeSelectNamePupupMenu.Visible := True;
3638 TreeSelectNameURLPupupMenu.Visible := True;
3639 TreeSelectFavoriteAddPupupMenu.Visible := True;
3640 TreeSelectLogDeleteSeparator.Visible := False;
3641 TreeSelectLogDeletePopupMenu.Visible := False;
3642 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3643 TreeSelectThreadPupupMenu.Visible := True;
3644 TreeSelectBoardPupupMenu.Visible := False;
3645 TPMSep01.Visible := True;
3646 TreeSelectURLPupupMenu.Visible := True;
3647 TreeSelectNamePupupMenu.Visible := True;
3648 TreeSelectNameURLPupupMenu.Visible := True;
3649 TreeSelectFavoriteAddPupupMenu.Visible := True;
3650 TreeSelectLogDeleteSeparator.Visible := True;
3651 TreeSelectLogDeletePopupMenu.Visible := True;
3652 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3653 TreeSelectThreadPupupMenu.Visible := True;
3654 TreeSelectBoardPupupMenu.Visible := False;
3655 TPMSep01.Visible := True;
3656 TreeSelectURLPupupMenu.Visible := True;
3657 TreeSelectNamePupupMenu.Visible := True;
3658 TreeSelectNameURLPupupMenu.Visible := True;
3659 TreeSelectFavoriteAddPupupMenu.Visible := True;
3660 TreeSelectLogDeleteSeparator.Visible := True;
3661 TreeSelectLogDeletePopupMenu.Visible := True;
3662 end else if (TObject(FClickNode.Data) is TCategory) then begin
3663 TreeSelectThreadPupupMenu.Visible := False;
3664 TreeSelectBoardPupupMenu.Visible := False;
3665 TPMSep01.Visible := False;
3666 TreeSelectURLPupupMenu.Visible := False;
3667 TreeSelectNamePupupMenu.Visible := True;
3668 TreeSelectNameURLPupupMenu.Visible := False;
3669 TreeSelectFavoriteAddPupupMenu.Visible := False;
3670 TreeSelectLogDeleteSeparator.Visible := False;
3671 TreeSelectLogDeletePopupMenu.Visible := False;
3672 end else if FClickNode.IsFirstNode then begin
3673 TreeSelectThreadPupupMenu.Visible := False;
3674 TreeSelectBoardPupupMenu.Visible := False;
3675 TPMSep01.Visible := False;
3676 TreeSelectURLPupupMenu.Visible := False;
3677 TreeSelectNamePupupMenu.Visible := True;
3678 TreeSelectNameURLPupupMenu.Visible := False;
3679 TreeSelectFavoriteAddPupupMenu.Visible := False;
3680 TreeSelectLogDeleteSeparator.Visible := False;
3681 TreeSelectLogDeletePopupMenu.Visible := False;
3683 TreeSelectThreadPupupMenu.Visible := False;
3684 TreeSelectBoardPupupMenu.Visible := False;
3685 TPMSep01.Visible := False;
3686 TreeSelectURLPupupMenu.Visible := False;
3687 TreeSelectNamePupupMenu.Visible := False;
3688 TreeSelectNameURLPupupMenu.Visible := False;
3689 TreeSelectFavoriteAddPupupMenu.Visible := False;
3690 TreeSelectLogDeleteSeparator.Visible := False;
3691 TreeSelectLogDeletePopupMenu.Visible := False;
3695 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3696 var ppDisp: IDispatch; var Cancel: WordBool);
3705 threadItem: TThreadItem;
3706 aElement : IHTMLElement;
3709 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3710 if ( aElement <> nil) then begin
3711 Text := aElement.Get_outerText;
3712 Html := aElement.Get_outerHTML;
3713 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3714 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3715 if GikoSys.Setting.ResAnchorJamp then begin
3717 Text := ZenToHan(Trim(Text));
3719 if(AnsiPos('>>', Text) = 1) then begin
3720 //Text := Copy(Text, 3, Length(Text) - 2);
3723 //Text := Copy(Text, 2, Length(Text) - 1);
3727 if AnsiPos('-', Text) <> 0 then begin
3728 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3729 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3730 wkIntTo := StrToIntDef(Text, 0);
3731 if wkIntTo < wkIntSt then
3734 wkIntSt := StrToIntDef(Text, 0);
3737 if wkIntSt <> 0 then begin
3738 FActiveContent.IDAnchorPopup('');
3739 MoveHisotryManager.pushItem(FActiveContent);
3740 BrowserMovement(IntToStr(wkIntSt));
3746 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3748 URL := GikoSys.GetHRefText(Html);
3749 URL := GikoSys.HTMLDecode(URL);
3750 if AnsiPos('BE:', URL) = 1 then begin
3751 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3752 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3753 threadItem := FActiveContent.Thread;
3754 if threadItem = nil then Exit;
3755 URL := BE_PHP_URL + BNum + '&u=d'
3756 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3759 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3760 ( AnsiPos('ftp://', URL) = 1) then begin
3761 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3762 if GikoSys.Setting.LinkAddAddressBar then begin
3763 idx := AddressComboBox.Items.IndexOf(URL);
3764 if idx = -1 then begin
3765 AddressComboBox.Items.Insert(0, URL);
3766 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3767 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3769 AddressComboBox.Items.Delete(idx);
3770 AddressComboBox.Items.Insert(0, URL);
3773 MoveHisotryManager.pushItem(FActiveContent);
3781 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3783 if Mouse.Capture <> 0 then
3785 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3786 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3787 FBrowserSizeWidth := ViewPanel.Width;
3789 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3790 FBrowserSizeHeight := ViewPanel.Height;
3792 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3793 if ViewPanel.Width < 2 then begin
3794 ViewPanel.Width := 1;
3795 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3796 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3797 GikoSys.Setting.ListWidthState := glsMax;
3798 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3799 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3800 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3801 GikoSys.Setting.ListWidthState := glsMin;
3803 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3804 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3805 GikoSys.Setting.ListWidthState := glsNormal;
3808 if ViewPanel.Height < 2 then begin
3809 ViewPanel.Height := 1;
3810 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3811 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3812 GikoSys.Setting.ListHeightState := glsMax;
3813 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3814 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3815 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3816 GikoSys.Setting.ListHeightState := glsMin;
3818 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3819 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3820 GikoSys.Setting.ListHeightState := glsNormal;
3823 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3824 FBrowserSizeHeight := ViewPanel.Height
3825 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3826 FBrowserSizeWidth := ViewPanel.Width;}
3829 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3834 BrowserTab.Tabs.BeginUpdate;
3836 if not BrowserTab.Dragging then begin
3837 FTabHintIndex := -1;
3838 BrowserTab.Hint := '';
3839 idx := BrowserTab.TabIndex;
3840 if idx = -1 then begin
3841 SetContent(BrowserNullTab);
3843 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3844 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3845 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3847 FBrowsers.Move(j ,0);
3849 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3850 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3851 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3852 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3854 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3855 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3856 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
3860 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3861 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3862 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3864 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3865 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3866 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3868 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3869 AddressComboBox.Text := GetActiveContent.URL;
3871 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3872 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3875 GikoDM.SetFocusForBrowserAction.Execute;
3879 BrowserTab.Tabs.EndUpdate;
3884 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3885 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3891 if Button = mbMiddle then begin
3892 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3895 p := BrowserTab.ScreenToClient(p);
3896 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3898 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3899 end else if Button = mbLeft then begin
3900 FDragWFirst := true;
3901 FMouseDownPos.X := X;
3902 FMouseDownPos.Y := Y;
3907 procedure TGikoForm.SetBrowserTabState;
3909 CoolBand: TCoolBand;
3911 BrowserBottomPanel.AutoSize := False;
3912 if GikoSys.Setting.BrowserTabVisible then begin
3914 BrowserTab.Tabs.BeginUpdate;
3916 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3917 BrowserTab.Style := tsTabs;
3918 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3919 BrowserTab.TabPosition := tpTop
3921 BrowserTab.TabPosition := tpBottom;
3922 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
3923 BrowserTab.TabPosition := tpTop;
3924 BrowserTab.Style := tsButtons;
3926 BrowserTab.TabPosition := tpTop;
3927 BrowserTab.Style := tsFlatButtons
3930 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
3931 BrowserTab.Parent := BrowserTabToolBar;
3932 BrowserBottomPanel.Hide;
3933 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3934 if CoolBand <> nil then
3935 CoolBand.Visible := True;
3937 BrowserTab.Parent := BrowserBottomPanel;
3938 BrowserTab.Top := 0;
3939 BrowserTab.Left := 0;
3940 BrowserBottomPanel.Show;
3941 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3942 if CoolBand <> nil then
3943 CoolBand.Visible := False;
3946 BrowserTab.Tabs.EndUpdate;
3950 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3951 if CoolBand <> nil then
3952 CoolBand.Visible := False;
3953 BrowserBottomPanel.Visible := False;
3954 GikoDM.AllTabCloseAction.Execute;
3958 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
3959 Y: Integer; State: TDragState; var Accept: Boolean);
3963 idx := BrowserTab.IndexOfTabAt(X, Y);
3964 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
3967 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
3972 FDragWFirst := False;
3973 idx := BrowserTab.IndexOfTabAt(X, Y);
3975 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
3978 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
3979 Shift: TShiftState; X, Y: Integer);
3982 ThreadItem: TThreadItem;
3985 TabIdx := BrowserTab.IndexOfTabAt(x, y);
3987 if ( ssLeft in Shift ) then begin
3988 if (FDragWFirst) then begin
3989 BrowserTab.EndDrag(false);
3990 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
3993 BrowserTab.EndDrag(false);
3994 FDragWFirst := false;
3997 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
3998 Application.CancelHint;
3999 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4000 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4001 BrowserTab.Hint := ThreadItem.Title;
4002 Application.ShowHint := True;
4004 BrowserTab.Hint := '';
4005 Application.ShowHint := True;
4007 FTabHintIndex := TabIdx;
4012 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4013 const pDisp: IDispatch; var URL: OleVariant);
4015 FDispHtmlDocument: DispHTMLDocument;
4016 BrowserRecord :TBrowserRecord;
4019 threadItem : TThreadItem;
4021 if TObject(Sender) is TWebBrowser then begin
4022 BrowserRecord := nil;
4023 if TWebBrowser(Sender) <> Browser then begin
4024 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4025 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4026 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4030 if BrowserRecord <> nil then begin
4031 if BrowserRecord.Event <> nil then
4032 BrowserRecord.Event.Free;
4033 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4034 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4035 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4036 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4039 if GetActiveContent <> nil then begin
4040 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4041 if FEvent <> nil then
4043 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4044 FEvent.OnContextMenu := OnDocumentContextMenu;
4045 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4047 if FEvent <> nil then begin
4055 if (BrowserRecord <> nil) and
4056 Assigned( BrowserRecord.Thread ) then begin
4057 threadItem := BrowserRecord.Thread;
4059 if (threadItem.JumpAddress > 0) then begin
4060 if threadItem.UnRead then begin
4061 threadItem.UnRead := False;
4063 RefreshListView(threadItem);
4065 //
\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®
4066 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4067 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4068 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4069 threadItem.JumpAddress := 0;
4071 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4074 end else if threadItem.UnRead then begin
4075 threadItem.UnRead := False;
4077 BrowserRecord.Move('new');
4078 RefreshListView(threadItem);
4079 end else if threadItem.ScrollTop <> 0 then begin
4081 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4082 doc.Body.ScrollTop := threadItem.ScrollTop;
4085 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4090 LockWindowUpdate(0);
4093 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4095 AddRoundNameMenu(RoundNamePopupMenu.Items);
4098 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4104 Item := TMenuItem.Create(Self);
4105 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4106 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4108 Item := TMenuItem.Create(Self);
4109 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4110 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4112 Item := TMenuItem.Create(Self);
4113 Item.Caption := '-';
4115 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4116 Item := TMenuItem.Create(Self);
4117 Item.Caption := RoundList.RoundNameList[i];
4118 Item.OnClick := SetSelectRoundName;
4123 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4125 threadItem : TThreadItem;
4127 if ParentName <> 'dummy1' then begin
4128 SetSelectItemRound(RoundFlag, RoundName);
4130 threadItem := GetActiveContent;
4131 if threadItem <> nil then begin
4132 threadItem.RoundName := RoundName;
4134 RoundList.RoundNameList.Add(RoundName);
4135 threadItem.Round := RoundFlag;
4140 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4145 List := TList.Create;
4147 SelectListItem(List);
4148 for i := 0 to List.Count - 1 do begin
4149 if TObject(List[i]) is TBoard then begin
4150 TBoard(List[i]).RoundName := RoundName;
4152 RoundList.RoundNameList.Add(RoundName);
4153 TBoard(List[i]).Round := RoundFlag;
4154 end else if TObject(List[i]) is TThreadItem then begin
4155 if TThreadItem(List[i]).IsLogFile then begin
4156 TThreadItem(List[i]).RoundName := RoundName;
4158 RoundList.RoundNameList.Add(RoundName);
4159 TThreadItem(List[i]).Round := RoundFlag;
4168 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4170 MenuItem: TMenuItem;
4172 if Sender is TMenuItem then begin
4173 MenuItem := TMenuItem(Sender);
4174 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4179 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4184 if CoolBar = nil then
4186 for i := 0 to CoolBar.Bands.Count - 1 do begin
4187 if CoolBar.Bands[i].Control = Control then begin
4188 Result := CoolBar.Bands[i];
4194 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4196 if BrowserTab.Parent = BrowserTabToolBar then
4197 BrowserTab.Width := BrowserTabToolBar.Width;
4200 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4205 procedure TGikoForm.SetMenuFont;
4207 // GikoSys.MenuFont(MenuToolBar.Font);
4208 // MenuToolBar.Buttons[0].AutoSize := False;
4209 // MenuToolBar.Buttons[0].AutoSize := True;
4210 // MenuToolBar.Font.Color := clMenuText;
4211 GikoSys.MenuFont(MainCoolBar.Font);
4212 MenuToolBar.Buttons[0].AutoSize := False;
4213 MenuToolBar.Buttons[0].AutoSize := True;
4214 MainCoolBar.AutoSize := False;
4215 MainCoolBar.AutoSize := True;
4217 GikoSys.MenuFont(ListCoolBar.Font);
4218 GikoSys.MenuFont(BrowserCoolBar.Font);
4219 // MenuToolBar.Font.Color := clMenuText;
4222 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4226 if FavoriteDM.Modified then begin
4229 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4230 NewMenu := TMenuItem.Create(MainMenu);
4231 NewMenu.Action := GikoDM.FavoriteAddAction;
4232 FavoriteMenu.Add(NewMenu);
4233 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4234 NewMenu := TMenuItem.Create(FavoriteMenu);
4235 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4236 FavoriteMenu.Add(NewMenu);
4237 //
\83Z
\83p
\83\8c\81[
\83^
4238 FavoriteMenu.InsertNewLineAfter(NewMenu);
4239 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4240 FavoriteDM.Modified := false;
4244 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4247 NewMenu: array of TMenuItem;
4249 SetLength(NewMenu, Node.Count);
4250 Node := Node.getFirstChild;
4252 while ( Node <> nil ) do begin
4253 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4254 NewMenu[i].AutoHotkeys := maAutomatic;
4255 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4256 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4258 if TObject(Node.Data) is TFavoriteFolder then begin
4259 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4260 CreateFavMenu(Node, NewMenu[i]);
4261 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4262 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4263 NewMenu[i].OnClick := FavoriteClick;
4264 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4265 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4266 NewMenu[i].OnClick := FavoriteClick;
4269 Node := Node.getNextSibling;
4271 MenuItem.Add(NewMenu);
4274 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4276 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';
4277 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4279 Dlg : TFavoriteAddDialog;
4285 if Item is TFavoriteBoardItem then
4286 Item := TFavoriteBoardItem( Item ).Item
4287 else if Item is TFavoriteThreadItem then
4288 Item := TFavoriteThreadItem( Item ).Item;
4290 Node := FavoriteTreeView.Items.GetFirstNode;
4291 if Item is TBoard then begin
4292 ItemURL := TBoard( Item ).URL;
4293 while Node <> nil do begin
4295 if TObject( Data ) is TFavoriteBoardItem then begin
4296 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4297 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4302 Node := Node.GetNext;
4304 Dlg := TFavoriteAddDialog.Create(Self);
4306 Dlg.SetBoard( TBoard( Item ) );
4311 end else if Item is TThreadItem then begin
4312 ItemURL := TThreadItem( Item ).URL;
4313 while Node <> nil do begin
4315 if TObject( Data ) is TFavoriteThreadItem then begin
4316 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4317 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4322 Node := Node.GetNext;
4324 Dlg := TFavoriteAddDialog.Create(Self);
4326 Dlg.SetThreadItem( TThreadItem( Item ) );
4336 procedure TGikoForm.FavoriteClick(Sender: TObject);
4338 FavoriteClick( Sender, True );
4341 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4344 ThreadItem: TThreadItem;
4345 FavBoard: TFavoriteBoardItem;
4346 FavThread: TFavoriteThreadItem;
4350 if Sender is TFavoriteMenuItem then
4351 Item := TFavoriteMenuItem(Sender).Data
4352 else if Sender is TLinkToolButton then
4353 Item := TLinkToolButton(Sender).Data
4354 else if Sender is TTreeNode then
4355 Item := TTreeNode( Sender ).Data
4359 if TObject(Item) is TFavoriteBoardItem then begin
4360 FavBoard := TFavoriteBoardItem(Item);
4361 Board := FavBoard.Item;
4362 if Board <> nil then begin
4363 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4364 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4365 SelectTreeNode(Board, True);
4367 end else if TObject(Item) is TFavoriteThreadItem then begin
4368 FavThread := TFavoriteThreadItem(Item);
4369 ThreadItem := FavThread.Item;
4370 if ThreadItem = nil then
4373 InsertBrowserTab(ThreadItem, ActiveTab);
4375 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4376 if GikoSys.Setting.ListWidthState = glsMin then begin
4377 GikoDM.BrowserMaxAndFocusAction.Execute;
4380 if GikoSys.Setting.ListHeightState = glsMin then begin
4381 GikoDM.BrowserMaxAndFocusAction.Execute;
4387 procedure TGikoForm.BBSMenuItemOnClick(
4392 if Sender is TBBSMenuItem then
4393 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4397 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4399 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4402 //!
\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é)
4403 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4405 stRes, edRes : Int64;
4406 browserRec : TBrowserRecord;
4407 threadNumber : String;
4412 Thread.JumpAddress := 0;
4413 //
\83^
\83u
\82ð
\90¶
\90¬
4414 browserRec := InsertBrowserTab(Thread);
4415 if (browserRec <> nil) then begin
4416 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4417 threadNumber := ChangeFileExt(Thread.FileName, '');
4418 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4419 //
\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
4420 if (StrToInt64(threadNumber) = stRes) then begin
4421 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4422 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4426 if ( stRes > 0 ) then begin
4427 Thread.JumpAddress := stRes;
4429 //
\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é
4430 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4431 DownloadContent(Thread);
4432 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4433 browserRec.Move(IntToStr(stRes));
4434 Thread.JumpAddress := 0;
4436 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4437 Thread.ScrollTop := doc.Body.ScrollTop;
4444 procedure TGikoForm.MoveToURL(const inURL: string);
4446 protocol, host, path, document, port, bookmark : string;
4447 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4449 BBSID, BBSKey: string;
4450 {tmpBoard,} Board: TBoard;
4451 ThreadItem: TThreadItem;
4454 tmpThread : TThreadItem;
4455 shiftDown : Boolean;
4459 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4460 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4463 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4464 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4465 if shiftDown then begin
4466 GikoSys.OpenBrowser(inURL, gbtUserApp);
4468 end else if ctrlDown then begin
4469 GikoSys.OpenBrowser(inURL, gbtIE);
4473 //=====
\83v
\83\89\83O
\83C
\83\93
4476 bi := Length(BoardGroups) - 1;
4477 for i := 1 to bi do begin
4478 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4479 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4482 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4483 Board := BBSsFindBoardFromURL( boardURL );
4486 if Board = nil then begin
4488 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4489 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4492 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4493 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4494 ShowBBSTree( BBSs[ 1 ] );
4497 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4498 if not Board.IsThreadDatRead then begin
4499 GikoSys.ReadSubjectFile( Board );
4503 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4504 if ThreadItem = nil then begin
4505 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4506 ThreadItem := tmpThread;
4507 Board.Insert( 0, ThreadItem );
4508 if ActiveList is TBoard then begin
4509 if TBoard(ActiveList) = Board then
4510 ListView.Items.Count := ListView.Items.Count + 1;
4515 OpenThreadItem(ThreadItem, inURL);
4522 Board := BBSsFindBoardFromURL(
4523 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4525 if Board <> nil then begin
4526 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4527 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4528 SelectTreeNode( Board, True );
4536 // 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¢
4540 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4541 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4542 Board := BBSsFindBoardFromURL( boardURL );
4543 if Board = nil then begin
4544 //
\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
4545 GikoSys.OpenBrowser(inURL, gbtUserApp);
4548 //
\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é
4550 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4551 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4552 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4553 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4554 GikoSys.OpenBrowser(inURL, gbtUserApp);
4559 if not Board.IsThreadDatRead then
4560 GikoSys.ReadSubjectFile(Board);
4561 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4562 ThreadItem := Board.FindThreadFromURL( URL );
4563 //
\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)
4564 if ThreadItem = nil then begin
4565 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4568 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4569 if ThreadItem = nil then begin
4570 ThreadItem := TThreadItem.Create( nil, Board, URL );
4571 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4572 Board.Insert(0, ThreadItem);
4573 if ActiveList is TBoard then begin
4574 if TBoard(ActiveList) = Board then
4575 ListView.Items.Count := ListView.Items.Count + 1;
4578 //
\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é
4579 if (not ThreadItem.IsLogFile) then begin
4580 if AnsiPos(Host, Board.URL) = 0 then
4581 ThreadItem.DownloadHost := Host
4583 ThreadItem.DownloadHost := '';
4585 OpenThreadItem(ThreadItem, inURL);
4589 Board := BBSsFindBoardFromURL( inURL );
4590 if Board = nil then begin
4591 GikoSys.OpenBrowser(inURL, gbtAuto);
4593 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4594 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4595 SelectTreeNode( Board, True );
4600 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4602 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4603 CoolBarResized( Sender, MainCoolBar );
4606 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4607 Shift: TShiftState);
4609 if Key = VK_RETURN then
4610 GikoDM.MoveToAction.Execute;
4613 procedure TGikoForm.BrowserEnter(Sender: TObject);
4615 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4618 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4620 CDS:PCopyDataStruct;
4624 CDS := Message.CopyDataStruct;
4625 GetMem(PC, CDS^.cbData);
4627 lstrcpy(PC,CDS^.lpData);
4628 SetString(sURL, PC,lstrlen(PC));
4633 Message.Result := 1;
4636 procedure TGikoForm.WndProc(var Message: TMessage);
4638 senderBrowser : TWebBrowser;
4644 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4647 if Message.WParam = SC_MINIMIZE then begin
4649 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4652 TreeClick( TreeView.Selected );
4657 if (GikoSys.Setting.StoredTaskTray) then begin
4664 USER_DOCUMENTCOMPLETE:
4665 if (Message.WParam <> 0) and
4666 (TObject(Message.WParam) is TWebBrowser) then begin
4667 senderBrowser := TWebBrowser( Message.WParam );
4668 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4677 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4682 //
\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Í
4683 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4684 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4685 if Msg.CharCode in [VK_BACK] then begin
4686 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4687 if Msg.KeyData > 0 then begin
4690 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4694 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4695 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4698 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4701 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4702 if Msg.CharCode in [VK_BACK] then begin
4703 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4704 if Msg.KeyData > 0 then begin
4707 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4710 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4713 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4717 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4721 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4726 PreviewTimer.Enabled := False;
4730 ARect := FPreviewBrowser.GetWindowRect(p);
4732 FPreviewBrowser.PreviewImage(FPreviewURL);
4734 if ARect.Bottom > Screen.DesktopHeight then begin
4735 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4737 if (ARect.Right > Screen.DesktopWidth) then begin
4738 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4740 if (ARect.Left < Screen.DesktopLeft) then begin
4741 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4743 if (ARect.Top < Screen.DesktopTop) then begin
4744 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4747 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4748 ARect.Left, ARect.Top,
4749 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4750 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4752 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4753 FPreviewBrowserRect := ARect;
4756 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4761 if PreviewTimer.Enabled then
4762 PreviewTimer.Enabled := False;
4763 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4764 FHint.ReleaseHandle;
4768 if (FPreviewBrowser <> nil)
4769 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4770 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4771 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4772 Pos := Mouse.CursorPos;
4773 Pos.X := Pos.X + Left;
4774 Pos.Y := Pos.Y + Top;
4775 if (FPreviewBrowserRect.Left > Pos.X) or
4776 (FPreviewBrowserRect.Right < Pos.X) or
4777 (FPreviewBrowserRect.Top > Pos.Y) or
4778 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4779 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4783 Message.Result := 1;
4786 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4788 GikoDM.MsgBarCloseAction.Execute;
4791 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4793 Doc: IHtmlDocument2;
4794 Range: IHTMLTxtRange;
4797 ThreadItem: TThreadItem;
4800 FactiveContent.IDAnchorPopup('');
4801 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4802 if Assigned(Doc) then begin
4803 Range := Doc.selection.createRange as IHTMLTxtRange;
4804 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4805 s := ZenToHan(Trim(s));
4806 if GikoSys.IsNumeric(s) then begin
4808 ThreadItem := GetActiveContent;
4809 if ThreadItem <> nil then begin
4810 Num := StrToInt64(s);
4811 FHint.PopupType := gptThread;
4812 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
4813 if FHint.ResCount <> 0 then
4824 procedure TGikoForm.ShowTextPopup;
4829 // if Trim(s) = '' then
4832 FHint.Font.Name := GikoSys.Setting.HintFontName;
4833 FHint.Font.Size := GikoSys.Setting.HintFontSize;
4834 FHint.Font.Color := GikoSys.Setting.HintFontColor;
4835 FHint.Color := GikoSys.Setting.HintBackColor;
4836 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
4838 if FHint.PopupType = gptRaw then
4839 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
4841 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
4842 case GikoSys.Setting.PopupPosition of
4843 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4844 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4845 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4846 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4847 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4848 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4849 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4850 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4851 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Ó
4853 //FHint.ActivateHint(ARect, s);
4854 if FHint.PopupType = gptRaw then
4855 FHint.ActivateHint(ARect, FHint.Caption)
4857 FHint.ActivateHint(ARect, '');
4859 FHint.ReleaseHandle;
4864 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4866 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4867 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4869 if FTreeType = gttHistory then begin
4870 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4871 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4874 TreeView.Items.Clear;
4878 procedure TGikoForm.SetLinkBar;
4882 ToolButton: TLinkToolButton;
4883 MenuItem: TMenuItem;
4884 oldIgnoreResize : TResizeType;
4886 oldIgnoreResize := FIsIgnoreResize;
4887 FIsIgnoreResize := rtResizing;
4888 MainCoolBar.Bands.BeginUpdate;
4890 LinkBarPopupMenu.Items.Clear;
4891 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4892 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4893 LinkToolBar.Buttons[i].Free;
4894 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4895 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4896 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4897 ToolButton := TLinkToolButton.Create(LinkToolBar);
4898 // ToolButton.Parent := LinkToolBar;
4899 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4900 MenuItem := TMenuItem.Create(Self);
4901 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4902 LinkBarPopupMenu.Items.Add(MenuItem);
4903 ToolButton.MenuItem := MenuItem;
4904 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4905 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4906 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4907 ToolButton.OnClick := FavoriteClick;
4908 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4909 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4910 ToolButton.OnClick := FavoriteClick;
4912 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4913 ToolButton.Left := 10000;
4914 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4915 ToolButton.AutoSize := True;
4916 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4917 ToolButton.OnDragOver := FavoriteDragOver;
4918 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4919 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4920 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4921 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4922 //ToolButton.DragMode := dmAutomatic;
4923 ToolButton.DragMode := dmManual;
4924 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4926 LinkToolBar.InsertControl(ToolButton);
4931 { if LinkToolBar.ButtonCount = 0 then begin
4932 ToolButton := TLinkToolButton.Create(LinkToolBar);
4933 ToolButton.Style := tbsButton;
4934 ToolButton.ImageIndex := -1;
4935 ToolButton.Caption := '';
4936 LinkToolBar.InsertControl(ToolButton);
4939 MainCoolBar.Bands.EndUpdate;
4940 LoadCoolBarSettings;
4941 FIsIgnoreResize := oldIgnoreResize;
4945 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4953 if Sender = FavoriteTreeView then begin
4954 Node := FavoriteTreeView.GetNodeAt(X, Y);
4959 bound := Node.DisplayRect( False );
4960 height := bound.Bottom - bound.Top;
4961 if (bound.Top + height / 2) <= Y then
4962 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
4967 if Node.IsFirstNode then
4972 if FDropSpaceNode <> nil then
4973 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
4976 if Change then begin
4977 if FDropSpaceNode <> nil then
4978 FDropSpaceNode.Free;
4980 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
4981 FDropSpaceNode.MoveTo( Node, naInsert );
4982 FDropSpaceNode.ImageIndex := -1;
4983 FDropSpaceNode.SelectedIndex := -1;
4987 if Source = FavoriteTreeView then begin
4988 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
4993 end else if Source = BrowserTab then
4995 else if Source = ListView then
4997 else if Source is TLinkToolButton then
4999 else if Source = TreeView then
5005 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5008 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5011 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5013 // FDragging := true;
5016 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5018 SenderNode: TTreeNode;
5019 LinkToolButton: TLinkToolButton;
5022 LinkToolButton := TLinkToolButton( Sender );
5023 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5024 SenderNode.Selected := False;
5025 FavoriteDragDrop( SenderNode, Source );
5031 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5033 favButton : TLinkToolButton;
5034 favThreadItem : TFavoriteThreadItem;
5040 if Sender is TLinkToolButton then begin
5041 favButton := TLinkToolButton( Sender );
5042 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5043 favThreadItem := TFavoriteThreadItem( favButton.Data );
5044 if favThreadItem.Item <> nil then
5045 InsertBrowserTab( favThreadItem.Item, False );
5053 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5057 TToolButton( Sender ).DragMode := dmManual;
5058 if ssLeft in Shift then begin
5059 // 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)
5060 if FDragTime = 0 then begin
5061 FDragTime := GetTickCount();
5063 Now := GetTickCount();
5064 if (Now - FDragTime) > 500 then begin
5065 if FDragButton <> TToolButton( Sender ) then begin
5067 FDragButton := TToolButton( Sender );
5068 TToolButton(Sender).BeginDrag(false ,5);
5071 {$IF Defined(debug)}
5072 ShowMessage('Error');
5083 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5088 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5093 for i := 0 to ToolBar.ButtonCount - 1 do
5094 if ToolBar.Buttons[i].Visible then
5095 Result := Result + ToolBar.Buttons[i].Width;
5098 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5100 Control : TWinControl;
5103 Control := FindControl(BandInfo^.hwndChild);
5104 if Control = nil then
5107 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5108 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5109 idx := MainCoolBar.Bands[ i ].ID;
5113 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5114 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5115 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5116 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5117 BandInfo^.cxMinChild := 0;
5118 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5119 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5120 end else if Control = LinkToolBar then begin
5121 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5122 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5123 BandInfo^.cxMinChild := 0;
5124 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5125 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5126 end else begin // AddressToolBar
5127 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5128 BandInfo^.cxMinChild := 0;
5129 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5133 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5139 ChevronPopupMenu.Items.Clear;
5141 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5142 if MainCoolBar.Bands[ i ].Visible then begin
5143 if Idx = Int64(RebarChevron^.uBand) then begin
5150 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5151 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5153 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5154 ToolBarChevronMenu(StdToolBar);
5155 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5159 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5160 ChevronPopupMenu.Popup(p.x, p.y);
5164 procedure TGikoForm.MenuBarChevronMenu;
5165 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5171 for i := 0 to MenuItem.Count - 1 do begin
5173 if MenuItem[i] is TFavoriteMenuItem then begin
5174 Item := TFavoriteMenuItem.Create(Self);
5175 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5177 Item := TMenuItem.Create(Self);
5178 Item.Caption := MenuItem[i].Caption;
5179 Item.Action := MenuItem[i].Action;
5180 Item.ImageIndex := MenuItem[i].ImageIndex;
5181 Item.OnClick := MenuItem[i].OnClick;
5182 PopupItem.Add(Item);
5183 if MenuItem[i].Count > 0 then
5184 SetSubMenu(MenuItem[i], Item);
5193 ChevronPopupMenu.Items.Clear;
5194 ChevronPopupMenu.Images := MainMenu.Images;
5195 bw := GetWidthAllToolButton(MenuToolBar);
5196 if MenuToolBar.Width < bw then begin
5198 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5199 w := w + MenuToolBar.Buttons[i].Width;
5200 if MenuToolBar.Width <= w then begin
5201 Item := TMenuItem.Create(Self);
5202 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5203 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5204 ChevronPopupMenu.Items.Add(Item);
5205 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5211 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5212 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5217 if Assigned(PopupMenu.OnPopup) then
5218 PopupMenu.OnPopup(nil);
5219 for i := 0 to PopupMenu.Items.Count - 1 do begin
5221 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5222 Item := TFavoriteMenuItem.Create(Self);
5223 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5225 Item := TMenuItem.Create(Self);
5226 Item.Caption := PopupMenu.Items[i].Caption;
5227 Item.Action := PopupMenu.Items[i].Action;
5228 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5229 Item.OnClick := PopupMenu.Items[i].OnClick;
5230 PopupItem.Add(Item);
5239 ChevronPopupMenu.Items.Clear;
5240 ChevronPopupMenu.Images := ToolBar.HotImages;
5241 bw := GetWidthAllToolButton(ToolBar);
5242 if ToolBar.Width < bw then begin
5244 for i := 0 to ToolBar.ButtonCount - 1 do begin
5245 if ToolBar.Buttons[i].Visible then
5246 w := w + ToolBar.Buttons[i].Width;
5247 if ToolBar.Width <= w then begin
5248 if ToolBar.Buttons[i].Tag = 0 then begin
5249 Item := TMenuItem.Create(Self);
5250 if ToolBar.Buttons[i].Style = tbsSeparator then
5253 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5254 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5257 Item.Caption := ToolBar.Buttons[i].Caption;
5258 Item.Action := ToolBar.Buttons[i].Action;
5260 //Item.Visible := True;
5262 ChevronPopupMenu.Items.Add(Item);
5263 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5265 Item.OnClick := nil;
5266 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5274 procedure TGikoForm.LinkBarChevronMenu;
5279 Item: TFavoriteMenuItem;
5281 Button: TLinkToolButton;
5283 ChevronPopupMenu.Items.Clear;
5284 ChevronPopupMenu.Images := LinkToolBar.Images;
5285 bw := GetWidthAllToolButton(LinkToolBar);
5286 if LinkToolBar.Width < bw then begin
5288 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5289 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5290 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5291 w := w + LinkToolBar.Buttons[j].Width;
5292 if LinkToolBar.Width <= w then begin
5293 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5294 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5295 Item := TFavoriteMenuItem.Create(Self);
5296 if TObject(Button.Data) is TFavoriteFolder then begin
5297 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5298 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5299 Item.OnClick := FavoriteClick;
5300 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5301 Item.OnClick := FavoriteClick;
5303 Item.Data := Button.Data;
5304 Item.Caption := LinkToolBar.Buttons[j].Caption;
5305 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5306 ChevronPopupMenu.Items.Add(Item);
5317 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5318 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5319 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5321 \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É
5322 \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
5324 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5326 bandInfo : tagREBARBANDINFOA;
5327 pBandInfo : PReBarBandInfoA;
5334 pBandInfo := @bandInfo;
5335 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5336 bandInfo.cbSize := sizeof( bandInfo );
5337 bandInfo.hwndChild := h;
5338 bandInfo.cyMinChild := bar.Height;
5339 bar.OnBandInfo( nil, pBandInfo );
5340 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5342 for i := bar.Bands.Count - 1 downto 0 do begin
5343 if bar.Bands[ i ].Control.Handle = h then begin
5349 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5353 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5355 Control: TWinControl;
5358 Control := FindControl(BandInfo^.hwndChild);
5359 if Control = nil then
5362 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5363 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5364 idx := ListCoolBar.Bands[ i ].ID;
5368 if Control = ListToolBar then begin
5369 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5370 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5371 BandInfo^.cxMinChild := 0;
5372 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5373 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5375 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5376 BandInfo^.cxMinChild := 0;
5377 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5381 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5386 ChevronPopupMenu.Items.Clear;
5387 Idx := RebarChevron^.uBand;
5388 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5389 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5390 ToolBarChevronMenu(ListToolBar);
5393 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5394 ChevronPopupMenu.Popup(p.x, p.y);
5398 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5400 Control: TWinControl;
5403 Control := FindControl(BandInfo^.hwndChild);
5404 if Control = nil then
5407 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5408 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5409 idx := BrowserCoolBar.Bands[ i ].ID;
5413 if Control = BrowserToolBar then begin
5414 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5415 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5416 BandInfo^.cxMinChild := 0;
5417 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5418 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5420 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5421 BandInfo^.cxMinChild := 0;
5422 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5426 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5431 ChevronPopupMenu.Items.Clear;
5432 Idx := RebarChevron^.uBand;
5433 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5434 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5435 ToolBarChevronMenu(BrowserToolBar)
5438 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5439 ChevronPopupMenu.Popup(p.x, p.y);
5443 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5445 if Column^.iImage = -1 then begin
5446 Column^.mask := Column^.mask or LVCF_FMT;
5448 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5449 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5453 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5458 for i := bar.ButtonCount - 1 downto 0 do begin
5459 if bar.Buttons[ i ].Action = action then begin
5460 Result := bar.Buttons[ i ];
5466 procedure TGikoForm.SetToolBarPopup;
5469 aIEButton : TToolButton;
5470 aCabinetBBSButton : TToolButton;
5471 aResRangeButton : TToolButton;
5472 aThreadRangeButton: TToolButton;
5474 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5476 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5477 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5478 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5479 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5480 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5482 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5483 if aIEButton <> nil then
5484 aIEButton.DropdownMenu := BrowserPopupMenu;
5485 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5486 if aCabinetBBSButton <> nil then
5487 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5488 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5489 if aResRangeButton <> nil then
5490 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5491 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5492 if aThreadRangeButton <> nil then
5493 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5496 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5497 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5501 // browserPos : TPoint;
5505 Wnd := WindowFromPoint(Mouse.CursorPos);
5507 if WheelDelta > 0 then
5512 if (Wnd = BrowserTab.Handle) or
5513 (Wnd = BrowserTab.Parent.Handle) then begin
5514 BrowserTab.ScrollTabs(Delta);
5516 if FIsHandledWheel then begin
5517 FIsHandledWheel := False;
5520 FIsHandledWheel := True;
5521 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5522 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5524 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5532 procedure TGikoForm.SetSelectWord( const text : string );
5534 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5535 ClearThreadRengeAction;
5537 if Length( text ) = 0 then
5539 GikoDM.AllItemAction.Checked := True;
5540 SetListViewType( gvtAll )
5542 SetListViewType( gvtUser, text, false );
5546 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5549 SetSelectWord( SelectComboBox.Text );
5553 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5554 Shift: TShiftState);
5562 if Key = VK_Return then
5565 end else if Key = 229 then begin
5566 if GikoSys.Setting.UseUndecided then begin
5567 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5568 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5569 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5570 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5571 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5572 SetLength(Str, Len);
5573 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5574 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5575 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5577 Str := SelectComboBox.Text + Str;
5579 if (Length(Str) > 0) then begin
5583 end else if Length( SelectComboBox.Text ) = 0 then
5585 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5586 *
\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
5587 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5590 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5591 ClearThreadRengeAction;
5595 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5596 procedure TGikoForm.ClearThreadRengeAction;
5598 //
\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é
5599 if GikoDM.AllItemAction.Checked then
5600 GikoDM.AllItemAction.Checked := False;
5601 if GikoDM.LogItemAction.Checked then
5602 GikoDM.LogItemAction.Checked := False;
5603 if GikoDM.NewItemAction.Checked then
5604 GikoDM.NewItemaction.Checked := False;
5605 if GikoDM.LiveItemAction.Checked then
5606 GikoDM.LiveItemAction.Checked := False;
5607 if GikoDM.ArchiveItemAction.Checked then
5608 GikoDM.ArchiveItemAction.Checked := False;
5612 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5617 if Length( SelectComboBox.Text ) = 0 then
5619 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5620 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5625 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5626 procedure TGikoForm.ModifySelectList;
5633 if not SelectComboBoxPanel.Visible then
5636 if Length( SelectComboBox.Text ) > 0 then
5638 oldText := SelectComboBox.Text;
5639 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5641 GikoSys.Setting.SelectTextList.Delete( idx );
5642 idx := SelectComboBox.Items.IndexOf( oldText );
5644 SelectComboBox.Items.Delete( idx );
5645 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5646 SelectComboBox.Items.Insert( 0, oldText );
5647 SelectComboBox.Text := oldText;
5655 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5656 Shift: TShiftState; X, Y: Integer);
5661 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5664 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5665 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5666 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5668 If w <= 50 Then Begin
5669 //
\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
5670 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5671 pos.X := pos.X + (50 - w);
5673 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5677 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5678 //If SelectComboBox.Width <> w Then Begin
5679 If SelectComboBoxPanel.Width <> w Then Begin
5680 SelectComboBoxPanel.Width := w;
5681 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5682 GikoSys.Setting.SelectComboBoxWidth := w;
5683 DraggingSelectComboBoxPosition := pos;
5685 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5686 ResetBandInfo( ListCoolBar, ListToolBar );
5692 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5693 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5697 IsDraggingSelectComboBox := True;
5700 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5704 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5705 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5707 IsDraggingSelectComboBox := False;
5711 procedure TGikoForm.StatusBarResize(Sender: TObject);
5713 StatusBar.Panels[1].Width := StatusBar.Width -
5714 StatusBar.Panels[0].Width -
5715 StatusBar.Panels[THREADSIZE_PANEL].Width -
5716 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5718 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5721 if (Length( SelectComboBox.Text ) = 0) or
5722 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5724 SelectComboBox.Text := '';
5725 SelectComboBox.Color := clWindow;
5730 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5733 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5736 if TObject(SenderNode.Data) is TFavoriteFolder then
5737 SourceNode.MoveTo(SenderNode, naAddChild)
5739 SourceNode.MoveTo(SenderNode, naInsert);
5743 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5747 FavoBoardItem: TFavoriteBoardItem;
5748 FavoThreadItem: TFavoriteThreadItem;
5750 ThreadItem: TThreadItem;
5753 if (SenderNode = nil) or (Source = nil) then
5756 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5757 FavNode := SenderNode.Parent
5759 FavNode := SenderNode;
5763 if Source is TBoard then begin
5764 Board := TBoard( Source );
5765 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5766 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5767 Node.ImageIndex := 15;
5768 Node.SelectedIndex := 15;
5769 end else if Source is TFavoriteBoardItem then begin
5770 FavoBoardItem := TFavoriteBoardItem( Source );
5771 Board := FavoBoardItem.Item;
5772 if Board <> nil then
5773 if not Board.IsThreadDatRead then
5774 GikoSys.ReadSubjectFile(Board);
5775 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5776 Node.ImageIndex := 15;
5777 Node.SelectedIndex := 15;
5778 end else if Source is TThreadItem then begin
5779 ThreadItem := TThreadItem( Source );
5780 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5781 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5782 Node.ImageIndex := 16;
5783 Node.SelectedIndex := 16;
5784 end else if Source is TBrowserRecord then begin
5785 ThreadItem := TBrowserRecord( Source ).Thread;
5786 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5787 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5788 Node.ImageIndex := 16;
5789 Node.SelectedIndex := 16;
5790 end else if Source is TFavoriteThreadItem then begin
5791 FavoThreadItem := TFavoriteThreadItem( Source );
5792 ThreadItem := FavoThreadItem.Item;
5793 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5794 Node.ImageIndex := 16;
5795 Node.SelectedIndex := 16;
5798 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5800 FavoriteMoveTo( SenderNode, Node );
5804 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5807 SourceNode: TTreeNode;
5808 LinkToolButton: TLinkToolButton;
5811 if SenderNode = nil then
5814 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5815 if FDropSpaceNode <> nil then
5816 SenderNode := FDropSpaceNode;
5818 if Source = FavoriteTreeView then begin
5819 SourceNode := FavoriteTreeView.Selected;
5820 FavoriteMoveTo( SenderNode, SourceNode );
5821 end else if Source is TLinkToolButton then begin
5822 LinkToolButton := TLinkToolButton( Source );
5823 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5824 FavoriteMoveTo( SenderNode, SourceNode );
5825 end else if Source = BrowserTab then begin
5826 idx := BrowserTab.TabIndex;
5827 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5828 end else if Source = ListView then begin
5829 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5830 end else if Source = TreeView then begin
5831 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5835 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5838 SenderNode: TTreeNode;
5841 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5842 if SenderNode <> nil then begin
5843 FavoriteDragDrop( SenderNode, Source );
5846 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5847 if FDropSpaceNode <> nil then begin
5849 FDropSpaceNode.Delete;
5851 FDropSpaceNode := nil;
5854 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5855 FavoriteDM.Modified := true;
5861 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5862 Node: TTreeNode; var S: String);
5864 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5865 FavoriteDM.Modified := true;
5867 FavoriteTreeView.ReadOnly := True;
5872 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5873 Shift: TShiftState);
5875 if not TTreeView(Sender).IsEditing then begin
5879 FClickNode := FavoriteTreeView.Selected;
5880 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5884 FClickNode := FavoriteTreeView.Selected;
5885 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5889 FavoriteClick( FavoriteTreeView.Selected );
5890 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5894 FClickNode := FavoriteTreeView.Selected;
5895 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5899 //
\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·
5900 if Key = VK_ESCAPE then begin
5901 if (TTreeView(Sender).Selected <> nil) then begin
5902 TTreeView(Sender).Selected.Text := FOrigenCaption;
5904 TTreeView(Sender).Selected.Focused := False;
5910 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5913 LinkToolButton: TLinkToolButton;
5916 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5918 FClickNode := FavoriteTreeView.Selected;
5920 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5922 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5923 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5924 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5925 FClickNode := FavoriteTreeView.Items[i];
5929 for i := 0 to FClickNode.Count - 1 do begin
5930 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5931 FClickNode := FClickNode.Item[i];
5938 if FClickNode = nil then begin
5939 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5940 FavoriteTreeDeletePopupMenu.Visible := False;
5941 FavoriteTreeRenamePopupMenu.Visible := False;
5942 FavoriteTreeNewFolderPopupMenu.Visible := False;
5943 FavoriteTreeURLCopyPopupMenu.Visible := False;
5944 FavoriteTreeNameCopyPopupMenu.Visible := False;
5945 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5946 FavoriteTreeReloadPopupMenu.Visible := False;
5947 FavoriteTreeLogDeletePopupMenu.Visible := False;
5948 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5949 end else if FClickNode.IsFirstNode then begin
5950 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5951 FavoriteTreeDeletePopupMenu.Visible := False;
5952 FavoriteTreeRenamePopupMenu.Visible := False;
5953 FavoriteTreeNewFolderPopupMenu.Visible := True;
5954 FavoriteTreeURLCopyPopupMenu.Visible := False;
5955 FavoriteTreeNameCopyPopupMenu.Visible := False;
5956 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5957 FavoriteTreeReloadPopupMenu.Visible := False;
5958 FavoriteTreeLogDeletePopupMenu.Visible := False;
5959 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5960 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
5961 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5962 FavoriteTreeDeletePopupMenu.Visible := True;
5963 FavoriteTreeRenamePopupMenu.Visible := False;
5964 FavoriteTreeNewFolderPopupMenu.Visible := True;
5965 FavoriteTreeURLCopyPopupMenu.Visible := False;
5966 FavoriteTreeNameCopyPopupMenu.Visible := False;
5967 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5968 FavoriteTreeReloadPopupMenu.Visible := False;
5969 FavoriteTreeLogDeletePopupMenu.Visible := False;
5970 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5971 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
5972 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5973 FavoriteTreeDeletePopupMenu.Visible := True;
5974 FavoriteTreeRenamePopupMenu.Visible := True;
5975 FavoriteTreeNewFolderPopupMenu.Visible := True;
5976 FavoriteTreeURLCopyPopupMenu.Visible := False;
5977 FavoriteTreeNameCopyPopupMenu.Visible := True;
5978 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5979 FavoriteTreeReloadPopupMenu.Visible := False;
5980 FavoriteTreeLogDeletePopupMenu.Visible := False;
5981 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5982 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
5983 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5984 FavoriteTreeDeletePopupMenu.Visible := True;
5985 FavoriteTreeRenamePopupMenu.Visible := True;
5986 FavoriteTreeNewFolderPopupMenu.Visible := True;
5987 FavoriteTreeURLCopyPopupMenu.Visible := True;
5988 FavoriteTreeNameCopyPopupMenu.Visible := True;
5989 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5990 FavoriteTreeReloadPopupMenu.Visible := True;
5991 FavoriteTreeLogDeletePopupMenu.Visible := True;
5992 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5993 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
5994 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5995 FavoriteTreeDeletePopupMenu.Visible := True;
5996 FavoriteTreeRenamePopupMenu.Visible := True;
5997 FavoriteTreeNewFolderPopupMenu.Visible := True;
5998 FavoriteTreeURLCopyPopupMenu.Visible := True;
5999 FavoriteTreeNameCopyPopupMenu.Visible := True;
6000 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6001 FavoriteTreeReloadPopupMenu.Visible := True;
6002 FavoriteTreeLogDeletePopupMenu.Visible := False;
6003 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6005 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6006 FavoriteTreeDeletePopupMenu.Visible := False;
6007 FavoriteTreeRenamePopupMenu.Visible := False;
6008 FavoriteTreeNewFolderPopupMenu.Visible := False;
6009 FavoriteTreeURLCopyPopupMenu.Visible := False;
6010 FavoriteTreeNameCopyPopupMenu.Visible := False;
6011 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6012 FavoriteTreeReloadPopupMenu.Visible := False;
6013 FavoriteTreeLogDeletePopupMenu.Visible := False;
6014 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6019 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6024 if not (TObject(node.Data) is TFavoriteFolder) then
6027 for i := 0 to node.Count - 1 do
6029 if TObject(node.Item[i].Data) is TFavoriteFolder then
6030 FavoriteBrowseFolder( node.Item[i] )
6031 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6032 FavoriteClick( node.Item[i], False );
6036 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6042 for i := 0 to Node.Count - 1 do begin
6043 if Node.Item[i].Data = FindPointer then begin
6044 Result := Node.Item[i];
6046 end else if Node.Item[i].Count > 0 then begin
6047 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6048 if Found <> nil then begin
6059 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6063 SenderNode: TTreeNode;
6067 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6068 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6069 SenderNode := FavoriteTreeView.Items[i];
6073 SenderNode.Selected := False;
6075 FavoriteDragDrop( SenderNode, Source );
6080 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6081 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6083 if FDragWFirst = true then
6084 FDragWFirst := false;
6086 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6087 if GikoSys.Setting.ListWidthState = glsMin then begin
6088 GikoDM.BrowserMaxAndFocusAction.Execute;
6091 if GikoSys.Setting.ListHeightState = glsMin then begin
6092 GikoDM.BrowserMaxAndFocusAction.Execute;
6097 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6098 Y: Integer; State: TDragState; var Accept: Boolean);
6101 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6105 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6109 if FDropSpaceNode <> nil then begin
6111 FDropSpaceNode.Delete;
6113 FDropSpaceNode := nil;
6115 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6116 FavoriteDM.Modified := true;
6122 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6124 if FListViewBackGroundColor <> value then begin
6125 FListViewBackGroundColor := value;
6126 ListView.Color := FListViewBackGroundColor;
6129 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6131 threadItem : TThreadItem;
6135 if FClickNode = nil then Exit;
6137 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6139 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6140 if threadItem = nil then
6142 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6144 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6146 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6147 if boardItem = nil then
6149 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6155 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6156 MousePos: TPoint; var Handled: Boolean);
6160 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6161 if BrowserTab.TabIndex <> idx then begin
6162 BrowserTab.TabIndex := idx;
6163 BrowserTab.OnChange(nil);
6167 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6169 ThreadItem: TThreadItem;
6175 boardPlugIn : TBoardPlugIn;
6177 if Number = 0 then Exit;
6178 ThreadItem := GetActiveContent;
6180 if ThreadItem <> nil then begin
6181 //if ThreadItem.IsBoardPlugInAvailable then begin
6182 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6183 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6184 //boardPlugIn := ThreadItem.BoardPlugIn;
6185 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6187 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6188 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6189 //
\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
6190 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6192 FileName := ThreadItem.FilePath;
6193 tmp := GikoSys.ReadThreadFile(FileName, Number);
6195 if tmp <> '' then begin
6196 THTMLCreate.DivideStrLine(tmp, @Res);
6198 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6199 if ReplaceTag then begin
6200 Header := CustomStringReplace(Header, '</b>', '',true);
6201 Header := CustomStringReplace(Header, '<b>', '',true);
6202 Header := CustomStringReplace(Header, '<br>', '',true);
6203 Header := DeleteFontTag(Header);
6205 //if ThreadItem.IsBoardPlugInAvailable then begin
6206 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6207 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6208 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6210 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6211 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6212 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6213 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6216 Body := CustomStringReplace(Body, '</a>', '',true);
6218 Body := HTMLCreater.DeleteLink(Body);
6219 if ReplaceTag then begin
6220 Body := CustomStringReplace(Body, '<', '<');
6221 Body := CustomStringReplace(Body, '>', '>');
6222 Body := CustomStringReplace(Body, '"', '"');
6223 Body := CustomStringReplace(Body, '&', '&');
6224 //Body := CustomStringReplace(Body, ' ', ' ');
6227 Header := Header + Body;
6229 Clipboard.SetTextBuf( PChar(Header) );
6235 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6237 AddRoundNameMenu(dummy1);
6240 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6242 FavoriteDM.URLReplace(oldURLs, newURLs);
6245 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6247 RoundList.URLReplace(oldURLs, newURLs);
6250 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6252 Filename = 'tab.sav';
6253 bFilename = '~tab.sav';
6259 oldBoardName: string;
6261 newBoardName: string;
6262 TabList: TStringList;
6265 if oldURLs.Count <> newURLs.Count then begin
6268 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6269 TabList := TStringList.Create;
6271 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6273 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6274 //
\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
6275 for i := 0 to oldURLs.Count - 1 do begin
6276 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6277 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6278 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6279 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6280 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6281 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6283 for j := 0 to TabList.Count - 1 do begin
6284 tempString := TabList[j];
6285 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6286 tempString := StringReplace(tempString, oldHost, newHost,[]);
6287 TabList[j] := tempString;
6291 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6293 if FileExists( GikoSys.GetAppDir + Filename) then begin
6294 if FileExists( GikoSys.GetAppDir + bFilename) then
6295 DeleteFile(GikoSys.GetAppDir + bFilename);
6297 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6298 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6301 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6309 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6310 procedure TGikoForm.OnMinimize;
6312 if FActiveContent <> nil then begin
6313 FIsMinimize := mtMinimizing;
6314 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6318 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6319 procedure TGikoForm.OnMinimized;
6321 FIsMinimize := mtMinimized;
6325 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6327 CoolBarResized( Sender, BrowserCoolBar );
6330 // *************************************************************************
6331 // ExternalBoardPlugInMain
6332 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6333 // *************************************************************************
6334 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6337 boardPlugIn : TBoardPlugIn;
6340 if not (Sender is TMenuItem) then
6343 item := TMenuItem( Sender );
6344 if not Assigned( Pointer( item.Tag ) ) then
6347 //
\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·
6348 boardPlugIn := TBoardPlugIn( item.Tag );
6349 boardPlugIn.PlugInMenu( item.Handle );
6352 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6353 procedure TGikoForm.TreeClick( Node : TTreeNode );
6359 if FTreeType = gttHistory then begin
6361 if TObject( Node.Data ) is TFavoriteThreadItem then
6362 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6363 FavoriteClick( Node );
6366 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6367 if ActiveList = Node.Data then
6370 ActiveListColumnSave;
6372 if TObject(Node.Data) is TBBS then begin
6373 SetActiveList(Node.data);
6374 end else if TObject(Node.Data) is TCategory then begin
6375 SetActiveList(Node.data);
6376 end else if TObject(Node.Data) is TBoard then begin
6377 if not TBoard(Node.Data).IsThreadDatRead then begin
6378 Screen.Cursor := crHourGlass;
6380 if not TBoard(Node.Data).IsThreadDatRead then
6381 GikoSys.ReadSubjectFile(Node.Data);
6383 Screen.Cursor := crDefault;
6386 Sort.SetSortDate(Now());
6387 SetActiveList(Node.data);
6390 if TObject( Node.Data ) is TBoard then begin // not TCategory
6391 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6392 if GikoSys.Setting.ListWidthState = glsMax then begin
6393 GikoDM.BrowserMinAction.Execute;
6394 if GikoForm.Visible then
6398 if GikoSys.Setting.ListHeightState = glsMax then begin
6399 GikoDM.BrowserMinAction.Execute;
6400 if GikoForm.Visible then
6408 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6409 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6412 ThreadItem : TThreadItem;
6413 shiftDown : Boolean;
6416 if Node = nil then Exit;
6418 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6420 if FTreeType = gtt2ch then begin
6421 if not (TObject(Node.Data) is TBoard) then Exit;
6422 Board := TBoard(Node.Data);
6423 DownloadList(Board, shiftDown);
6424 end else if FTreeType = gttHistory then begin
6425 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6426 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6427 DownloadContent(ThreadItem, shiftDown);
6431 // *************************************************************************
6432 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6433 // *************************************************************************
6434 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6435 Shift: TShiftState);
6437 if Key = VK_BACK then begin
6438 // UpFolderButtonClick(Sender);
6439 end else if Key = VK_SPACE then begin
6440 TreeDoubleClick( TreeView.Selected );
6441 end else if Key = VK_RETURN then begin
6442 TreeClick( TreeView.Selected );
6443 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6446 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6447 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6448 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6450 favItem : TTreeNode;
6451 favThreadItem : TFavoriteThreadItem;
6457 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6458 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6459 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6460 rect := FavoriteTreeView.Selected.DisplayRect(true);
6461 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6462 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6463 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6464 if ssDouble in Shift then begin
6465 FClickNode := FavoriteTreeView.Selected;
6466 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6470 TObject(FavoriteTreeView.Selected));
6477 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6478 if favItem = nil then Exit;
6480 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6481 favThreadItem := TFavoriteThreadItem( favItem.Data );
6482 if favThreadItem.Item <> nil then
6483 InsertBrowserTab( favThreadItem.Item, False );
6490 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6493 if FIsIgnoreResize <> rtNone then
6496 if GikoSys.Setting.ListOrientation = gloVertical then begin
6497 if GikoSys.Setting.ListHeightState = glsMin then begin
6498 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6499 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6505 procedure TGikoForm.OnResized;
6510 FOldFormWidth := Width;
6511 FIsIgnoreResize := rtNone;
6516 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6517 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6522 //
\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)
6523 if FActiveContent <> nil then begin
6524 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6525 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6527 FIsMinimize := mtNone;
6532 // *************************************************************************
6533 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6534 // *************************************************************************
6535 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6540 stlist : TStringList;
6541 i, count, rc : Integer;
6547 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6548 FActiveContent.Browser.SetFocus;
6551 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6552 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6553 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6554 if (Assigned(e)) then begin
6555 if (e.className = 'date') or (e.id = 'date') then begin
6557 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6558 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6559 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6560 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6563 stlist := TStringList.Create;
6565 stList.DelimitedText := AID;
6567 for i := 0 to stList.Count - 1 do
6568 if Length(WideString(stList[i])) = 8 then begin
6569 if GikoSys.NotDateorTimeString(stList[i]) then begin
6578 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6580 if count > 20 then begin
6581 rc := GikoUtil.MsgBox(Handle,
6582 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6583 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6584 MB_YESNO or MB_ICONQUESTION);
6585 limited := rc <> ID_YES;
6587 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6588 FActiveContent.IDAnchorPopup(body);
6597 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6598 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6600 SelectTimer.Interval := 0;
6601 if not (ListView.Selected = nil) then
6602 if( FActiveContent = nil) or
6603 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6608 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6609 procedure TGikoForm.ActiveListColumnSave;
6611 ActivListObj : TObject;
6612 i, id, idx : Integer;
6613 BBSOrder : TGikoBBSColumnList;
6614 CategoryOrder : TGikoCategoryColumnList;
6615 BoardOrder : TGikoBoardColumnList;
6618 ActivListObj := ActiveList;
6619 if ActivListObj is TBBS then begin
6620 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6621 BBSOrder := TGikoBBSColumnList.Create;
6623 for i := 0 to ListView.Columns.Count - 1 do begin
6624 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6625 idx := ListView.Column[ i ].Tag;
6626 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6627 BBSOrder.Add( TGikoBBSColumnID( id ) );
6628 //
\95\9d\82Ì
\95Û
\91¶
6629 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6631 for i := 0 to ListView.Columns.Count - 1 do
6632 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6633 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6637 end else if ActivListObj is TCategory then begin
6638 //=====
\94Â
\83\8a\83X
\83g =====
6639 CategoryOrder := TGikoCategoryColumnList.Create;
6641 for i := 0 to ListView.Columns.Count - 1 do begin
6642 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6643 idx := ListView.Column[ i ].Tag;
6644 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6645 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6646 //
\95\9d\82Ì
\95Û
\91¶
6647 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6649 for i := 0 to ListView.Columns.Count - 1 do
6650 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6651 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6655 end else if ActivListObj is TBoard then begin
6656 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6657 BoardOrder := TGikoBoardColumnList.Create;
6659 for i := 0 to ListView.Columns.Count - 1 do begin
6660 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6661 idx := ListView.Column[ i ].Tag;
6662 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6663 BoardOrder.Add( TGikoBoardColumnID( id ) );
6664 //
\95\9d\82Ì
\95Û
\91¶
6665 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6667 for i := 0 to ListView.Columns.Count - 1 do
6668 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6669 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6677 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6678 Column: TListColumn; Point: TPoint);
6684 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6685 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6686 ListColumnPopupMenu.Items.Items[ i ].Free;
6688 //
\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¢)
6689 if TObject( FActiveList ) is TBBS then begin
6691 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6692 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6693 item := TMenuItem.Create( ListColumnPopupMenu );
6694 item.Caption := GikoBBSColumnCaption[ i ];
6696 item.OnClick := ListColumnPopupMenuOnClick;
6697 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6698 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6699 item.Checked := True;
6703 ListColumnPopupMenu.Items.Add( item );
6706 end else if TObject( FActiveList ) is TCategory then begin
6708 //=====
\94Â
\83\8a\83X
\83g =====
6709 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6710 item := TMenuItem.Create( ListColumnPopupMenu );
6711 item.Caption := GikoCategoryColumnCaption[ i ];
6713 item.OnClick := ListColumnPopupMenuOnClick;
6714 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6715 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6716 item.Checked := True;
6720 ListColumnPopupMenu.Items.Add( item );
6723 end else if TObject( FActiveList ) is TBoard then begin
6725 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6726 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6727 item := TMenuItem.Create( ListColumnPopupMenu );
6728 item.Caption := GikoBoardColumnCaption[ i ];
6730 item.OnClick := ListColumnPopupMenuOnClick;
6731 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6732 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6733 item.Checked := True;
6737 ListColumnPopupMenu.Items.Add( item );
6742 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6743 Point := ListView.ClientToScreen( Point );
6744 if ListColumnPopupMenu.Items.Count > 0 then
6745 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6749 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6750 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6757 if not (Sender is TMenuItem) then
6760 ActiveListColumnSave;
6761 item := TMenuItem( Sender );
6763 if TObject( FActiveList ) is TBBS then
6764 orderList := GikoSys.Setting.BBSColumnOrder
6765 else if TObject( FActiveList ) is TCategory then
6766 orderList := GikoSys.Setting.CategoryColumnOrder
6767 else if TObject( FActiveList ) is TBoard then
6768 orderList := GikoSys.Setting.BoardColumnOrder
6772 if item.Checked then begin
6773 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6774 for i := orderList.Count - 1 downto 0 do begin
6775 if Integer( orderList[ i ] ) = item.Tag then begin
6776 orderList.Delete( i );
6781 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6782 orderList.Add( Pointer( item.Tag ) );
6785 SetActiveList( FActiveList );
6789 procedure TGikoForm.OnGestureStart(Sender: TObject);
6794 procedure TGikoForm.OnGestureMove(Sender: TObject);
6801 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6803 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6804 s := MouseGesture.GetGestureStr;
6806 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6807 if Action <> nil then
6808 ActStr := '
\81i' + Action.Caption + '
\81j';
6809 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6810 StatusBar.Panels[1].Text := s;
6813 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6818 s := MouseGesture.GetGestureStr;
6819 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6820 if Action <> nil then
6822 StatusBar.Panels[1].Text := '';
6825 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6826 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6828 ThreadItem: TThreadItem;
6830 DefaultDraw := true;
6831 if TObject(Item.Data) is TThreadItem then begin
6832 ThreadItem := TThreadItem(Item.Data);
6833 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6834 ListView.Canvas.Brush.Color := FOddColor;
6835 //
\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
6836 if (GikoSys.Setting.UnFocusedBold) and
6837 (Item.Selected) and (not ListView.Focused) then begin
6838 ListView.Canvas.Font.Style := [fsBold];
6841 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6844 if ThreadItem.UnRead then
6845 ListView.Canvas.Font.Style := [fsBold];
6850 procedure TGikoForm.FormActivate(Sender: TObject);
6852 if GikoSys.Setting.GestureEnabled then begin
6853 GikoSys.Setting.Gestures.ClearGesture;
6854 GikoSys.Setting.Gestures.LoadGesture(
6855 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6856 MouseGesture.UnHook;
6857 MouseGesture.OnGestureStart := OnGestureStart;
6858 MouseGesture.OnGestureMove := OnGestureMove;
6859 MouseGesture.OnGestureEnd := OnGestureEnd;
6860 MouseGesture.SetHook(Handle);
6862 //MouseGesture.UnHook;
6863 MouseGesture.OnGestureStart := nil;
6864 MouseGesture.OnGestureMove := nil;
6865 MouseGesture.OnGestureEnd := nil;
6869 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6871 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6872 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6876 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6881 affectedBand : TCoolBand;
6884 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6885 FIsIgnoreResize := rtResizing;
6886 PostMessage( Handle, USER_RESIZED, 0, 0 );
6888 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6889 if CoolBar = MainCoolBar then begin
6890 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6891 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6892 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6893 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6894 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6896 end else if CoolBar = ListCoolBar then begin
6897 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
6898 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6899 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6900 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6901 GikoSys.Setting.ListCoolSet[i] := CoolSet;
6903 end else if CoolBar = BrowserCoolBar then begin
6904 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
6905 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6906 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6907 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6908 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
6911 if not (Sender is TToolBar) or (CoolBar = nil) then
6913 toolbar := TToolBar( Sender );
6914 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
6915 affectedBand := nil;
6916 for i := CoolBar.Bands.Count - 1 downto 0 do begin
6917 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
6918 band := CoolBar.Bands[ i ];
6919 if band.Break or (i = 0) then begin
6920 if i + 1 < CoolBar.Bands.Count then
6921 if not CoolBar.Bands[ i + 1 ].Break then
6922 affectedBand := CoolBar.Bands[ i + 1 ];
6925 affectedBand := CoolBar.Bands[ i - 1 ];
6930 //
\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·
6931 if CoolBar = MainCoolBar then begin
6932 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
6933 coolSet.FCoolWidth := toolbar.Width + 25;
6934 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
6935 if affectedBand <> nil then begin
6936 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
6937 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6938 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
6940 end else if CoolBar = ListCoolBar then begin
6941 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
6942 coolSet.FCoolWidth := toolbar.Width + 25;
6943 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
6944 if affectedBand <> nil then begin
6945 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
6946 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6947 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
6949 end else if CoolBar = BrowserCoolBar then begin
6950 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
6951 coolSet.FCoolWidth := toolbar.Width + 25;
6952 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
6953 if affectedBand <> nil then begin
6954 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
6955 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6956 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
6963 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
6965 CoolBarResized( Sender, MainCoolBar );
6968 procedure TGikoForm.ListToolBarResize(Sender: TObject);
6970 CoolBarResized( Sender, ListCoolBar );
6973 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
6975 CoolBarResized( Sender, BrowserCoolBar );
6978 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
6979 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
6981 ThreadItem : TThreadItem;
6982 ReadList : TStringList;
6983 wordCount : TWordCount;
6985 ThreadItem := GetActiveContent;
6986 ReadList := TStringList.Create;
6987 wordCount := TWordCount.Create;
6989 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6990 {$IFDEF SPAM_FILTER_ENABLED}
6991 //
\83X
\83p
\83\80\82É
\90Ý
\92è
6992 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
6993 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
6994 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
6995 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
6997 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
6998 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7003 FActiveContent.Repaint := true;
7004 if ThreadItem <> nil then
7005 InsertBrowserTab( ThreadItem, True );
7008 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7009 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7011 ThreadItem : TThreadItem;
7014 ReadList : TStringList;
7015 wordCount : TWordCount;
7017 No := KokoPopupMenu.Tag;
7018 if No = 0 then Exit;
7019 ThreadItem := GetActiveContent;
7020 if ThreadItem = nil then Exit;
7021 body := TStringList.Create;
7023 GikoSys.GetSameIDRes(No, ThreadItem, body);
7025 ReadList := TStringList.Create;
7026 wordCount := TWordCount.Create;
7028 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7029 {$IFDEF SPAM_FILTER_ENABLED}
7030 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7031 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7033 for i := 0 to body.Count - 1 do begin
7034 {$IFDEF SPAM_FILTER_ENABLED}
7035 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7036 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7037 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7039 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7040 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7046 FActiveContent.Repaint := true;
7047 if ThreadItem <> nil then
7048 InsertBrowserTab( ThreadItem, True );
7055 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7057 firstElement: IHTMLElement;
7058 document: IHTMLDocument2;
7060 document := FActiveContent.Browser.Document as IHTMLDocument2;
7061 if Assigned(document) then
7062 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7063 if Assigned(firstElement) then
7064 if firstElement.style.visibility <> 'hidden' then
7065 firstElement.style.visibility := 'hidden';
7069 procedure TGikoForm.RepaintAllTabsBrowser();
7072 ThreadItem: TThreadItem;
7074 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7075 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7077 ThreadItem := GetActiveContent;
7078 if ThreadItem <> nil then
7079 InsertBrowserTab( ThreadItem, True );
7083 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7084 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7085 Shift: TShiftState);
7087 //
\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Ì
7088 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7089 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7090 SelectTimer.Interval := 0;
7091 if not (GikoSys.Setting.BrowserTabVisible) then begin
7092 if (GetActiveList is TBoard) then begin
7093 //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
7094 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7095 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7096 (Key = VK_UP) or (Key = VK_DOWN)) then
7097 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7101 // *************************************************************************
7102 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7103 // *************************************************************************
7104 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7105 Node: TTreeNode; var AllowEdit: Boolean);
7107 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7108 FOrigenCaption := Node.Text;
7110 // *************************************************************************
7111 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7112 // *************************************************************************
7113 function TGikoForm.GetMainForm(): TComponent;
7115 Result := Application.MainForm;
7117 // *************************************************************************
7118 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7119 // *************************************************************************
7120 function TGikoForm.GetScreenCursor(): TCursor;
7122 Result := Screen.Cursor;
7124 // *************************************************************************
7125 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7126 // *************************************************************************
7127 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7129 if (Screen.Cursor <> Cursor) then
7130 Screen.Cursor := Cursor;
7132 // *************************************************************************
7133 //!
\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
7134 // *************************************************************************
7135 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7137 //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Ì
7138 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7139 if GikoDM.CabinetVisibleAction.Enabled then begin
7140 GikoDM.CabinetVisibleAction.Execute;
7143 // *************************************************************************
7144 //!
\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
7145 // *************************************************************************
7146 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7148 if GikoDM.FavoriteArrangeAction.Enabled then begin
7149 GikoDM.FavoriteArrangeAction.Execute;
7152 // *************************************************************************
7153 //!
\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
7154 // *************************************************************************
7155 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7156 var Handled: Boolean);
7160 //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ß
7161 if Self.Active then begin
7163 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7164 WM_KEYFIRST..WM_KEYLAST :
7166 //
\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ç
7167 if (Msg.message <> WM_KEYUP)
7168 and (Msg.message <> WM_CHAR)
7169 and (Msg.message <> WM_SYSKEYUP) then begin
7170 wmMsg.Msg := Msg.message;
7171 wmMsg.CharCode := Word(Msg.wParam);
7172 wmMsg.KeyData := Msg.lParam;
7173 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7174 Self.OnShortCut(wmMsg, Handled);
7180 // *************************************************************************
7181 //!
\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
7182 // *************************************************************************
7183 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7185 Application.ProcessMessages;
7186 if not Application.Terminated then begin
7187 if PreviewTimer.Enabled then
7188 PreviewTimer.Enabled := False;
7189 //
\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
7190 if FHint <> nil then begin
7191 FHint.ReleaseHandle;
7194 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7195 if FPreviewBrowser <> nil then
7196 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7200 // *************************************************************************
7201 //!
\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
7202 // *************************************************************************
7203 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7208 if (Sender <> nil) then begin
7209 s := ' [' + Sender.ClassName + ']' + #13#10;
7211 s := ' [ Sender is nil ] ' + #13#10;
7214 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7216 // *************************************************************************
7217 //!
\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¬
7218 // *************************************************************************
7219 procedure TGikoForm.CreateControlThread();
7221 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7222 FControlThread := TThreadControl.Create(True);
7223 FControlThread.MaxThreadCount := 1;
7224 FControlThread.Resume;
7225 FControlThread.OnDownloadEnd := DownloadEnd;
7226 FControlThread.OnDownloadMsg := DownloadMsg;
7227 FControlThread.OnWork := Work;
7228 FControlThread.OnWorkBegin := WorkBegin;
7229 FControlThread.OnWorkEnd := WorkEnd;
7231 // *************************************************************************
7232 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7233 // *************************************************************************
7234 procedure TGikoForm.CreateBrowsers(count: Integer);
7237 newBrowser: TWebBrowser;
7239 BrowserNullTab := TBrowserRecord.Create;
7240 BrowserNullTab.Browser := Browser;
7241 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7242 FBrowsers := TList.Create;
7243 for i := 0 to count -1 do begin
7244 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7245 newBrowser := FBrowsers[FBrowsers.Count - 1];
7246 TOleControl(newBrowser).Parent := BrowserPanel;
7247 TOleControl(newBrowser).Align := alNone;
7248 TOleControl(newBrowser).Left := 0;
7249 TOleControl(newBrowser).Top := 0;
7250 newBrowser.RegisterAsDropTarget := False;
7251 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7252 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7253 newBrowser.OnEnter := BrowserEnter;
7254 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7255 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7256 newBrowser.Navigate(BLANK_HTML);
7257 ShowWindow(newBrowser.Handle, SW_HIDE);
7259 BrowserNullTab.Browser.BringToFront;
7260 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7261 //
\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Ì
7262 //
\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Å
7263 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7264 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7265 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7266 Application.ProcessMessages;
7269 // *************************************************************************
7270 //!
\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é
7271 // *************************************************************************
7272 procedure TGikoForm.SetSelectComboBox();
7274 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7277 ToolButton: TToolButton;
7279 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7280 SelectComboBoxPanel.Visible := False;
7282 for i := ListToolBar.ControlCount - 1 downto 0 do
7284 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7286 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7287 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7288 SelectComboBoxPanel.Parent := ListToolBar;
7289 SelectComboBoxPanel.Visible := True;
7291 SelectComboBox.Left := 0;
7292 SelectComboBox.Top := 0;
7293 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7294 SelectComboBox.Width := SelectComboBoxPanel.Width -
7295 SelectComboBoxSplitter.Width;
7297 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7298 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7299 if ToolButton = nil then begin
7300 ToolButton := TToolButton.Create(ListToolBar);
7301 ToolButton.Name := DUMMYCOMPNAME;
7303 ToolButton.Style := tbsSeparator;
7304 ToolButton.Width := 0;
7305 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7306 ListToolBar.InsertControl(ToolButton);
7307 ToolButton.Visible := False;
7309 //
\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·
7310 if (i + 1) < ListToolBar.ControlCount then
7311 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7312 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7313 ListToolBar.Controls[ i + 1 ].Visible := False;
7316 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7317 ListToolBar.Controls[ i ].Visible := False;
7325 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7326 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7327 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7334 if (TreeView.Selected <> nil) and
7335 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7336 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7337 rect := TreeView.Selected.DisplayRect(true);
7338 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7339 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7340 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7341 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7342 if ssDouble in Shift then begin
7343 TreeDoubleClick( TreeView.Selected );
7345 TreeClick(TreeView.Selected);
7352 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7353 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7357 if ActionList <> nil then begin
7358 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7360 for i := 0 to ActionList.ActionCount - 1 do begin
7362 FActionListGroupIndexes[i] :=
7363 TCustomAction(ActionList.Actions[i]).GroupIndex;
7364 TCustomAction(ActionList.Actions[i]).GroupIndex
7367 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7373 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7374 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7378 if ActionList <> nil then begin
7379 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7380 for i := 0 to ActionList.ActionCount - 1 do begin
7382 TCustomAction(ActionList.Actions[i]).GroupIndex
7383 := FActionListGroupIndexes[i];
7385 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7391 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7392 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7396 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7397 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7399 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7400 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7405 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7406 MousePos: TPoint; var Handled: Boolean);
7409 coolBar: TGikoCoolBar;
7412 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7413 coolBar := TGikoCoolBar(Sender);
7414 if (coolBar = MainCoolBar) then begin
7415 FToolBarSettingSender := tssMain;
7416 end else if (coolBar = ListCoolBar) then begin
7417 FToolBarSettingSender := tssList;
7418 end else if (coolBar = BrowserCoolBar) then begin
7419 FToolBarSettingSender := tssBrowser;
7421 FToolBarSettingSender := tssNone;
7423 pos := coolBar.ClientToScreen( MousePos );
7424 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7429 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7431 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7432 if (Msg.wParam = WM_LBUTTONUP) then begin
7436 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7437 procedure TGikoForm.StoredTaskTray;
7440 if (FIconData.uID = 0) then begin
7441 FIconData.cbSize := SizeOf(TNotifyIconData);
7442 FIconData.uID := Self.Handle;
7443 FIconData.Wnd := Handle;
7444 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7445 FIconData.uCallbackMessage := USER_TASKTRAY;
7446 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7447 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7448 Shell_NotifyIcon(NIM_ADD, @FIconData);
7449 ShowEditors(SW_HIDE);
7450 ShowWindow(Self.Handle, SW_HIDE);
7455 //!
\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¦
7456 procedure TGikoForm.UnStoredTaskTray;
7460 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7461 SetForegroundWindow(Application.Handle);
7466 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7467 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7468 ShowWindow(Self.Handle, SW_RESTORE);
7470 ShowWindow(Self.Handle, SW_SHOW);
7472 ShowEditors(SW_SHOW);
7473 GikoDM.StoredTaskTrayAction.Tag := 0;
7477 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7478 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7480 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7484 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7485 for i := 0 to Screen.CustomFormCount - 1 do begin
7486 if TObject(Screen.CustomForms[i]) is TEditorForm then
7487 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);