6 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
7 OleCtrls, ComCtrls, ExtCtrls, Menus, StdCtrls, MMSystem, DateUtils,
15 IdHTTP, ActiveX, ActnList, ImgList,
16 ToolWin, Buttons, IdComponent, UrlMon, Tabs, IdGlobal, StrUtils,
17 CommCtrl, Dialogs, GikoSystem, Setting, BoardGroup, ThreadControl, ItemDownload,
18 Editor, RoundData, GikoPanel, Favorite, HTMLDocumentEvent,
19 HintWindow, GikoCoolBar, GikoListView, Search, ExternalBoardManager,
20 ExternalBoardPlugInMain, StdActns, Variants, ExtActns,IdTCPConnection,
21 IdBaseComponent, IdTCPClient, AppEvnts, BrowserRecord, MoveHistoryItem,
22 ShellAPI,Preview, HistoryList;
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ToolButton3: TToolButton;
196 ToolButton9: TToolButton;
197 ToolButton11: TToolButton;
198 ToolButton5: TToolButton;
199 ListNameToolBar: TToolBar;
200 ListNameLabel: TLabel;
202 BrowserNameToolBar: TToolBar;
203 ItemBoardImage: TImage;
204 BrowserBoardNameLabel: TLabel;
206 BrowserNameLabel: TLabel;
213 TreeSelectNameURLPupupMenu: TMenuItem;
217 BrowserTabToolBar: TToolBar;
218 BrowserTab: TTabControl;
229 FavoriteMenu: TMenuItem;
231 BoardFavoriteAddMenu: TMenuItem;
232 ThreadFavoriteAddMenu: TMenuItem;
234 TreeSelectFavoriteAddPupupMenu: TMenuItem;
235 FavoriteTreeView: TTreeView;
236 StateIconImageList: TImageList;
238 TopRightPanel: TPanel;
241 TopCoolPanel: TPanel;
242 MainCoolBar: TGikoCoolBar;
243 MenuToolBar: TToolBar;
244 StdToolBar: TToolBar;
245 AddressToolBar: TToolBar;
246 AddressComboBox: TComboBox;
247 MoveToToolButton: TToolButton;
248 AddressImageList: TImageList;
249 AddressToolBarMenu: TMenuItem;
259 PreviewTimer: TTimer;
260 MonazillaWebPageAction1: TMenuItem;
267 ChevronPopupMenu: TPopupMenu;
271 LinkToolBar: TToolBar;
276 LinkBarPopupMenu: TPopupMenu;
278 ThreadPopupMenu: TPopupMenu;
279 MenuItem4: TMenuItem;
280 MenuItem5: TMenuItem;
281 MenuItem6: TMenuItem;
284 SelectItemNameCopyAction1: TMenuItem;
287 NameCopyPMenu: TMenuItem;
288 SelectComboBox: TComboBox;
289 MainCoolBarPopupMenu: TPopupMenu;
290 StdToolBarVisiblePMenu: TMenuItem;
291 AddressToolBarVisiblePMenu: TMenuItem;
292 LinkToolBarVisiblePMenu: TMenuItem;
313 ToolButton16: TToolButton;
320 IndividualAbon1: TMenuItem;
322 IndividualAbon2: TMenuItem;
323 AntiIndivAbonMenuItem: TMenuItem;
324 AntiIndividualAbon: TMenuItem;
328 SearchBoardName: TMenuItem;
329 TreeSelectLogDeleteSeparator: TMenuItem;
332 FavoriteTreePopupMenu: TPopupMenu;
333 FavoriteTreeRenamePopupMenu: TMenuItem;
334 FavoriteTreeNewFolderPopupMenu: TMenuItem;
336 FavoriteTreeDeletePopupMenu: TMenuItem;
337 FavoriteToolBar: TToolBar;
338 FavoriteAddToolButton: TToolButton;
339 FavoriteArrangeToolButton: TToolButton;
340 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
342 FavoriteTreeReloadPopupMenu: TMenuItem;
344 FavoriteTreeURLCopyPopupMenu: TMenuItem;
345 FavoriteTreeNameCopyPopupMenu: TMenuItem;
346 FavoriteTreeLogDeletePopupMenu: TMenuItem;
348 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
349 ToolButton20: TToolButton;
351 ExportFavoriteFileAction1: TMenuItem;
362 TreeSelectLogDeletePopupMenu: TMenuItem;
364 BBSSelectPopupMenu: TPopupMenu;
365 PlugInMenu: TMenuItem;
366 TreeSelectNamePupupMenu: TMenuItem;
367 BrowserPanel: TPanel;
369 SelectThreadSave: TMenuItem;
373 OpenLogFolder: TMenuItem;
374 Browser: TWebBrowser;
377 ResRangePopupMenu: TPopupMenu;
378 ResRangeHundPMenuItem: TMenuItem;
379 ResRangeKokoPMenuItem: TMenuItem;
380 ResRangeNewPMenuItem: TMenuItem;
381 ResRangeAllPMenuItem: TMenuItem;
382 BrowsBoradHeadAction1: TMenuItem;
383 ThreadRangePopupMenu: TPopupMenu;
390 ResRangeSelectPMenuItem: TMenuItem;
391 ListColumnPopupMenu: TPopupMenu;
400 SelectComboBoxPanel: TPanel;
401 SelectComboBoxSplitter: TImage;
402 ToolButton1: TToolButton;
405 GikoApplicationEvents: TApplicationEvents;
412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
415 SaveThreadFile: TMenuItem;
420 procedure FormCreate(Sender: TObject);
421 procedure FormDestroy(Sender: TObject);
422 procedure BrowserStatusTextChange(Sender: TObject;
423 const Text: WideString);
424 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
425 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
426 var AllowChange: Boolean);
427 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
429 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
430 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
431 Button: TToolButton; State: TCustomDrawState;
432 var DefaultDraw: Boolean);
433 procedure BrowserBeforeNavigate2(Sender: TObject;
434 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
435 Headers: OleVariant; var Cancel: WordBool);
436 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
437 const ARect: TRect; var DefaultDraw: Boolean);
438 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
439 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
440 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
441 procedure ListViewCustomDraw(Sender: TCustomListView;
442 const ARect: TRect; var DefaultDraw: Boolean);
443 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
444 Shift: TShiftState; X, Y: Integer);
445 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
446 procedure MessageListViewResize(Sender: TObject);
447 procedure CabinetVisible( isVisible : Boolean );
448 procedure FormResize(Sender: TObject);
449 procedure ListPopupMenuPopup(Sender: TObject);
450 procedure TreePopupMenuPopup(Sender: TObject);
451 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
452 var Cancel: WordBool);
453 procedure ListSplitterMoved(Sender: TObject);
454 procedure BrowserTabChange(Sender: TObject);
455 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
456 Shift: TShiftState; X, Y: Integer);
457 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
458 State: TDragState; var Accept: Boolean);
459 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
460 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
462 procedure BrowserDocumentComplete(Sender: TObject;
463 const pDisp: IDispatch; var URL: OleVariant);
464 procedure RoundNamePopupMenuPopup(Sender: TObject);
465 procedure FormShow(Sender: TObject);
466 procedure BrowserTabToolBarResize(Sender: TObject);
467 procedure FavoriteMenuClick(Sender: TObject);
468 procedure MainCoolBarResize(Sender: TObject);
469 procedure AddressToolBarResize(Sender: TObject);
470 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
472 procedure BrowserEnter(Sender: TObject);
473 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
474 procedure PreviewTimerTimer(Sender: TObject);
475 procedure MessageHideButtonClick(Sender: TObject);
476 procedure HistoryAllClearToolButtonClick(Sender: TObject);
477 procedure MainCoolBarBandInfo(Sender: TObject;
478 var BandInfo: PReBarBandInfoA);
479 procedure MainCoolBarChevronClick(Sender: TObject;
480 RebarChevron: PNMRebarChevron);
481 procedure ListCoolBarBandInfo(Sender: TObject;
482 var BandInfo: PReBarBandInfoA);
483 procedure ListCoolBarChevronClick(Sender: TObject;
484 RebarChevron: PNMRebarChevron);
485 procedure BrowserCoolBarBandInfo(Sender: TObject;
486 var BandInfo: PReBarBandInfoA);
487 procedure BrowserCoolBarChevronClick(Sender: TObject;
488 RebarChevron: PNMRebarChevron);
489 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
490 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
491 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
492 procedure SelectComboBoxChange(Sender: TObject);
493 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
495 procedure SelectComboBoxExit(Sender: TObject);
496 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
497 Shift: TShiftState; X, Y: Integer);
498 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
499 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure StatusBarResize(Sender: TObject);
503 procedure SelectComboBoxEnter(Sender: TObject);
504 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
506 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
507 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
509 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
511 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
512 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
513 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
514 Shift: TShiftState; X, Y: Integer);
515 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
516 State: TDragState; var Accept: Boolean);
517 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
519 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
520 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
521 var Handled: Boolean);
522 procedure BrowserTabPopupMenuPopup(Sender: TObject);
523 procedure BrowserTabResize(Sender: TObject);
524 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
526 procedure FavoriteTreeViewMouseDown(Sender: TObject;
527 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
528 procedure MessagePanelResize(Sender: TObject);
530 procedure SelectTimerTimer(Sender: TObject);
531 procedure ListViewColumnRightClick(Sender: TObject;
532 Column: TListColumn; Point: TPoint);
533 procedure ListViewCustomDrawItem(Sender: TCustomListView;
534 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
535 procedure FormActivate(Sender: TObject);
536 procedure BrowserPanelResize(Sender: TObject);
537 procedure MenuToolBarResize(Sender: TObject);
538 procedure ListToolBarResize(Sender: TObject);
539 procedure BrowserToolBarResize(Sender: TObject);
540 procedure KokoPopupMenuPopup(Sender: TObject);
541 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
543 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
544 var AllowEdit: Boolean);
545 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
546 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
547 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
548 var Handled: Boolean);
549 procedure GikoApplicationEventsDeactivate(Sender: TObject);
550 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
551 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
552 Shift: TShiftState; X, Y: Integer);
553 procedure GetResURLMenuClick(Sender: TObject);
554 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
555 var Handled: Boolean);
558 FEnabledCloseButton: Boolean;
559 FClickNode: TTreeNode;
562 FPreviewBrowser: TPreviewBrowser;
564 FBrowserSizeHeight: Integer;
565 FBrowserSizeWidth: Integer;
566 FTabHintIndex: Integer;
567 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
568 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
569 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
570 FActiveList: TObject;
571 FActiveContent: TBrowserRecord; //
573 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
574 FTreeType: TGikoTreeType;
578 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
579 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
580 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
581 IsDraggingSelectComboBox : Boolean;
582 DraggingSelectComboBoxPosition : TPoint;
583 FSearchDialog: TSearchDialog;
584 FDropSpaceNode: TTreeNode;
585 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
586 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
587 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
588 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
589 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¦
590 FOddColor : TColor; ///<
\82»
\82Ì
\90F
591 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
592 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
593 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
594 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
595 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
596 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
598 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
600 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
601 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
602 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ñ
603 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
604 FActionListGroupIndexes: array of Integer; ///<GikoDM
\8fã
\82Ì
\83A
\83N
\83V
\83\87\83\93\83\8a\83X
\83g
\82Ì
\8ae
\83A
\83N
\83V
\83\87\83\93\82É
\90Ý
\92è
\82³
\82ê
\82½GroupIndex
\82ð
\95Û
\91¶
\82·
\82é
\94z
\97ñ
606 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
607 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
608 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
609 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
610 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
612 procedure ListDoubleClick(Shift: TShiftState);
613 function Hook(var Message: TMessage): Boolean;
614 procedure AddRoundNameMenu(MenuItem: TMenuItem);
615 procedure SetMenuFont;
616 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
617 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
618 procedure FavoriteClick(Sender: TObject); overload;
619 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
620 function OnDocumentContextMenu(Sender: TObject): WordBool;
621 procedure ShowTextPopup;
622 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
623 procedure MenuBarChevronMenu;
624 procedure LinkBarChevronMenu;
625 procedure ToolBarChevronMenu(ToolBar: TToolBar);
626 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
627 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
628 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
629 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
630 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
631 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
632 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
633 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
634 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
636 procedure SetListViewBackGroundColor(value: TColor);
637 procedure BBSMenuItemOnClick( Sender : TObject );
638 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
639 procedure SaveCoolBarSettings;
640 procedure SaveMainCoolBarSettings;
641 procedure SaveBoardCoolBarSettings;
642 procedure SaveBrowserCoolBarSettings;
643 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
644 procedure LoadCoolBarSettings;
645 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
646 procedure OnMinimize;
647 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
648 procedure OnMinimized;
649 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
650 procedure TreeClick( Node : TTreeNode );
651 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
652 procedure TreeDoubleClick( Node : TTreeNode );
653 ///
\8ae
\8f\8a\82É
\82 \82é
\83L
\83\83\83r
\83l
\83b
\83g
\81E BBS
\83\81\83j
\83\85\81[
\82ð
\83Z
\83b
\83g
\81^
\8dX
\90V
654 procedure SetBBSMenu;
655 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
656 procedure ListColumnPopupMenuOnClick( Sender : TObject );
657 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
658 procedure SetSelectWord( const text : string );
659 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
660 function GetScreenCursor(): TCursor;
661 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
662 procedure SetScreenCursor(Cursor : TCursor);
663 //!
\83_
\83E
\83\93\83\8d\81[
\83h
\83R
\83\93\83g
\83\8d\81[
\83\8b\83X
\83\8c\83b
\83h
\82Ì
\90¶
\90¬
664 procedure CreateControlThread();
665 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
666 procedure CreateBrowsers(count: Integer);
667 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
668 procedure GetGroupIndex(ActionList: TActionList);
669 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
670 procedure SetGroupIndex(ActionList: TActionList);
671 //!
\8ew
\92è
\82³
\82ê
\82½
\83X
\83\8c\83b
\83h
\82ð
\8aJ
\82(
\83\8d\83O
\82ª
\96³
\82¢
\82Æ
\82« or
\8ew
\92èJUMP
\82Ü
\82Å
\91«
\82è
\82È
\82¢
\82Æ
\82«
\82ÍDL
\82·
\82é)
672 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
673 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
674 procedure RefreshListView(Thread: TThreadItem);
675 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
676 procedure ClearThreadRengeAction;
677 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82Ì
\83A
\83C
\83R
\83\93\8dí
\8f\9c\81\95\83t
\83H
\81[
\83\80\95\
\8e¦
678 procedure UnStoredTaskTray;
679 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
680 procedure ShowEditors(nCmdShow: Integer);
682 procedure CreateParams(var Params: TCreateParams); override;
683 procedure WndProc(var Message: TMessage); override;
684 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
685 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
686 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
690 LastRoundTime: TDateTime;
691 BrowserNullTab: TBrowserRecord;
692 FControlThread: TThreadControl;
693 FIconData : TNotifyIconData;
694 procedure MoveToURL(const inURL: string);
695 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
697 function GetHttpState: Boolean;
698 procedure SetEnabledCloseButton(Enabled: Boolean);
699 function GetTreeNode(Data: TObject): TTreeNode;
700 procedure ListViewAllSelect;
701 property ListStyle: TViewStyle read FListStyle write FListStyle;
702 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
703 property ViewType: TGikoViewType read FViewType write FViewType;
704 property NameCookie: string read FNameCookie write FNameCookie;
705 property MailCookie: string read FMailCookie write FMailCookie;
706 property ClickNode: TTreeNode read FClickNode write FClickNode;
707 property TreeType: TGikoTreeType read FTreeType write FTreeType;
708 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
709 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
710 property SelectResWord : string read FSelectResWord write FSelectResWord;
711 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
712 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
713 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
714 property ToolBarSettingSender : TToolBarSettingSenderType
715 read FToolBarSettingSender write FToolBarSettingSender;
716 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
717 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
718 property WorkCount: Integer read FWorkCount write FWorkCount;
719 procedure SetContent(inThread: TBrowserRecord);
720 function GetActiveContent: TThreadItem;
721 function GetActiveList: TObject;
723 procedure SetListViewType(AViewType: TGikoViewType); overload;
724 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
725 procedure PlaySound(SoundEventName: string);
726 procedure ShowBBSTree( inBBS : TBBS );
727 procedure ShowBBSTreeOld( inBBS : TBBS );
728 procedure ShowHistoryTree;
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, ReplaceDataModule;
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 //
\83\81\83b
\83Z
\81[
\83WID
852 USER_TREECLICK = WM_USER + 2000;
853 USER_RESIZED = WM_USER + 2001;
854 USER_MINIMIZED = WM_USER + 2002;
855 USER_SETLINKBAR = WM_USER + 2003;
856 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
857 USER_TASKTRAY = WM_USER + 2010;
860 procedure TGikoForm.CreateParams(var Params: TCreateParams);
863 if FormStyle in [fsNormal, fsStayOnTop] then begin
864 if BorderStyle in [bsSingle, bsSizeable] then begin
865 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
866 Params.WndParent := 0;
871 procedure TGikoForm.FormCreate(Sender: TObject);
873 TVS_NOTOOLTIPS = $0080;
879 wp: TWindowPlacement;
883 Writeln('============================================================');
884 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
886 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
887 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¢');
888 Writeln('============================================================');
891 Sort.SetSortDate(Now());
893 FTreeType := gttNone;
894 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
896 Application.HookMainWindow(Hook);
897 FIsIgnoreResize := rtResizing;
898 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
899 //(
\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¢)
900 //
\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
901 GetGroupIndex(GikoDM.GikoFormActionList);
902 FSearchDialog := nil;
903 CreateBrowsers(BROWSER_COUNT);
906 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
909 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
910 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
912 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
913 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
915 EnabledCloseButton := True;
917 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
918 ListView.ViewStyle := GikoSys.Setting.ListStyle;
920 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
922 AnimePanel.Left := 0;
924 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
926 //
\83L
\83\83\83r
\83l
\83b
\83g
927 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
929 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
930 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
931 GikoDM.MsgBarVisibleActionExecute(nil);
932 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
934 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
935 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
936 GikoDM.StatusBarVisibleActionExecute(nil);
938 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
939 TreeView.Items.BeginUpdate;
940 FavoriteTreeView.Items.BeginUpdate;
941 ListView.Items.BeginUpdate;
943 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
944 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
945 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
946 TreeView.Color := GikoSys.Setting.CabinetBackColor;
947 FavoriteTreeView.Font.Assign(TreeView.Font);
948 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
950 ListView.Font.Name := GikoSys.Setting.ListFontName;
951 ListView.Font.Size := GikoSys.Setting.ListFontSize;
952 ListView.Font.Color := GikoSys.Setting.ListFontColor;
953 ListView.Font.Style := [];
954 if GikoSys.Setting.ListFontBold then
955 ListView.Font.Style := [fsbold];
956 if GikoSys.Setting.ListFontItalic then
957 ListView.Font.Style := ListView.Font.Style + [fsitalic];
959 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
960 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
961 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
962 FOddColor := GikoSys.Setting.OddColor;
965 TreeView.Items.EndUpdate;
966 FavoriteTreeView.Items.EndUpdate;
967 ListView.Items.EndUpdate;
969 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
970 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
972 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
973 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
975 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
976 FResRangeMenuSelect := GikoSys.ResRange;
977 case GikoSys.ResRange of
980 GikoDM.AllResAction.Execute;
984 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
985 GikoDM.SelectResAction.Checked := True;
988 case FResRangeMenuSelect of
989 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
990 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
991 100: GikoDM.OnlyAHundredResAction.Checked := True;
995 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
996 case GikoSys.Setting.ThreadRange of
999 GikoDM.AllItemAction.Checked := True;
1004 GikoDM.LogItemAction.Checked := True;
1009 GikoDM.NewItemAction.Checked := True;
1014 GikoDM.LiveItemAction.Checked := True;
1015 ViewType := gvtLive;
1019 GikoDM.ArchiveItemAction.Checked := True;
1020 ViewType := gvtArch;
1025 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1026 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1027 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1028 BrowserTab.Font.Style := [];
1029 if GikoSys.Setting.BrowserTabFontBold then
1030 BrowserTab.Font.Style := [fsBold];
1031 if GikoSys.Setting.BrowserTabFontItalic then
1032 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1033 BrowserTab.DoubleBuffered := True;
1034 FDragWFirst := false;
1035 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1037 //
\83u
\83\89\83E
\83U
\83^
\83u
1038 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1040 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1041 GikoDM.BrowserTabTopAction.Checked := True;
1043 GikoDM.BrowserTabBottomAction.Checked := True;
1046 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1047 GikoDM.BrowserTabTabStyleAction.Checked := True;
1048 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1049 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1051 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1054 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1055 ProgressBar.Parent := StatusBar;
1056 ProgressBar.Top := 2;
1057 ProgressBar.Left := 0;
1058 ProgressBar.Width := StatusBar.Panels[0].Width;
1059 ProgressBar.Height := StatusBar.Height - 2;
1060 ProgressBar.Position := 0;
1062 //
\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Æ)
1063 InitializeBoardPlugIns;
1065 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1066 GikoSys.ListBoardFile;
1067 //
\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É
1069 //
\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è
1070 if (SplashWindow <> nil) then begin
1071 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1075 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1076 for i := Length(BBSs) - 1 downto 0 do begin
1077 if not BBSs[i].IsBoardFileRead then
1078 GikoSys.ReadBoardFile(BBSs[i]);
1080 if SplashWindow <> nil then begin
1081 SplashWindow.ProgressBar.StepBy(20);
1082 SplashWindow.Update;
1086 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1087 RoundList := TRoundList.Create;
1088 RoundList.LoadRoundBoardFile;
1089 RoundList.LoadRoundThreadFile;
1091 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1092 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1093 Style := Style or TVS_NOTOOLTIPS;
1094 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1096 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1097 TreeView.Align := alClient;
1098 FavoriteTreeView.Align := alClient;
1099 FavoriteTreeView.Visible := False;
1101 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1104 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1105 wp.length := sizeof(wp);
1106 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1107 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1108 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1109 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1110 wp.showCmd := SW_HIDE;
1111 SetWindowPlacement(Handle, @wp);
1114 if GikoSys.Setting.WindowMax then
1115 WindowState := wsMaximized;
1117 //
\83M
\83R
\83A
\83j
\83\81
1119 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1120 if FileExists(FileName) then
1121 Animate.FileName := FileName;
1129 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1130 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1131 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1134 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1135 FHistoryList := THistoryList.Create;
1137 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1138 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1139 TreeView, FTreeType);
1141 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1142 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1143 FavoriteDM.ReadFavorite;
1145 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1146 GikoDM.ArrangeAction.Execute;
1148 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1149 case GikoSys.Setting.ListWidthState of
1151 ViewPanel.Width := 1;
1152 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1153 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1156 ViewPanel.Width := GikoSys.Setting.ListWidth;
1157 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1158 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1161 ViewPanel.Width := GikoSys.Setting.ListWidth;
1162 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1163 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1167 case GikoSys.Setting.ListHeightState of
1169 ViewPanel.Height := 1;
1170 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1171 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1174 ViewPanel.Height := GikoSys.Setting.ListHeight;
1175 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1176 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1179 ViewPanel.Height := GikoSys.Setting.ListHeight;
1180 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1181 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1186 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1187 CreateControlThread();
1189 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1190 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1192 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1195 BrowserBoardNameLabel.Caption := '';
1196 BrowserNameLabel.Caption := '';
1199 FTabHintIndex := -1;
1201 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1202 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1203 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1205 MakeDefaultINIFile();
1206 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1207 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1208 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1209 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1212 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1213 SetSelectComboBox();
1215 //
\83A
\83h
\83\8c\83X
\83o
\81[
1216 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1218 //
\83\8a\83\93\83N
\83o
\81[
1220 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1222 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1223 if not FileExists(GikoSys.GetBoardFileName) then begin
1224 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
1225 + '
\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
1226 + '
\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';
1227 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1228 GikoDM.NewBoardAction.Execute;
1231 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1232 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1234 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1235 // FLastRoundTime := 0;
1238 FHint := TResPopup.Create(Self);
1240 ListView.OnData := TListViewUtils.ListViewData;
1242 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1243 CabinetVisible( False );
1244 if GikoSys.Setting.CabinetVisible then begin
1245 i := CabinetSelectPopupMenu.Items.Count - 1;
1246 if GikoSys.Setting.CabinetIndex = i - 1 then
1247 GikoDM.CabinetHistoryAction.Execute
1248 else if GikoSys.Setting.CabinetIndex = i then
1249 GikoDM.CabinetFavoriteAction.Execute
1251 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1252 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1253 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1254 FIsIgnoreResize := rtResizing;
1255 GikoDM.CabinetBBSAction.Execute;
1258 ShowBBSTreeOld( BBSs[ 0 ] );
1259 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1262 //
\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
1263 for i := 1 to ParamCount do begin
1264 MoveToURL(ParamStr(i));
1267 GikoDM.RepaintStatusBar;
1268 StatusBarResize(Sender);
1270 dummy1.Caption := ItemReservPMenu.Caption;
1271 dummy1.Hint := ItemReservPMenu.Hint;
1273 {$IFDEF SPAM_FILTER_ENABLED}
1274 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1275 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1278 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1279 MouseGesture := TMouseGesture.Create;
1280 GikoSys.Setting.Gestures.LoadGesture(
1281 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1282 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1283 MouseGesture.OnGestureStart := OnGestureStart;
1284 MouseGesture.OnGestureMove := OnGestureMove;
1285 MouseGesture.OnGestureEnd := OnGestureEnd;
1286 if GikoSys.Setting.GestureEnabled then
1287 MouseGesture.SetHook( Handle );
1289 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1290 GikoSys.SetGikoMessage;
1292 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1293 if GikoSys.Setting.AutoLogin then
1294 GikoDM.LoginAction.Execute;
1296 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1298 //
\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è
1299 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1300 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1302 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1303 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1305 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1306 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
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;
1891 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1892 if (StatusBar.Panels[1].Text = Text2) then begin
1894 Writeln('Status Text is not changed!');
1898 StatusBar.Panels[1].Text := Text2;
1900 if FHint <> nil then begin
1901 FHint.ReleaseHandle;
1904 if FPreviewBrowser <> nil then
1905 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1907 if not GikoSys.Setting.UnActivePopup then
1908 if not GikoForm.Active then
1913 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1914 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1917 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1918 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1919 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1920 if FPreviewBrowser = nil then begin
1921 FPreviewBrowser := TPreviewBrowser.Create(Self);
1922 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1923 TOleControl(FPreviewBrowser).Parent := nil;
1925 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1926 FPreviewURL := Text2;
1927 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1928 PreviewTimer.Enabled := True;
1929 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1930 if Pos('mailto:', Text2) = 1 then begin
1931 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1932 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1934 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1935 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1936 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1937 if (Assigned(e)) then begin
1938 tmp2 := ZenToHan(e.Get_outerText);
1939 if (GikoSys.IsNumeric(tmp2)) then begin
1940 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1941 wkIntSt := StrToInt64(tmp2);
1942 wkIntTo := StrToInt64(tmp2);
1943 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1944 FHint.PopupType := gptThread;
1945 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1947 FHint.PopupType := gptRaw;
1952 threadItem := GetActiveContent;
1953 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1954 PathRec := Gikosys.Parse2chURL2(URL);
1955 if (PathRec.FNoParam) then begin
1959 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1961 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1963 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1965 URL := GikoSys.GetBrowsableThreadURL( URL );
1966 wkIntSt := PathRec.FSt;
1967 wkIntTo := PathRec.FTo;
1969 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1972 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1974 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1976 end else if wkIntSt > wkIntTo then begin
1981 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1986 threadItem := BBSsFindThreadFromURL( URL );
1988 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1989 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1990 if board <> nil then begin
1991 if not board.IsThreadDatRead then
1992 GikoSys.ReadSubjectFile( board );
1993 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1997 if threadItem <> nil then begin
1998 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
1999 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2000 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2004 FHint.PopupType := gptThread;
2005 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2010 if FHint.PopupType = gptRaw then begin
2011 if FHint.Caption <> '' then
2014 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2020 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2024 FEnabledCloseButton := Enabled;
2025 SysMenu := GetSystemMenu(Handle, False);
2027 if Enabled then begin
2028 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2030 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2033 DrawMenuBar(Handle);
2036 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2037 var AllowChange: Boolean);
2039 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2040 // if FTreeType = gtt2ch then
2041 // FSortIndex := -1;
2044 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2045 Shift: TShiftState);
2049 if GetActiveList is TBoard then begin
2051 VK_BACK:; // UpFolderButtonClick(Sender);
2052 VK_SPACE: ListDoubleClick(Shift);
2053 VK_RETURN: ListClick;
2056 if ListView.Selected <> nil then begin
2057 pos.X := ListView.Column[ 0 ].Width;
2058 pos.Y := ListView.Selected.Top;
2060 pos.X := ListView.Left;
2061 pos.Y := ListView.Top;
2063 Windows.ClientToScreen( ListView.Handle, pos );
2064 ListPopupMenu.Popup( pos.X, pos.Y );
2067 end else begin // TBBS, TCategory
2069 VK_BACK:; // UpFolderButtonClick(Sender);
2070 VK_SPACE: ListClick;
2071 VK_RETURN: ListDoubleClick(Shift);
2074 if ListView.Selected <> nil then begin
2075 pos.X := ListView.Column[ 0 ].Width;
2076 pos.Y := ListView.Selected.Top;
2078 pos.X := ListView.Left;
2079 pos.Y := ListView.Top;
2081 Windows.ClientToScreen( ListView.Handle, pos );
2082 ListPopupMenu.Popup( pos.X, pos.Y );
2088 function TGikoForm.GetHttpState: Boolean;
2090 Result := FHttpState;
2093 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2094 Column: TListColumn);
2098 vSortIndex : Integer;
2099 vSortOrder : Boolean;
2101 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2102 if TObject( FActiveList ) is TBBS then begin
2103 orderList := GikoSys.Setting.BBSColumnOrder;
2104 vSortIndex := GikoSys.Setting.BBSSortIndex;
2105 vSortOrder := GikoSys.Setting.BBSSortOrder;
2106 end else if TObject( FActiveList ) is TCategory then begin
2107 orderList := GikoSys.Setting.CategoryColumnOrder;
2108 vSortIndex := GikoSys.Setting.CategorySortIndex;
2109 vSortOrder := GikoSys.Setting.CategorySortOrder;
2110 end else if TObject( FActiveList ) is TBoard then begin
2111 orderList := GikoSys.Setting.BoardColumnOrder;
2112 vSortIndex := GikoSys.Setting.BoardSortIndex;
2113 vSortOrder := GikoSys.Setting.BoardSortOrder;
2117 id := Integer( orderList[ idx ] );
2120 if vSortIndex = id then
2121 vSortOrder := not vSortOrder
2123 vSortOrder := id = 0;
2126 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2129 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2130 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2134 DefaultDraw := True;
2136 DefaultDraw := False;
2137 if (cdsSelected in State) or (cdsHot in State) then begin
2138 Sender.Canvas.Brush.Color := clHighlight;
2139 Sender.Canvas.Font.Color := clHighlightText;
2141 Sender.Canvas.Brush.Color := clBtnFace;
2142 Sender.Canvas.Font.Color := clBtnText;
2144 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2145 Sender.Canvas.FillRect(ARect);
2146 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2149 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2154 Nodes := TreeView.Items;
2156 for i := 0 to Nodes.Count - 1 do begin
2157 if Nodes.Item[i].Data = Data then begin
2158 Result := Nodes.Item[i];
2165 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2166 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2167 Headers: OleVariant; var Cancel: WordBool);
2172 kMenuName: string = 'menu:';
2175 if Pos(kMenuName, URL) <> 0 then begin
2176 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2178 if not GikoSys.IsNumeric(sNo) then Exit;
2182 KokoPopupMenu.Tag := StrToInt(sNo);
2183 KokoPopupMenu.Popup(p.x, p.y);
2184 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2185 Cancel := not GikoSys.Setting.OpenMailer;
2190 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2191 const ARect: TRect; var DefaultDraw: Boolean);
2195 IsBoardNode: Boolean;
2201 Category: TCategory;
2205 DefaultDraw := True;
2207 if FTreeType = gttHistory then Exit;
2209 TreeView.Canvas.Font.Color := clBlue;
2210 IsBoardNode := False;
2211 for i := 0 to TreeView.Items.Count - 1 do begin
2213 if not TreeView.Items[i].IsVisible then
2216 if TObject(TreeView.Items[i].Data) is TCategory then begin
2217 if TreeView.Items[i].Expanded then
2220 IsBoardNode := False;
2221 Category := TCategory(TreeView.Items[i].Data);
2222 for j := 0 to Category.Count - 1 do begin
2223 Board := Category.Items[j];
2224 if Board <> nil then begin
2225 if Board.UnRead > 0 then begin
2233 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2234 IsBoardNode := True;
2235 Board := TBoard(TreeView.Items[i].Data);
2237 Cnt := Board.UnRead;
2243 Bitmap := TBitmap.Create;
2245 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2246 Bitmap.Canvas.Font.Style := [fsBold];
2247 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2252 NodeRect := TreeView.Items[i].DisplayRect(True);
2255 CntText := '(' + IntToStr(Cnt) + ')'
2256 else if Cnt = 1 then
2260 TextWidth := TreeView.Canvas.TextWidth(CntText);
2262 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2264 NodeRect.Left + NodeWidth + TextWidth + 8,
2266 DrawText(TreeView.Canvas.Handle,
2270 DT_SINGLELINE or DT_VCENTER);
2272 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2275 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2276 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2279 Category: TCategory;
2282 DefaultDraw := True;
2284 if FTreeType = gttHistory then Exit;
2286 TreeView.Canvas.Font.Style := [];
2287 if Node <> nil then begin
2288 if TObject(Node.Data) is TCategory then begin
2289 Category := TCategory(Node.Data);
2290 for i := 0 to Category.Count - 1 do begin
2291 Board := Category.Items[i];
2292 if Board <> nil then begin
2293 if Board.UnRead > 0 then begin
2294 TreeView.Canvas.Font.Style := [fsBold];
2299 end else if TObject(Node.Data) is TBoard then begin
2300 Board := TBoard(Node.Data);
2301 if Board.UnRead > 0 then
2302 TreeView.Canvas.Font.Style := [fsBold];
2307 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2309 TreeView.Invalidate;
2311 if TObject(Node.Data) is TBBS then begin
2312 TBBS(Node.Data).NodeExpand := True;
2313 end else if TObject(Node.Data) is TCategory then begin
2314 TCategory(Node.Data).NodeExpand := True;
2315 end else if TObject(Node.Data) is TBoard then begin
2316 TBoard(Node.Data).NodeExpand := True;
2320 procedure TGikoForm.ListViewAllSelect;
2325 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2327 AddMessageList(Msg, nil, Icon);
2329 // *************************************************************************
2330 //!
\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
2331 // *************************************************************************
2332 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2336 boardPlugIn : TBoardPlugIn;
2341 if Item.DownType = gdtBoard then
2342 ATitle := Item.Board.Title
2344 ATitle := Item.ThreadItem.Title;
2346 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2348 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2350 if Item.DownType = gdtBoard then begin
2353 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2354 if GetActiveList = Item.Board then begin
2356 //
\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é
2357 if (GikoSys.Setting.AutoSortThreadList) then begin
2358 GikoSys.Setting.BoardSortIndex := 0;
2359 GikoSys.Setting.BoardSortOrder := True;
2361 Sort.SetSortDate(Now());
2362 SetActiveList(Item.Board);
2364 Item.Board.Modified := True;
2365 Item.Board.IsThreadDatRead := True;
2368 end else if Item.DownType = gdtThread then begin
2371 Item.ThreadItem.NewArrival := True;
2372 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2373 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2374 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2375 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2376 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2377 Item.ThreadItem.Title := Res.FTitle;
2378 ATitle := Item.ThreadItem.Title;
2379 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2380 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2381 ATitle := Res.FTitle;
2383 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2384 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2385 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2389 if GikoSys.Setting.BrowserTabVisible then begin
2390 if GetActiveContent = Item.ThreadItem then
2391 InsertBrowserTab(Item.ThreadItem)
2392 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2393 InsertBrowserTab(Item.ThreadItem, True)
2395 InsertBrowserTab(Item.ThreadItem, False);
2398 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2399 InsertBrowserTab(Item.ThreadItem);
2402 Application.ProcessMessages;
2404 if Item.State = gdsComplete then begin
2406 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2410 PlaySound('NewDiff');
2411 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2416 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2417 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2418 Item.ThreadItem.Round := False;
2419 //Item.ThreadItem.RoundName := '';
2420 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);
2423 //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
2424 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2425 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2426 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2427 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2428 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2429 case GikoForm.ViewType of
2430 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2431 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2432 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2433 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2434 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2435 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2438 RefreshListView(Item.ThreadItem);
2441 end else if Item.State = gdsNotModify then begin
2443 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2444 //SetContent(Item.ThreadItem);
2445 InsertBrowserTab(Item.ThreadItem);
2447 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2448 PlaySound('NoChange');
2449 Screen.Cursor := crDefault;
2450 end else if Item.State = gdsAbort then begin
2452 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2453 end else if Item.State = gdsError then begin
2458 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2459 // if Item.ResponseCode = 302 then
2460 // 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);
2466 if FWorkCount < 0 then FWorkCount := 0;
2467 if FWorkCount = 0 then begin
2469 Animate.Active := False;
2471 Screen.Cursor := crDefault;
2478 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2480 // SetProgressValue(Number, 0, AWorkCountMax);
2481 // ProgressBar.Visible := True;
2482 ProgressBar.Position := 0;
2483 ProgressBar.Max := AWorkCountMax;
2484 FDownloadTitle := AWorkTitle;
2485 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2486 FDownloadMax := AWorkCountMax;
2489 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2491 ProgressBar.Position := 0;
2492 if FDownloadMax <> 0 then
2493 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2496 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2498 ProgressBar.Position := AWorkCount;
2499 // SetProgressValue(Number, AWorkCount);
2500 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2503 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2505 ListItem: TListItem;
2507 MessageListView.Items.BeginUpdate;
2509 ListItem := MessageListView.Items.Add;
2510 ListItem.Caption := ACaption;
2511 ListItem.Data := AObject;
2512 ListItem.MakeVisible(False);
2514 gmiOK: ListItem.ImageIndex := 0;
2515 gmiSAD: ListItem.ImageIndex := 1;
2516 gmiNG: ListItem.ImageIndex := 2;
2517 gmiWhat: ListItem.ImageIndex := 3;
2520 MessageListView.Items.EndUpdate;
2525 function TGikoForm.InsertBrowserTab(
2526 ThreadItem : TThreadItem;
2527 ActiveTab : Boolean = True
2530 i, j, idx : Integer;
2531 favItem : TFavoriteThreadItem;
2532 newBrowser : TBrowserRecord;
2536 if Threaditem = nil then Exit;
2538 if ThreadItem.IsLogFile then begin
2539 //
\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é
2540 //
\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é
2541 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2542 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2543 j := FBrowsers.IndexOf(FActiveContent.Browser);
2544 if j = BROWSER_COUNT - 1 then
2545 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2547 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2548 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2551 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2552 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2553 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2554 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2555 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2556 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2557 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2558 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2562 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2563 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2564 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2566 if ActiveTab then begin
2567 BrowserTab.TabIndex := i;
2568 BrowserTab.OnChange(nil);
2575 idx := BrowserTab.TabIndex;
2576 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2577 newBrowser := TBrowserRecord.Create;
2578 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2579 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2580 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2584 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2585 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2586 //newBrowser.Browser.Navigate(BLANK_HTML);
2587 newBrowser.thread := ThreadItem;
2588 newBrowser.Repaint := true;
2589 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2591 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2592 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2593 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2597 if ActiveTab then begin
2598 BrowserTab.TabIndex := 0;
2602 newBrowser := TBrowserRecord.Create;
2603 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
2604 if TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2605 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
2609 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2610 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2611 //newBrowser.Browser.Navigate(BLANK_HTML);
2612 newBrowser.thread := ThreadItem;
2613 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2614 newBrowser.Repaint := true;
2616 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2617 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2618 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2622 if ActiveTab then begin
2623 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2624 BrowserTab.TabIndex := 0
2626 BrowserTab.TabIndex := i;
2629 Result := newBrowser;
2630 if(ActiveTab) or (idx = -1) then begin
2631 BrowserTab.OnChange(nil);
2634 if BrowserNullTab = nil then begin
2635 BrowserNullTab := TBrowserRecord.Create;
2636 BrowserNullTab.Browser := Browser;
2638 // if BrowserNullTab.thread <> ThreadItem then begin
2639 // BrowserNullTab.Movement := '';
2641 BrowserNullTab.thread := ThreadItem;
2642 Result := BrowserNullTab;
2643 BrowserTab.TabIndex := -1;
2644 SetContent(BrowserNullTab);
2647 if GikoSys.Setting.URLDisplay then
2648 AddressComboBox.Text := ThreadItem.URL;
2652 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2661 ThreadItem: TThreadItem;
2662 Thread: TBrowserRecord;
2663 ThreadTitle, ThreadPTitle: string;
2664 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2667 idx := BrowserTab.TabIndex;
2668 if (FActiveContent <> nil) and
2669 (FActiveContent.Thread <> Thread.Thread) and
2670 (FActiveContent.Browser <> nil) and
2671 (Assigned(FActiveContent.Browser.Document)) then begin
2674 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2677 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2682 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2683 Thread.Browser.Navigate(BLANK_HTML);
2684 BrowserBoardNameLabel.Caption := '';
2685 ItemBoardImage.Picture := nil;
2686 BrowserNameLabel.Caption := '';
2687 ItemImage.Picture := nil;
2688 BrowserNullTab.Thread := nil;
2689 //TOleControl(BrowserNullTab.Browser).Visible := true;
2690 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2691 FActiveContent := nil;
2693 end else if Thread.Browser = nil then begin
2694 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2695 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2696 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2697 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2698 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2702 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2703 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2706 ThreadTitle := Thread.Thread.Title;
2707 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2708 //ThreadScrollTop := Thread.Thread.ScrollTop;
2709 ThreadIsLog := Thread.Thread.IsLogFile;
2710 ThreadItem := Thread.Thread;
2711 ThreadNewArraical := Thread.Thread.NewArrival;
2712 //ThreadUnRead := Thread.Thread.UnRead;
2713 BBSID := ThreadItem.ParentBoard.BBSID;
2714 FileName := ThreadItem.FileName;
2716 if GetCapture = ListView.Handle then
2719 Screen.Cursor := crHourGlass;
2723 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2724 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2725 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2727 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2728 if (not Assigned(Thread.Browser.Document)) then begin
2729 Thread.Browser.Navigate('about:blank');
2731 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2732 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2733 Application.ProcessMessages;
2734 if idx <> BrowserTab.TabIndex then begin
2739 if (Thread <> nil) and (ThreadItem <>nil) then begin
2740 BrowserBoardNameLabel.Caption := ThreadPTitle;
2741 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2742 BrowserNameLabel.Caption := ThreadTitle;
2743 ItemImage.Picture := nil;
2745 if ThreadNewArraical then
2746 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2748 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2750 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2752 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2753 BrowserNameLabel.Left := ItemImage.Left + 20;
2756 //ActiveContent
\81@
\82Ì
\8dX
\90V
2757 FActiveContent := Thread;
2759 if not ThreadIsLog then begin
2760 Self.Caption := GikoDataModule.CAPTION_NAME ;
2761 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2762 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2764 Thread.Browser.BringToFront;
2765 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2766 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2768 doc.charset := 'Shift_JIS';
2775 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2776 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2777 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2778 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2779 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2780 //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«
2781 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2782 if Thread.Repaint then begin
2783 Thread.Repaint := false;
2785 Thread.Browser.OnStatusTextChange := nil;
2786 LockWindowUpdate(Thread.Browser.ParentWindow);
2787 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2788 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2789 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2793 RefreshListView(ThreadItem);
2795 Screen.Cursor := crDefault;
2799 function TGikoForm.GetActiveContent: TThreadItem;
2802 if FActiveContent <> nil then
2803 Result := FActiveContent.Thread
2812 procedure TGikoForm.SetActiveList(Obj: TObject);
2816 // if FActiveList <> Obj then begin
2819 if ListView.Selected <> nil then
2820 idx := ListView.Selected.Index
2826 ListView.Items.Count := 0;
2827 ListView.Items.Clear;
2828 ListView.Selected := nil;
2829 // ListView.Columns.Clear;
2830 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2831 and (FActiveContent.Thread.IsLogFile) then begin
2833 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2835 on E: Exception do begin
2836 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2837 //
\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é
2838 ReleaseBrowser(FActiveContent);
2839 FActiveContent.Thread := nil;
2840 Self.Caption := GikoDataModule.CAPTION_NAME;
2844 Self.Caption := GikoDataModule.CAPTION_NAME;
2845 //Application.Title := CAPTION_NAME;
2847 // ActiveListColumnSave;
2849 Screen.Cursor := crHourGlass;
2851 if Obj is TBBS then begin
2852 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2853 end else if Obj is TCategory then begin
2854 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2855 end else if Obj is TBoard then begin
2856 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2859 Screen.Cursor := crDefault;
2862 if idx >= 0 then begin
2863 if idx >= ListView.Items.Count then
2864 idx := ListView.Items.Count - 1;
2865 ListView.ItemIndex := idx;
2866 ListView.ItemFocused := ListView.Items.Item[ idx ];
2872 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2873 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2874 function TGikoForm.GetActiveList: TObject;
2876 Result := FActiveList;
2879 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2881 SetListViewType(AViewType, '', False);
2884 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2889 for i := Length( BBSs ) - 1 downto 0 do begin
2890 BBSs[i].SelectText := SelectText;
2891 BBSs[i].KubetsuChk := KubetsuChk;
2893 ViewType := AViewType;
2894 if ActiveList is TBoard then begin
2895 Board := TBoard(ActiveList);
2897 //gvtAll: ListView.Items.Count := Board.Count;
2898 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2899 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2900 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2901 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2902 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2906 SetActiveList(Board);
2910 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2911 const ARect: TRect; var DefaultDraw: Boolean);
2917 if ListView.Items.Count = 0 then begin
2918 DefaultDraw := true;
2919 ListView.Canvas.Brush.Color := ListView.Color;
2920 ListView.Canvas.FillRect(ARect);
2924 ListView.Canvas.Font.Color := clWindowText;
2925 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2928 ListView.Canvas.Font.Color := clBlue;
2929 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';
2932 ListView.Canvas.Font.Color := clGreen;
2933 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2936 ListView.Canvas.Font.Color := clFuchsia;
2937 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';
2940 ListView.Canvas.Font.Color := clMaroon;
2941 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2944 ListView.Canvas.Font.Color := clNavy;
2945 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';
2946 if GetActiveList is TBoard then
2947 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2955 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2956 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2957 ListView.Canvas.TextOut(p.X, p.Y, s);
2959 DefaultDraw := True;
2963 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2965 Item: TDownloadItem;
2967 if not Board.IsThreadDatRead then
2968 GikoSys.ReadSubjectFile(Board);
2969 Item := TDownloadItem.Create;
2971 Item.Board := Board;
2972 Item.DownType := gdtBoard;
2973 Item.ForceDownload := ForceDownload;
2974 FControlThread.AddItem(Item);
2975 if FWorkCount = 0 then begin
2977 Animate.Active := True;
2980 Screen.Cursor := crAppStart;
2988 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2990 Item: TDownloadItem;
2992 Item := TDownloadItem.Create;
2994 Item.ThreadItem := ThreadItem;
2995 Item.DownType := gdtThread;
2996 Item.ForceDownload := ForceDownload;
2997 FControlThread.AddItem(Item);
2998 if FWorkCount = 0 then begin
3000 Animate.Active := True;
3003 Screen.Cursor := crAppStart;
3011 procedure TGikoForm.PlaySound(SoundEventName: string);
3015 if not GikoSys.Setting.Mute then begin
3016 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3017 if FileExists(FileName) then begin
3018 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3019 sndPlaySound(nil, SND_SYNC);
3020 Application.ProcessMessages;
3022 sndPlaySound(PChar(FileName), SND_ASYNC);
3028 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3029 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3031 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3034 procedure TGikoForm.ShowBBSTreeOld(
3042 FavoriteTreeView.Visible := False;
3043 FavoriteToolBar.Hide;
3044 TreeView.Visible := True;
3046 b := CabinetSelectPopupMenu.Items.Count - 1;
3047 for i := 0 to b do begin
3048 item := CabinetSelectPopupMenu.Items[ i ];
3049 if item is TBBSMenuItem then begin
3050 if TBBSMenuItem( item ).Data = inBBS then begin
3051 item.Checked := True;
3052 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3053 CabinetMenu.Items[ i ].Checked := True;
3054 GikoSys.Setting.CabinetIndex := i;
3058 item.Checked := False;
3059 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3060 CabinetMenu.Items[ i ].Checked := False;
3062 CabinetSelectToolButton.Caption := inBBS.Title;
3064 GikoDM.CabinetHistoryAction.Checked := False;
3065 GikoDM.CabinetFavoriteAction.Checked := False;
3067 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3068 FTreeType := gtt2ch;
3069 HistoryToolBar.Hide;
3070 FActiveBBS := inBBS;
3071 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3072 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3073 //?c???[??g?b?v?????I????
3074 if GetActiveList = nil then
3075 TreeView.Selected := TreeView.Items[0]
3077 for i := 0 to TreeView.Items.Count - 1 do begin
3078 if TreeView.Items[i].Data = GetActiveList then begin
3079 TreeView.Selected := TreeView.Items[i];
3083 TreeView.Selected := TreeView.Items[0]
3091 procedure TGikoForm.ShowBBSTree(
3100 FavoriteTreeView.Visible := False;
3101 FavoriteToolBar.Hide;
3102 TreeView.Visible := True;
3104 b := CabinetSelectPopupMenu.Items.Count - 1;
3105 for i := 0 to b do begin
3106 item := CabinetSelectPopupMenu.Items[ i ];
3107 if item is TBBSMenuItem then begin
3108 if TBBSMenuItem( item ).Data = inBBS then begin
3109 item.Checked := True;
3110 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3111 CabinetMenu.Items[ i ].Checked := True;
3112 GikoSys.Setting.CabinetIndex := i;
3116 item.Checked := False;
3117 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3118 CabinetMenu.Items[ i ].Checked := False;
3120 CabinetSelectToolButton.Caption := inBBS.Title;
3122 GikoDM.CabinetHistoryAction.Checked := False;
3123 GikoDM.CabinetFavoriteAction.Checked := False;
3125 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3126 or (not (CabinetPanel.Visible)) then begin
3127 FTreeType := gtt2ch;
3128 HistoryToolBar.Hide;
3129 FActiveBBS := inBBS;
3130 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3131 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3132 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3133 if GetActiveList = nil then begin
3135 TreeClick( TreeView.Items[0] );
3139 for i := 0 to TreeView.Items.Count - 1 do begin
3140 if TreeView.Items[i].Data = GetActiveList then begin
3141 TreeClick( TreeView.Items[i] );
3145 TreeClick( TreeView.Items[0] );
3153 procedure TGikoForm.ShowHistoryTree;
3158 if CabinetPanel.Visible then begin
3159 if FTreeType = gttHistory then begin
3160 CabinetVisible( False );
3161 GikoDM.CabinetHistoryAction.Checked := False;
3163 GikoDM.CabinetHistoryAction.Checked := True;
3166 CabinetVisible( True );
3167 GikoDM.CabinetHistoryAction.Checked := True;
3170 // BBS...BBS, History, Favorite
3171 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3173 FavoriteTreeView.Visible := False;
3174 TreeView.Visible := True;
3176 GikoDM.CabinetBBSAction.Checked := False;
3177 GikoDM.CabinetFavoriteAction.Checked := False;
3179 if FTreeType <> gttHistory then begin
3180 b := CabinetSelectPopupMenu.Items.Count - 1;
3181 for i := 0 to b do begin
3182 item := CabinetSelectPopupMenu.Items[ i ];
3183 if item is TBBSMenuItem then begin
3184 item.Checked := False;
3185 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3186 CabinetMenu.Items[ i ].Checked := False;
3190 FTreeType := gttHistory;
3191 HistoryToolBar.Show;
3192 FavoriteToolBar.Hide;
3193 FHistoryList.SetTreeNode( TreeView );
3194 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3198 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3200 ChangeEvent: TTVChangedEvent;
3201 ChangingEvent: TTVChangingEvent;
3205 if Item is TCategory then
3206 bbs := TCategory( Item ).ParenTBBS
3207 else if Item is TBoard then
3208 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3212 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3213 if Item <> FActiveList then begin
3215 ChangingEvent := nil;
3217 if not CallEvent then begin
3218 ChangeEvent := TreeView.OnChange;
3219 ChangingEvent := TreeView.OnChanging;
3222 if not CallEvent then begin
3223 TreeView.OnChange := nil;
3224 TreeView.OnChanging := nil;
3226 //Application.ProcessMessages;
3227 for i := 0 to TreeView.Items.Count - 1 do begin
3228 if TreeView.Items[i].Data = Item then begin
3229 TreeView.Items[i].Selected := True;
3231 TreeClick(TreeView.Items[i]);
3235 //Application.ProcessMessages;
3237 if not CallEvent then begin
3238 TreeView.OnChange := ChangeEvent;
3239 TreeView.OnChanging := ChangingEvent;
3244 if Item <> FActiveList then begin
3245 ActiveListColumnSave;
3246 if (Item is TBBS) or (Item is TCategory) then begin
3247 ListView.Columns.Clear;
3248 SetActiveList( Item );
3249 end else if Item is TBoard then begin
3250 if not TBoard( Item ).IsThreadDatRead then begin
3251 Screen.Cursor := crHourGlass;
3253 if not TBoard( Item ).IsThreadDatRead then
3254 GikoSys.ReadSubjectFile(TBoard( Item ));
3256 Screen.Cursor := crDefault;
3259 Sort.SetSortDate(Now());
3260 SetActiveList( Item );
3265 if Item is TBoard then begin // not TCategory
3266 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3267 if GikoSys.Setting.ListWidthState = glsMax then begin
3268 GikoDM.BrowserMinAction.Execute;
3269 if GikoForm.Visible then
3273 if GikoSys.Setting.ListHeightState = glsMax then begin
3274 GikoDM.BrowserMinAction.Execute;
3275 if GikoForm.Visible then
3282 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3283 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3285 listItem : TListItem;
3286 threadItem : TThreadItem;
3293 if not (GetActiveList is TBoard) then Exit;
3294 listItem := ListView.GetItemAt( X, Y );
3295 if listItem = nil then Exit;
3296 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3298 threadItem := TThreadItem(ListItem.Data);
3299 InsertBrowserTab(threadItem, False);
3300 if threadItem.IsLogFile then
3301 ListView.UpdateItems(listItem.Index, listItem.Index);
3305 //
\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Å
3306 if (ssDouble in Shift) then
3307 ListDoubleClick(Shift)
3315 Windows.ClientToScreen( ListView.Handle, pos );
3316 ListPopupMenu.Popup( pos.X, pos.Y );
3322 procedure TGikoForm.ListClick;
3324 ListItem: TListItem;
3325 ThreadItem: TThreadItem;
3327 if ListView.SelCount <> 1 then Exit;
3328 ListItem := ListView.Selected;
3329 if ListItem = nil then Exit;
3330 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3332 ThreadItem := TThreadItem(ListItem.Data);
3333 if ThreadItem.IsLogFile then begin
3334 InsertBrowserTab(ThreadItem);
3335 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3337 InsertBrowserTab(ThreadItem);
3340 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3341 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3342 if GikoSys.Setting.ListWidthState = glsMin then begin
3343 GikoDM.BrowserMaxAndFocusAction.Execute;
3346 if GikoSys.Setting.ListHeightState = glsMin then begin
3347 GikoDM.BrowserMaxAndFocusAction.Execute;
3353 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3355 ThreadItem: TThreadItem;
3358 shiftDown := (ssShift in Shift);
3360 if ListView.Selected = nil then Exit;
3362 if TObject(ListView.Selected.Data) is TCategory then begin
3363 SelectTreeNode(ListView.Selected.Data, True);
3364 end else if TObject(ListView.Selected.Data) is TBoard then begin
3365 SelectTreeNode(ListView.Selected.Data, True)
3366 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3367 Application.ProcessMessages;
3368 ThreadItem := TThreadItem(ListView.Selected.Data);
3369 DownloadContent(ThreadItem, shiftDown);
3371 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3372 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3373 if GikoSys.Setting.ListWidthState = glsMin then begin
3374 GikoDM.BrowserMaxAction.Execute;
3375 GikoDM.SetFocusForBrowserAction.Execute;
3378 if GikoSys.Setting.ListHeightState = glsMin then begin
3379 GikoDM.BrowserMaxAction.Execute;
3380 GikoDM.SetFocusForBrowserAction.Execute;
3387 procedure TGikoForm.BrowserMovement(const AName: string);
3389 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3390 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3391 and (FActiveContent <> nil) then begin
3392 FActiveContent.Move(AName);
3396 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3398 if TObject(Node.Data) is TBBS then begin
3399 TBBS(Node.Data).NodeExpand := False;
3400 end else if TObject(Node.Data) is TCategory then begin
3401 TCategory(Node.Data).NodeExpand := False;
3402 end else if TObject(Node.Data) is TBoard then begin
3403 TBoard(Node.Data).NodeExpand := False;
3405 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3406 TreeClick(TreeView.Selected);
3410 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3412 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3414 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3416 TreeSplitter.Visible := isVisible;
3417 CabinetPanel.Visible := isVisible;
3418 GikoDM.CabinetVisibleAction.Checked := isVisible;
3421 procedure TGikoForm.SelectListItem(List: TList);
3423 TmpListItem: TListItem;
3427 TmpListItem := ListView.Selected;
3428 while TmpListItem <> nil do begin
3429 List.Add(TmpListItem.Data);
3430 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3435 procedure TGikoForm.FormResize(Sender: TObject);
3438 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3439 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3441 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3442 if GikoSys.Setting.ListWidthState = glsMin then begin
3443 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3444 ViewPanel.Width := ThreadMainPanel.Width - 80;
3447 if GikoSys.Setting.ListHeightState = glsMin then begin
3448 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3449 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3453 FIsIgnoreResize := rtResizing;
3454 PostMessage( Handle, USER_RESIZED, 0, 0 );
3459 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3463 FTabHintIndex := -1;
3464 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3465 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3466 DeleteTab(i, BrowserTab.TabIndex);
3471 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3475 FTabHintIndex := -1;
3476 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3477 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3478 DeleteTab(i, BrowserTab.TabIndex);
3483 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3489 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3490 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3491 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3494 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3496 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3497 FActiveContent := nil;
3498 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3499 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3501 FBrowsers.Move(j, BROWSER_COUNT - 1);
3503 BrowserTab.Tabs.BeginUpdate;
3505 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3506 if ( BrowserTab.Tabs.Count - 1 = index ) and
3507 ( BrowserTab.TabRect(index).Left
3508 <= BrowserTab.DisplayRect.Left ) then begin
3509 BrowserTab.ScrollTabs(-1);
3511 BrowserTab.Tabs.Delete(index);
3512 if selectIndex > index then begin
3513 BrowserTab.TabIndex := selectIndex - 1;
3515 if BrowserTab.Tabs.Count -1 >= selectIndex then
3516 BrowserTab.TabIndex := selectIndex
3518 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3521 BrowserTab.Tabs.EndUpdate;
3523 if BrowserTab.Tabs.Count = 0 then begin
3524 BrowserNullTab.Thread := nil;
3526 if(BrowserTab.TabIndex <> -1) and
3527 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3528 for j := BrowserTab.Tabs.Count - 1 downto 0 do begin
3529 if(TBrowserRecord(BrowserTab.Tabs.Objects[j]).Browser
3530 = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) )then
3532 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[j]));
3536 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3537 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3538 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3539 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3542 if( FActiveContent = nil) then
3543 BrowserTab.OnChange(nil);
3545 function TGikoForm.Hook(var Message: TMessage): Boolean;
3547 //
\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Ì
3548 //
\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ð
3552 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3554 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3558 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3560 bBoard, bCategory, bBBS : Boolean;
3562 bBoard := (GetActiveList is TBoard);
3563 bCategory := (GetActiveList is TCategory);
3564 ItemRoundPMenu.Visible := bBoard;
3565 ItemReservPMenu.Visible := bBoard;
3566 LPMSep01.Visible := bBoard;
3567 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3568 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3569 LPMSep02.Visible := bCategory or bBoard;
3570 KidokuPMenu.Visible := bBoard;
3571 MidokuPMenu.Visible := bBoard;
3572 UrlCopyPMenu.Visible := bCategory or bBoard;
3573 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3574 AllSelectPMenu.Visible := bCategory or bBoard;
3575 LPMSep05.Visible := bCategory or bBoard;
3576 DeletePMenu.Visible := bBoard;
3577 LPMSep06.Visible := bCategory or bBoard;
3578 BoardFavoriteAddMenu.Visible := bCategory;
3579 ThreadFavoriteAddMenu.Visible := bBoard;
3580 SaveThreadFile.Visible := bBoard;
3581 AddRoundNameMenu(ItemReservPMenu);
3582 AddRoundNameMenu(ListReservPMenu);
3585 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3587 FClickNode := TreeView.Selected;
3588 if FClickNode = nil then begin
3589 TreeSelectThreadPupupMenu.Visible := False;
3590 TreeSelectBoardPupupMenu.Visible := False;
3591 TPMSep01.Visible := False;
3592 TreeSelectURLPupupMenu.Visible := False;
3593 TreeSelectNamePupupMenu.Visible := False;
3594 TreeSelectNameURLPupupMenu.Visible := False;
3595 TreeSelectFavoriteAddPupupMenu.Visible := False;
3596 TreeSelectLogDeleteSeparator.Visible := False;
3597 TreeSelectLogDeletePopupMenu.Visible := False;
3598 end else if TObject(FClickNode.Data) is TBoard then begin
3599 TreeSelectThreadPupupMenu.Visible := False;
3600 TreeSelectBoardPupupMenu.Visible := True;
3601 TPMSep01.Visible := True;
3602 TreeSelectURLPupupMenu.Visible := True;
3603 TreeSelectNamePupupMenu.Visible := True;
3604 TreeSelectNameURLPupupMenu.Visible := True;
3605 TreeSelectFavoriteAddPupupMenu.Visible := True;
3606 TreeSelectLogDeleteSeparator.Visible := False;
3607 TreeSelectLogDeletePopupMenu.Visible := False;
3608 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3609 TreeSelectThreadPupupMenu.Visible := False;
3610 TreeSelectBoardPupupMenu.Visible := True;
3611 TPMSep01.Visible := True;
3612 TreeSelectURLPupupMenu.Visible := True;
3613 TreeSelectNamePupupMenu.Visible := True;
3614 TreeSelectNameURLPupupMenu.Visible := True;
3615 TreeSelectFavoriteAddPupupMenu.Visible := True;
3616 TreeSelectLogDeleteSeparator.Visible := False;
3617 TreeSelectLogDeletePopupMenu.Visible := False;
3618 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3619 TreeSelectThreadPupupMenu.Visible := True;
3620 TreeSelectBoardPupupMenu.Visible := False;
3621 TPMSep01.Visible := True;
3622 TreeSelectURLPupupMenu.Visible := True;
3623 TreeSelectNamePupupMenu.Visible := True;
3624 TreeSelectNameURLPupupMenu.Visible := True;
3625 TreeSelectFavoriteAddPupupMenu.Visible := True;
3626 TreeSelectLogDeleteSeparator.Visible := True;
3627 TreeSelectLogDeletePopupMenu.Visible := True;
3628 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3629 TreeSelectThreadPupupMenu.Visible := True;
3630 TreeSelectBoardPupupMenu.Visible := False;
3631 TPMSep01.Visible := True;
3632 TreeSelectURLPupupMenu.Visible := True;
3633 TreeSelectNamePupupMenu.Visible := True;
3634 TreeSelectNameURLPupupMenu.Visible := True;
3635 TreeSelectFavoriteAddPupupMenu.Visible := True;
3636 TreeSelectLogDeleteSeparator.Visible := True;
3637 TreeSelectLogDeletePopupMenu.Visible := True;
3638 end else if (TObject(FClickNode.Data) is TCategory) then begin
3639 TreeSelectThreadPupupMenu.Visible := False;
3640 TreeSelectBoardPupupMenu.Visible := False;
3641 TPMSep01.Visible := False;
3642 TreeSelectURLPupupMenu.Visible := False;
3643 TreeSelectNamePupupMenu.Visible := True;
3644 TreeSelectNameURLPupupMenu.Visible := False;
3645 TreeSelectFavoriteAddPupupMenu.Visible := False;
3646 TreeSelectLogDeleteSeparator.Visible := False;
3647 TreeSelectLogDeletePopupMenu.Visible := False;
3648 end else if FClickNode.IsFirstNode then begin
3649 TreeSelectThreadPupupMenu.Visible := False;
3650 TreeSelectBoardPupupMenu.Visible := False;
3651 TPMSep01.Visible := False;
3652 TreeSelectURLPupupMenu.Visible := False;
3653 TreeSelectNamePupupMenu.Visible := True;
3654 TreeSelectNameURLPupupMenu.Visible := False;
3655 TreeSelectFavoriteAddPupupMenu.Visible := False;
3656 TreeSelectLogDeleteSeparator.Visible := False;
3657 TreeSelectLogDeletePopupMenu.Visible := False;
3659 TreeSelectThreadPupupMenu.Visible := False;
3660 TreeSelectBoardPupupMenu.Visible := False;
3661 TPMSep01.Visible := False;
3662 TreeSelectURLPupupMenu.Visible := False;
3663 TreeSelectNamePupupMenu.Visible := False;
3664 TreeSelectNameURLPupupMenu.Visible := False;
3665 TreeSelectFavoriteAddPupupMenu.Visible := False;
3666 TreeSelectLogDeleteSeparator.Visible := False;
3667 TreeSelectLogDeletePopupMenu.Visible := False;
3671 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3672 var ppDisp: IDispatch; var Cancel: WordBool);
3681 threadItem: TThreadItem;
3682 aElement : IHTMLElement;
3685 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3686 if ( aElement <> nil) then begin
3687 Text := aElement.Get_outerText;
3688 Html := aElement.Get_outerHTML;
3689 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3690 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3691 if GikoSys.Setting.ResAnchorJamp then begin
3693 Text := ZenToHan(Trim(Text));
3695 if(AnsiPos('>>', Text) = 1) then begin
3696 //Text := Copy(Text, 3, Length(Text) - 2);
3699 //Text := Copy(Text, 2, Length(Text) - 1);
3703 if AnsiPos('-', Text) <> 0 then begin
3704 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3705 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3706 wkIntTo := StrToIntDef(Text, 0);
3707 if wkIntTo < wkIntSt then
3710 wkIntSt := StrToIntDef(Text, 0);
3713 if wkIntSt <> 0 then begin
3714 FActiveContent.IDAnchorPopup('');
3715 MoveHisotryManager.pushItem(FActiveContent);
3716 BrowserMovement(IntToStr(wkIntSt));
3722 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3724 URL := GikoSys.GetHRefText(Html);
3725 URL := GikoSys.HTMLDecode(URL);
3726 if AnsiPos('BE:', URL) = 1 then begin
3727 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3728 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3729 threadItem := FActiveContent.Thread;
3730 if threadItem = nil then Exit;
3731 URL := BE_PHP_URL + BNum + '&u=d'
3732 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3735 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3736 ( AnsiPos('ftp://', URL) = 1) then begin
3737 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3738 if GikoSys.Setting.LinkAddAddressBar then begin
3739 idx := AddressComboBox.Items.IndexOf(URL);
3740 if idx = -1 then begin
3741 AddressComboBox.Items.Insert(0, URL);
3742 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3743 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3745 AddressComboBox.Items.Delete(idx);
3746 AddressComboBox.Items.Insert(0, URL);
3749 MoveHisotryManager.pushItem(FActiveContent);
3757 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3759 if Mouse.Capture <> 0 then
3761 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3762 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3763 FBrowserSizeWidth := ViewPanel.Width;
3765 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3766 FBrowserSizeHeight := ViewPanel.Height;
3768 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3769 if ViewPanel.Width < 2 then begin
3770 ViewPanel.Width := 1;
3771 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3772 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3773 GikoSys.Setting.ListWidthState := glsMax;
3774 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3775 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3776 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3777 GikoSys.Setting.ListWidthState := glsMin;
3779 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3780 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3781 GikoSys.Setting.ListWidthState := glsNormal;
3784 if ViewPanel.Height < 2 then begin
3785 ViewPanel.Height := 1;
3786 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3787 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3788 GikoSys.Setting.ListHeightState := glsMax;
3789 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3790 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3791 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3792 GikoSys.Setting.ListHeightState := glsMin;
3794 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3795 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3796 GikoSys.Setting.ListHeightState := glsNormal;
3799 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3800 FBrowserSizeHeight := ViewPanel.Height
3801 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3802 FBrowserSizeWidth := ViewPanel.Width;}
3805 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3810 BrowserTab.Tabs.BeginUpdate;
3812 if not BrowserTab.Dragging then begin
3813 FTabHintIndex := -1;
3814 BrowserTab.Hint := '';
3815 idx := BrowserTab.TabIndex;
3816 if idx = -1 then begin
3817 SetContent(BrowserNullTab);
3819 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3820 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3821 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3823 FBrowsers.Move(j ,0);
3825 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3826 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3827 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3828 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3830 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3831 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
3832 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
3836 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3837 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3838 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3840 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3841 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3842 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3844 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3845 AddressComboBox.Text := GetActiveContent.URL;
3847 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3848 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3851 GikoDM.SetFocusForBrowserAction.Execute;
3855 BrowserTab.Tabs.EndUpdate;
3860 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3861 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3867 if Button = mbMiddle then begin
3868 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3871 p := BrowserTab.ScreenToClient(p);
3872 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3874 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3875 end else if Button = mbLeft then begin
3876 FDragWFirst := true;
3877 FMouseDownPos.X := X;
3878 FMouseDownPos.Y := Y;
3883 procedure TGikoForm.SetBrowserTabState;
3885 CoolBand: TCoolBand;
3887 BrowserBottomPanel.AutoSize := False;
3888 if GikoSys.Setting.BrowserTabVisible then begin
3890 BrowserTab.Tabs.BeginUpdate;
3892 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3893 BrowserTab.Style := tsTabs;
3894 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3895 BrowserTab.TabPosition := tpTop
3897 BrowserTab.TabPosition := tpBottom;
3898 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
3899 BrowserTab.TabPosition := tpTop;
3900 BrowserTab.Style := tsButtons;
3902 BrowserTab.TabPosition := tpTop;
3903 BrowserTab.Style := tsFlatButtons
3906 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
3907 BrowserTab.Parent := BrowserTabToolBar;
3908 BrowserBottomPanel.Hide;
3909 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3910 if CoolBand <> nil then
3911 CoolBand.Visible := True;
3913 BrowserTab.Parent := BrowserBottomPanel;
3914 BrowserTab.Top := 0;
3915 BrowserTab.Left := 0;
3916 BrowserBottomPanel.Show;
3917 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3918 if CoolBand <> nil then
3919 CoolBand.Visible := False;
3922 BrowserTab.Tabs.EndUpdate;
3926 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3927 if CoolBand <> nil then
3928 CoolBand.Visible := False;
3929 BrowserBottomPanel.Visible := False;
3930 GikoDM.AllTabCloseAction.Execute;
3934 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
3935 Y: Integer; State: TDragState; var Accept: Boolean);
3939 idx := BrowserTab.IndexOfTabAt(X, Y);
3940 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
3943 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
3948 FDragWFirst := False;
3949 idx := BrowserTab.IndexOfTabAt(X, Y);
3951 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
3954 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
3955 Shift: TShiftState; X, Y: Integer);
3958 ThreadItem: TThreadItem;
3961 TabIdx := BrowserTab.IndexOfTabAt(x, y);
3963 if ( ssLeft in Shift ) then begin
3964 if (FDragWFirst) then begin
3965 BrowserTab.EndDrag(false);
3966 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
3969 BrowserTab.EndDrag(false);
3970 FDragWFirst := false;
3973 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
3974 Application.CancelHint;
3975 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
3976 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
3977 BrowserTab.Hint := ThreadItem.Title;
3978 Application.ShowHint := True;
3980 BrowserTab.Hint := '';
3981 Application.ShowHint := True;
3983 FTabHintIndex := TabIdx;
3988 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
3989 const pDisp: IDispatch; var URL: OleVariant);
3991 FDispHtmlDocument: DispHTMLDocument;
3992 BrowserRecord :TBrowserRecord;
3995 threadItem : TThreadItem;
3997 if TObject(Sender) is TWebBrowser then begin
3998 BrowserRecord := nil;
3999 if TWebBrowser(Sender) <> Browser then begin
4000 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4001 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4002 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4006 if BrowserRecord <> nil then begin
4007 if BrowserRecord.Event <> nil then
4008 BrowserRecord.Event.Free;
4009 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4010 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4011 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4012 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4015 if GetActiveContent <> nil then begin
4016 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4017 if FEvent <> nil then
4019 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4020 FEvent.OnContextMenu := OnDocumentContextMenu;
4021 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4023 if FEvent <> nil then begin
4031 if (BrowserRecord <> nil) and
4032 Assigned( BrowserRecord.Thread ) then begin
4033 threadItem := BrowserRecord.Thread;
4035 if (threadItem.JumpAddress > 0) then begin
4036 if threadItem.UnRead then begin
4037 threadItem.UnRead := False;
4039 RefreshListView(threadItem);
4041 //
\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®
4042 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4043 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4044 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4045 threadItem.JumpAddress := 0;
4047 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4050 end else if threadItem.UnRead then begin
4051 threadItem.UnRead := False;
4053 BrowserRecord.Move('new');
4054 RefreshListView(threadItem);
4055 end else if threadItem.ScrollTop <> 0 then begin
4057 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4058 doc.Body.ScrollTop := threadItem.ScrollTop;
4061 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4066 LockWindowUpdate(0);
4069 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4071 AddRoundNameMenu(RoundNamePopupMenu.Items);
4074 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4080 Item := TMenuItem.Create(Self);
4081 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4082 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4084 Item := TMenuItem.Create(Self);
4085 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4086 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4088 Item := TMenuItem.Create(Self);
4089 Item.Caption := '-';
4091 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4092 Item := TMenuItem.Create(Self);
4093 Item.Caption := RoundList.RoundNameList[i];
4094 Item.OnClick := SetSelectRoundName;
4099 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4101 threadItem : TThreadItem;
4103 if ParentName <> 'dummy1' then begin
4104 SetSelectItemRound(RoundFlag, RoundName);
4106 threadItem := GetActiveContent;
4107 if threadItem <> nil then begin
4108 threadItem.RoundName := RoundName;
4110 RoundList.RoundNameList.Add(RoundName);
4111 threadItem.Round := RoundFlag;
4116 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4121 List := TList.Create;
4123 SelectListItem(List);
4124 for i := 0 to List.Count - 1 do begin
4125 if TObject(List[i]) is TBoard then begin
4126 TBoard(List[i]).RoundName := RoundName;
4128 RoundList.RoundNameList.Add(RoundName);
4129 TBoard(List[i]).Round := RoundFlag;
4130 end else if TObject(List[i]) is TThreadItem then begin
4131 if TThreadItem(List[i]).IsLogFile then begin
4132 TThreadItem(List[i]).RoundName := RoundName;
4134 RoundList.RoundNameList.Add(RoundName);
4135 TThreadItem(List[i]).Round := RoundFlag;
4144 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4146 MenuItem: TMenuItem;
4148 if Sender is TMenuItem then begin
4149 MenuItem := TMenuItem(Sender);
4150 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4155 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4160 if CoolBar = nil then
4162 for i := 0 to CoolBar.Bands.Count - 1 do begin
4163 if CoolBar.Bands[i].Control = Control then begin
4164 Result := CoolBar.Bands[i];
4170 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4172 if BrowserTab.Parent = BrowserTabToolBar then
4173 BrowserTab.Width := BrowserTabToolBar.Width;
4176 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4181 procedure TGikoForm.SetMenuFont;
4183 // GikoSys.MenuFont(MenuToolBar.Font);
4184 // MenuToolBar.Buttons[0].AutoSize := False;
4185 // MenuToolBar.Buttons[0].AutoSize := True;
4186 // MenuToolBar.Font.Color := clMenuText;
4187 GikoSys.MenuFont(MainCoolBar.Font);
4188 MenuToolBar.Buttons[0].AutoSize := False;
4189 MenuToolBar.Buttons[0].AutoSize := True;
4190 MainCoolBar.AutoSize := False;
4191 MainCoolBar.AutoSize := True;
4193 GikoSys.MenuFont(ListCoolBar.Font);
4194 GikoSys.MenuFont(BrowserCoolBar.Font);
4195 // MenuToolBar.Font.Color := clMenuText;
4198 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4202 if FavoriteDM.Modified then begin
4205 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4206 NewMenu := TMenuItem.Create(MainMenu);
4207 NewMenu.Action := GikoDM.FavoriteAddAction;
4208 FavoriteMenu.Add(NewMenu);
4209 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4210 NewMenu := TMenuItem.Create(FavoriteMenu);
4211 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4212 FavoriteMenu.Add(NewMenu);
4213 //
\83Z
\83p
\83\8c\81[
\83^
4214 FavoriteMenu.InsertNewLineAfter(NewMenu);
4215 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4216 FavoriteDM.Modified := false;
4220 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4223 NewMenu: array of TMenuItem;
4225 SetLength(NewMenu, Node.Count);
4226 Node := Node.getFirstChild;
4228 while ( Node <> nil ) do begin
4229 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4230 NewMenu[i].AutoHotkeys := maAutomatic;
4231 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4232 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4234 if TObject(Node.Data) is TFavoriteFolder then begin
4235 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4236 CreateFavMenu(Node, NewMenu[i]);
4237 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4238 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4239 NewMenu[i].OnClick := FavoriteClick;
4240 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4241 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4242 NewMenu[i].OnClick := FavoriteClick;
4245 Node := Node.getNextSibling;
4247 MenuItem.Add(NewMenu);
4250 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4252 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';
4253 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4255 Dlg : TFavoriteAddDialog;
4261 if Item is TFavoriteBoardItem then
4262 Item := TFavoriteBoardItem( Item ).Item
4263 else if Item is TFavoriteThreadItem then
4264 Item := TFavoriteThreadItem( Item ).Item;
4266 Node := FavoriteTreeView.Items.GetFirstNode;
4267 if Item is TBoard then begin
4268 ItemURL := TBoard( Item ).URL;
4269 while Node <> nil do begin
4271 if TObject( Data ) is TFavoriteBoardItem then begin
4272 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4273 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4278 Node := Node.GetNext;
4280 Dlg := TFavoriteAddDialog.Create(Self);
4282 Dlg.SetBoard( TBoard( Item ) );
4287 end else if Item is TThreadItem then begin
4288 ItemURL := TThreadItem( Item ).URL;
4289 while Node <> nil do begin
4291 if TObject( Data ) is TFavoriteThreadItem then begin
4292 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4293 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4298 Node := Node.GetNext;
4300 Dlg := TFavoriteAddDialog.Create(Self);
4302 Dlg.SetThreadItem( TThreadItem( Item ) );
4312 procedure TGikoForm.FavoriteClick(Sender: TObject);
4314 FavoriteClick( Sender, True );
4317 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4320 ThreadItem: TThreadItem;
4321 FavBoard: TFavoriteBoardItem;
4322 FavThread: TFavoriteThreadItem;
4326 if Sender is TFavoriteMenuItem then
4327 Item := TFavoriteMenuItem(Sender).Data
4328 else if Sender is TLinkToolButton then
4329 Item := TLinkToolButton(Sender).Data
4330 else if Sender is TTreeNode then
4331 Item := TTreeNode( Sender ).Data
4335 if TObject(Item) is TFavoriteBoardItem then begin
4336 FavBoard := TFavoriteBoardItem(Item);
4337 Board := FavBoard.Item;
4338 if Board <> nil then begin
4339 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4340 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4341 SelectTreeNode(Board, True);
4343 end else if TObject(Item) is TFavoriteThreadItem then begin
4344 FavThread := TFavoriteThreadItem(Item);
4345 ThreadItem := FavThread.Item;
4346 if ThreadItem = nil then
4349 InsertBrowserTab(ThreadItem, ActiveTab);
4351 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4352 if GikoSys.Setting.ListWidthState = glsMin then begin
4353 GikoDM.BrowserMaxAndFocusAction.Execute;
4356 if GikoSys.Setting.ListHeightState = glsMin then begin
4357 GikoDM.BrowserMaxAndFocusAction.Execute;
4363 procedure TGikoForm.BBSMenuItemOnClick(
4368 if Sender is TBBSMenuItem then
4369 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4373 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4375 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4378 //!
\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é)
4379 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4381 stRes, edRes : Int64;
4382 browserRec : TBrowserRecord;
4383 threadNumber : String;
4388 Thread.JumpAddress := 0;
4389 //
\83^
\83u
\82ð
\90¶
\90¬
4390 browserRec := InsertBrowserTab(Thread);
4391 if (browserRec <> nil) then begin
4392 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4393 threadNumber := ChangeFileExt(Thread.FileName, '');
4394 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4395 //
\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
4396 if (StrToInt64(threadNumber) = stRes) then begin
4397 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4398 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4402 if ( stRes > 0 ) then begin
4403 Thread.JumpAddress := stRes;
4405 //
\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é
4406 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4407 DownloadContent(Thread);
4408 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4409 browserRec.Move(IntToStr(stRes));
4410 Thread.JumpAddress := 0;
4412 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4413 Thread.ScrollTop := doc.Body.ScrollTop;
4420 procedure TGikoForm.MoveToURL(const inURL: string);
4422 protocol, host, path, document, port, bookmark : string;
4423 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4425 BBSID, BBSKey: string;
4426 {tmpBoard,} Board: TBoard;
4427 ThreadItem: TThreadItem;
4430 tmpThread : TThreadItem;
4431 shiftDown : Boolean;
4435 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4436 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4439 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4440 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4441 if shiftDown then begin
4442 GikoSys.OpenBrowser(inURL, gbtUserApp);
4444 end else if ctrlDown then begin
4445 GikoSys.OpenBrowser(inURL, gbtIE);
4449 //=====
\83v
\83\89\83O
\83C
\83\93
4452 bi := Length(BoardGroups) - 1;
4453 for i := 1 to bi do begin
4454 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4455 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4458 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4459 Board := BBSsFindBoardFromURL( boardURL );
4462 if Board = nil then begin
4464 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4465 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4468 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4469 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4470 ShowBBSTree( BBSs[ 1 ] );
4473 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4474 if not Board.IsThreadDatRead then begin
4475 GikoSys.ReadSubjectFile( Board );
4479 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4480 if ThreadItem = nil then begin
4481 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4482 ThreadItem := tmpThread;
4483 Board.Insert( 0, ThreadItem );
4484 if ActiveList is TBoard then begin
4485 if TBoard(ActiveList) = Board then
4486 ListView.Items.Count := ListView.Items.Count + 1;
4491 OpenThreadItem(ThreadItem, inURL);
4498 Board := BBSsFindBoardFromURL(
4499 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4501 if Board <> nil then begin
4502 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4503 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4504 SelectTreeNode( Board, True );
4512 // 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¢
4516 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4517 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4518 Board := BBSsFindBoardFromURL( boardURL );
4519 if Board = nil then begin
4520 //
\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
4521 GikoSys.OpenBrowser(inURL, gbtUserApp);
4524 //
\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é
4526 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4527 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4528 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4529 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4530 GikoSys.OpenBrowser(inURL, gbtUserApp);
4535 if not Board.IsThreadDatRead then
4536 GikoSys.ReadSubjectFile(Board);
4537 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4538 ThreadItem := Board.FindThreadFromURL( URL );
4539 //
\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)
4540 if ThreadItem = nil then begin
4541 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4544 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4545 if ThreadItem = nil then begin
4546 ThreadItem := TThreadItem.Create( nil, Board, URL );
4547 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4548 Board.Insert(0, ThreadItem);
4549 if ActiveList is TBoard then begin
4550 if TBoard(ActiveList) = Board then
4551 ListView.Items.Count := ListView.Items.Count + 1;
4554 //
\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é
4555 if (not ThreadItem.IsLogFile) then begin
4556 if AnsiPos(Host, Board.URL) = 0 then
4557 ThreadItem.DownloadHost := Host
4559 ThreadItem.DownloadHost := '';
4561 OpenThreadItem(ThreadItem, inURL);
4565 Board := BBSsFindBoardFromURL( inURL );
4566 if Board = nil then begin
4567 GikoSys.OpenBrowser(inURL, gbtAuto);
4569 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4570 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4571 SelectTreeNode( Board, True );
4576 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4578 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4579 CoolBarResized( Sender, MainCoolBar );
4582 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4583 Shift: TShiftState);
4585 if Key = VK_RETURN then
4586 GikoDM.MoveToAction.Execute;
4589 procedure TGikoForm.BrowserEnter(Sender: TObject);
4591 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4594 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4596 CDS:PCopyDataStruct;
4600 CDS := Message.CopyDataStruct;
4601 GetMem(PC, CDS^.cbData);
4603 lstrcpy(PC,CDS^.lpData);
4604 SetString(sURL, PC,lstrlen(PC));
4609 Message.Result := 1;
4612 procedure TGikoForm.WndProc(var Message: TMessage);
4614 senderBrowser : TWebBrowser;
4620 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4623 if Message.WParam = SC_MINIMIZE then begin
4625 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4628 TreeClick( TreeView.Selected );
4633 if (GikoSys.Setting.StoredTaskTray) then begin
4640 USER_DOCUMENTCOMPLETE:
4641 if (Message.WParam <> 0) and
4642 (TObject(Message.WParam) is TWebBrowser) then begin
4643 senderBrowser := TWebBrowser( Message.WParam );
4644 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4653 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4658 //
\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Í
4659 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4660 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4661 if Msg.CharCode in [VK_BACK] then begin
4662 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4663 if Msg.KeyData > 0 then begin
4666 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4670 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4671 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4674 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4677 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4678 if Msg.CharCode in [VK_BACK] then begin
4679 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4680 if Msg.KeyData > 0 then begin
4683 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4686 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4689 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4693 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4697 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4702 PreviewTimer.Enabled := False;
4706 ARect := FPreviewBrowser.GetWindowRect(p);
4708 FPreviewBrowser.PreviewImage(FPreviewURL);
4710 if ARect.Bottom > Screen.DesktopHeight then begin
4711 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4713 if (ARect.Right > Screen.DesktopWidth) then begin
4714 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4716 if (ARect.Left < Screen.DesktopLeft) then begin
4717 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4719 if (ARect.Top < Screen.DesktopTop) then begin
4720 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4723 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4724 ARect.Left, ARect.Top,
4725 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4726 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4728 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4729 FPreviewBrowserRect := ARect;
4732 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4737 if PreviewTimer.Enabled then
4738 PreviewTimer.Enabled := False;
4739 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4740 FHint.ReleaseHandle;
4744 if (FPreviewBrowser <> nil)
4745 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4746 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4747 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4748 Pos := Mouse.CursorPos;
4749 Pos.X := Pos.X + Left;
4750 Pos.Y := Pos.Y + Top;
4751 if (FPreviewBrowserRect.Left > Pos.X) or
4752 (FPreviewBrowserRect.Right < Pos.X) or
4753 (FPreviewBrowserRect.Top > Pos.Y) or
4754 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4755 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4759 Message.Result := 1;
4762 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4764 GikoDM.MsgBarCloseAction.Execute;
4767 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4769 Doc: IHtmlDocument2;
4770 Range: IHTMLTxtRange;
4773 ThreadItem: TThreadItem;
4776 FactiveContent.IDAnchorPopup('');
4777 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4778 if Assigned(Doc) then begin
4779 Range := Doc.selection.createRange as IHTMLTxtRange;
4780 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4781 s := ZenToHan(Trim(s));
4782 if GikoSys.IsNumeric(s) then begin
4784 ThreadItem := GetActiveContent;
4785 if ThreadItem <> nil then begin
4786 Num := StrToInt64(s);
4787 FHint.PopupType := gptThread;
4788 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
4789 if FHint.ResCount <> 0 then
4800 procedure TGikoForm.ShowTextPopup;
4805 // if Trim(s) = '' then
4808 FHint.Font.Name := GikoSys.Setting.HintFontName;
4809 FHint.Font.Size := GikoSys.Setting.HintFontSize;
4810 FHint.Font.Color := GikoSys.Setting.HintFontColor;
4811 FHint.Color := GikoSys.Setting.HintBackColor;
4812 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
4814 if FHint.PopupType = gptRaw then
4815 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
4817 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
4818 case GikoSys.Setting.PopupPosition of
4819 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4820 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4821 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4822 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4823 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4824 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4825 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4826 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4827 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Ó
4829 //FHint.ActivateHint(ARect, s);
4830 if FHint.PopupType = gptRaw then
4831 FHint.ActivateHint(ARect, FHint.Caption)
4833 FHint.ActivateHint(ARect, '');
4835 FHint.ReleaseHandle;
4840 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4842 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4843 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4845 if FTreeType = gttHistory then begin
4846 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4847 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4850 TreeView.Items.Clear;
4854 procedure TGikoForm.SetLinkBar;
4858 ToolButton: TLinkToolButton;
4859 MenuItem: TMenuItem;
4860 oldIgnoreResize : TResizeType;
4862 oldIgnoreResize := FIsIgnoreResize;
4863 FIsIgnoreResize := rtResizing;
4864 MainCoolBar.Bands.BeginUpdate;
4866 LinkBarPopupMenu.Items.Clear;
4867 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4868 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4869 LinkToolBar.Buttons[i].Free;
4870 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4871 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4872 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4873 ToolButton := TLinkToolButton.Create(LinkToolBar);
4874 // ToolButton.Parent := LinkToolBar;
4875 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4876 MenuItem := TMenuItem.Create(Self);
4877 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4878 LinkBarPopupMenu.Items.Add(MenuItem);
4879 ToolButton.MenuItem := MenuItem;
4880 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4881 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4882 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4883 ToolButton.OnClick := FavoriteClick;
4884 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4885 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4886 ToolButton.OnClick := FavoriteClick;
4888 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4889 ToolButton.Left := 10000;
4890 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4891 ToolButton.AutoSize := True;
4892 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4893 ToolButton.OnDragOver := FavoriteDragOver;
4894 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4895 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4896 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4897 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4898 //ToolButton.DragMode := dmAutomatic;
4899 ToolButton.DragMode := dmManual;
4900 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4902 LinkToolBar.InsertControl(ToolButton);
4907 { if LinkToolBar.ButtonCount = 0 then begin
4908 ToolButton := TLinkToolButton.Create(LinkToolBar);
4909 ToolButton.Style := tbsButton;
4910 ToolButton.ImageIndex := -1;
4911 ToolButton.Caption := '';
4912 LinkToolBar.InsertControl(ToolButton);
4915 MainCoolBar.Bands.EndUpdate;
4916 LoadCoolBarSettings;
4917 FIsIgnoreResize := oldIgnoreResize;
4921 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4929 if Sender = FavoriteTreeView then begin
4930 Node := FavoriteTreeView.GetNodeAt(X, Y);
4935 bound := Node.DisplayRect( False );
4936 height := bound.Bottom - bound.Top;
4937 if (bound.Top + height / 2) <= Y then
4938 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
4943 if Node.IsFirstNode then
4948 if FDropSpaceNode <> nil then
4949 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
4952 if Change then begin
4953 if FDropSpaceNode <> nil then
4954 FDropSpaceNode.Free;
4956 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
4957 FDropSpaceNode.MoveTo( Node, naInsert );
4958 FDropSpaceNode.ImageIndex := -1;
4959 FDropSpaceNode.SelectedIndex := -1;
4963 if Source = FavoriteTreeView then begin
4964 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
4969 end else if Source = BrowserTab then
4971 else if Source = ListView then
4973 else if Source is TLinkToolButton then
4975 else if Source = TreeView then
4981 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4984 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
4987 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
4989 // FDragging := true;
4992 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
4994 SenderNode: TTreeNode;
4995 LinkToolButton: TLinkToolButton;
4998 LinkToolButton := TLinkToolButton( Sender );
4999 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5000 SenderNode.Selected := False;
5001 FavoriteDragDrop( SenderNode, Source );
5007 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5009 favButton : TLinkToolButton;
5010 favThreadItem : TFavoriteThreadItem;
5016 if Sender is TLinkToolButton then begin
5017 favButton := TLinkToolButton( Sender );
5018 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5019 favThreadItem := TFavoriteThreadItem( favButton.Data );
5020 if favThreadItem.Item <> nil then
5021 InsertBrowserTab( favThreadItem.Item, False );
5029 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5033 TToolButton( Sender ).DragMode := dmManual;
5034 if ssLeft in Shift then begin
5035 // 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)
5036 if FDragTime = 0 then begin
5037 FDragTime := GetTickCount();
5039 Now := GetTickCount();
5040 if (Now - FDragTime) > 500 then begin
5041 if FDragButton <> TToolButton( Sender ) then begin
5043 FDragButton := TToolButton( Sender );
5044 TToolButton(Sender).BeginDrag(false ,5);
5047 {$IF Defined(debug)}
5048 ShowMessage('Error');
5059 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5064 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5069 for i := 0 to ToolBar.ButtonCount - 1 do
5070 if ToolBar.Buttons[i].Visible then
5071 Result := Result + ToolBar.Buttons[i].Width;
5074 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5076 Control : TWinControl;
5079 Control := FindControl(BandInfo^.hwndChild);
5080 if Control = nil then
5083 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5084 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5085 idx := MainCoolBar.Bands[ i ].ID;
5089 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5090 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5091 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5092 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5093 BandInfo^.cxMinChild := 0;
5094 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5095 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5096 end else if Control = LinkToolBar then begin
5097 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5098 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5099 BandInfo^.cxMinChild := 0;
5100 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5101 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5102 end else begin // AddressToolBar
5103 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5104 BandInfo^.cxMinChild := 0;
5105 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5109 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5115 ChevronPopupMenu.Items.Clear;
5117 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5118 if MainCoolBar.Bands[ i ].Visible then begin
5119 if Idx = Int64(RebarChevron^.uBand) then begin
5126 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5127 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5129 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5130 ToolBarChevronMenu(StdToolBar);
5131 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5135 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5136 ChevronPopupMenu.Popup(p.x, p.y);
5140 procedure TGikoForm.MenuBarChevronMenu;
5141 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5147 for i := 0 to MenuItem.Count - 1 do begin
5149 if MenuItem[i] is TFavoriteMenuItem then begin
5150 Item := TFavoriteMenuItem.Create(Self);
5151 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5153 Item := TMenuItem.Create(Self);
5154 Item.Caption := MenuItem[i].Caption;
5155 Item.Action := MenuItem[i].Action;
5156 Item.ImageIndex := MenuItem[i].ImageIndex;
5157 Item.OnClick := MenuItem[i].OnClick;
5158 PopupItem.Add(Item);
5159 if MenuItem[i].Count > 0 then
5160 SetSubMenu(MenuItem[i], Item);
5169 ChevronPopupMenu.Items.Clear;
5170 ChevronPopupMenu.Images := MainMenu.Images;
5171 bw := GetWidthAllToolButton(MenuToolBar);
5172 if MenuToolBar.Width < bw then begin
5174 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5175 w := w + MenuToolBar.Buttons[i].Width;
5176 if MenuToolBar.Width <= w then begin
5177 Item := TMenuItem.Create(Self);
5178 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5179 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5180 ChevronPopupMenu.Items.Add(Item);
5181 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5187 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5188 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5193 if Assigned(PopupMenu.OnPopup) then
5194 PopupMenu.OnPopup(nil);
5195 for i := 0 to PopupMenu.Items.Count - 1 do begin
5197 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5198 Item := TFavoriteMenuItem.Create(Self);
5199 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5201 Item := TMenuItem.Create(Self);
5202 Item.Caption := PopupMenu.Items[i].Caption;
5203 Item.Action := PopupMenu.Items[i].Action;
5204 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5205 Item.OnClick := PopupMenu.Items[i].OnClick;
5206 PopupItem.Add(Item);
5215 ChevronPopupMenu.Items.Clear;
5216 ChevronPopupMenu.Images := ToolBar.HotImages;
5217 bw := GetWidthAllToolButton(ToolBar);
5218 if ToolBar.Width < bw then begin
5220 for i := 0 to ToolBar.ButtonCount - 1 do begin
5221 if ToolBar.Buttons[i].Visible then
5222 w := w + ToolBar.Buttons[i].Width;
5223 if ToolBar.Width <= w then begin
5224 if ToolBar.Buttons[i].Tag = 0 then begin
5225 Item := TMenuItem.Create(Self);
5226 if ToolBar.Buttons[i].Style = tbsSeparator then
5229 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5230 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5233 Item.Caption := ToolBar.Buttons[i].Caption;
5234 Item.Action := ToolBar.Buttons[i].Action;
5236 //Item.Visible := True;
5238 ChevronPopupMenu.Items.Add(Item);
5239 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5241 Item.OnClick := nil;
5242 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5250 procedure TGikoForm.LinkBarChevronMenu;
5255 Item: TFavoriteMenuItem;
5257 Button: TLinkToolButton;
5259 ChevronPopupMenu.Items.Clear;
5260 ChevronPopupMenu.Images := LinkToolBar.Images;
5261 bw := GetWidthAllToolButton(LinkToolBar);
5262 if LinkToolBar.Width < bw then begin
5264 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5265 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5266 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5267 w := w + LinkToolBar.Buttons[j].Width;
5268 if LinkToolBar.Width <= w then begin
5269 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5270 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5271 Item := TFavoriteMenuItem.Create(Self);
5272 if TObject(Button.Data) is TFavoriteFolder then begin
5273 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5274 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5275 Item.OnClick := FavoriteClick;
5276 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5277 Item.OnClick := FavoriteClick;
5279 Item.Data := Button.Data;
5280 Item.Caption := LinkToolBar.Buttons[j].Caption;
5281 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5282 ChevronPopupMenu.Items.Add(Item);
5293 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5294 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5295 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5297 \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É
5298 \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
5300 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5302 bandInfo : tagREBARBANDINFOA;
5303 pBandInfo : PReBarBandInfoA;
5310 pBandInfo := @bandInfo;
5311 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5312 bandInfo.cbSize := sizeof( bandInfo );
5313 bandInfo.hwndChild := h;
5314 bandInfo.cyMinChild := bar.Height;
5315 bar.OnBandInfo( nil, pBandInfo );
5316 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5318 for i := bar.Bands.Count - 1 downto 0 do begin
5319 if bar.Bands[ i ].Control.Handle = h then begin
5325 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5329 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5331 Control: TWinControl;
5334 Control := FindControl(BandInfo^.hwndChild);
5335 if Control = nil then
5338 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5339 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5340 idx := ListCoolBar.Bands[ i ].ID;
5344 if Control = ListToolBar then begin
5345 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5346 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5347 BandInfo^.cxMinChild := 0;
5348 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5349 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5351 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5352 BandInfo^.cxMinChild := 0;
5353 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5357 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5362 ChevronPopupMenu.Items.Clear;
5363 Idx := RebarChevron^.uBand;
5364 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5365 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5366 ToolBarChevronMenu(ListToolBar);
5369 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5370 ChevronPopupMenu.Popup(p.x, p.y);
5374 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5376 Control: TWinControl;
5379 Control := FindControl(BandInfo^.hwndChild);
5380 if Control = nil then
5383 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5384 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5385 idx := BrowserCoolBar.Bands[ i ].ID;
5389 if Control = BrowserToolBar then begin
5390 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5391 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5392 BandInfo^.cxMinChild := 0;
5393 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5394 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5396 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5397 BandInfo^.cxMinChild := 0;
5398 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5402 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5407 ChevronPopupMenu.Items.Clear;
5408 Idx := RebarChevron^.uBand;
5409 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5410 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5411 ToolBarChevronMenu(BrowserToolBar)
5414 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5415 ChevronPopupMenu.Popup(p.x, p.y);
5419 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5421 if Column^.iImage = -1 then begin
5422 Column^.mask := Column^.mask or LVCF_FMT;
5424 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5425 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5429 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5434 for i := bar.ButtonCount - 1 downto 0 do begin
5435 if bar.Buttons[ i ].Action = action then begin
5436 Result := bar.Buttons[ i ];
5442 procedure TGikoForm.SetToolBarPopup;
5445 aIEButton : TToolButton;
5446 aCabinetBBSButton : TToolButton;
5447 aResRangeButton : TToolButton;
5448 aThreadRangeButton: TToolButton;
5450 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5452 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5453 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5454 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5455 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5456 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5458 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5459 if aIEButton <> nil then
5460 aIEButton.DropdownMenu := BrowserPopupMenu;
5461 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5462 if aCabinetBBSButton <> nil then
5463 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5464 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5465 if aResRangeButton <> nil then
5466 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5467 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5468 if aThreadRangeButton <> nil then
5469 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5472 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5473 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5477 // browserPos : TPoint;
5481 Wnd := WindowFromPoint(Mouse.CursorPos);
5483 if WheelDelta > 0 then
5488 if (Wnd = BrowserTab.Handle) or
5489 (Wnd = BrowserTab.Parent.Handle) then begin
5490 BrowserTab.ScrollTabs(Delta);
5492 if FIsHandledWheel then begin
5493 FIsHandledWheel := False;
5496 FIsHandledWheel := True;
5497 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5498 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5500 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5508 procedure TGikoForm.SetSelectWord( const text : string );
5510 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5511 ClearThreadRengeAction;
5513 if Length( text ) = 0 then
5515 GikoDM.AllItemAction.Checked := True;
5516 SetListViewType( gvtAll )
5518 SetListViewType( gvtUser, text, false );
5522 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5525 SetSelectWord( SelectComboBox.Text );
5529 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5530 Shift: TShiftState);
5538 if Key = VK_Return then
5541 end else if Key = 229 then begin
5542 if GikoSys.Setting.UseUndecided then begin
5543 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5544 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5545 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5546 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5547 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5548 SetLength(Str, Len);
5549 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5550 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5551 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5553 Str := SelectComboBox.Text + Str;
5555 if (Length(Str) > 0) then begin
5559 end else if Length( SelectComboBox.Text ) = 0 then
5561 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5562 *
\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
5563 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5566 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5567 ClearThreadRengeAction;
5571 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5572 procedure TGikoForm.ClearThreadRengeAction;
5574 //
\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é
5575 if GikoDM.AllItemAction.Checked then
5576 GikoDM.AllItemAction.Checked := False;
5577 if GikoDM.LogItemAction.Checked then
5578 GikoDM.LogItemAction.Checked := False;
5579 if GikoDM.NewItemAction.Checked then
5580 GikoDM.NewItemaction.Checked := False;
5581 if GikoDM.LiveItemAction.Checked then
5582 GikoDM.LiveItemAction.Checked := False;
5583 if GikoDM.ArchiveItemAction.Checked then
5584 GikoDM.ArchiveItemAction.Checked := False;
5588 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5593 if Length( SelectComboBox.Text ) = 0 then
5595 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5596 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5601 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5602 procedure TGikoForm.ModifySelectList;
5609 if not SelectComboBoxPanel.Visible then
5612 if Length( SelectComboBox.Text ) > 0 then
5614 oldText := SelectComboBox.Text;
5615 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5617 GikoSys.Setting.SelectTextList.Delete( idx );
5618 idx := SelectComboBox.Items.IndexOf( oldText );
5620 SelectComboBox.Items.Delete( idx );
5621 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5622 SelectComboBox.Items.Insert( 0, oldText );
5623 SelectComboBox.Text := oldText;
5631 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5632 Shift: TShiftState; X, Y: Integer);
5637 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5640 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5641 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5642 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5644 If w <= 50 Then Begin
5645 //
\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
5646 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5647 pos.X := pos.X + (50 - w);
5649 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5653 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5654 //If SelectComboBox.Width <> w Then Begin
5655 If SelectComboBoxPanel.Width <> w Then Begin
5656 SelectComboBoxPanel.Width := w;
5657 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5658 GikoSys.Setting.SelectComboBoxWidth := w;
5659 DraggingSelectComboBoxPosition := pos;
5661 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5662 ResetBandInfo( ListCoolBar, ListToolBar );
5668 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5669 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5673 IsDraggingSelectComboBox := True;
5676 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5680 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5681 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5683 IsDraggingSelectComboBox := False;
5687 procedure TGikoForm.StatusBarResize(Sender: TObject);
5689 StatusBar.Panels[1].Width := StatusBar.Width -
5690 StatusBar.Panels[0].Width -
5691 StatusBar.Panels[THREADSIZE_PANEL].Width -
5692 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5694 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5697 if (Length( SelectComboBox.Text ) = 0) or
5698 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5700 SelectComboBox.Text := '';
5701 SelectComboBox.Color := clWindow;
5706 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5709 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5712 if TObject(SenderNode.Data) is TFavoriteFolder then
5713 SourceNode.MoveTo(SenderNode, naAddChild)
5715 SourceNode.MoveTo(SenderNode, naInsert);
5719 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5723 FavoBoardItem: TFavoriteBoardItem;
5724 FavoThreadItem: TFavoriteThreadItem;
5726 ThreadItem: TThreadItem;
5729 if (SenderNode = nil) or (Source = nil) then
5732 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5733 FavNode := SenderNode.Parent
5735 FavNode := SenderNode;
5739 if Source is TBoard then begin
5740 Board := TBoard( Source );
5741 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5742 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5743 Node.ImageIndex := 15;
5744 Node.SelectedIndex := 15;
5745 end else if Source is TFavoriteBoardItem then begin
5746 FavoBoardItem := TFavoriteBoardItem( Source );
5747 Board := FavoBoardItem.Item;
5748 if Board <> nil then
5749 if not Board.IsThreadDatRead then
5750 GikoSys.ReadSubjectFile(Board);
5751 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5752 Node.ImageIndex := 15;
5753 Node.SelectedIndex := 15;
5754 end else if Source is TThreadItem then begin
5755 ThreadItem := TThreadItem( Source );
5756 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5757 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5758 Node.ImageIndex := 16;
5759 Node.SelectedIndex := 16;
5760 end else if Source is TBrowserRecord then begin
5761 ThreadItem := TBrowserRecord( Source ).Thread;
5762 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5763 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5764 Node.ImageIndex := 16;
5765 Node.SelectedIndex := 16;
5766 end else if Source is TFavoriteThreadItem then begin
5767 FavoThreadItem := TFavoriteThreadItem( Source );
5768 ThreadItem := FavoThreadItem.Item;
5769 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5770 Node.ImageIndex := 16;
5771 Node.SelectedIndex := 16;
5774 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5776 FavoriteMoveTo( SenderNode, Node );
5780 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5783 SourceNode: TTreeNode;
5784 LinkToolButton: TLinkToolButton;
5787 if SenderNode = nil then
5790 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5791 if FDropSpaceNode <> nil then
5792 SenderNode := FDropSpaceNode;
5794 if Source = FavoriteTreeView then begin
5795 SourceNode := FavoriteTreeView.Selected;
5796 FavoriteMoveTo( SenderNode, SourceNode );
5797 end else if Source is TLinkToolButton then begin
5798 LinkToolButton := TLinkToolButton( Source );
5799 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5800 FavoriteMoveTo( SenderNode, SourceNode );
5801 end else if Source = BrowserTab then begin
5802 idx := BrowserTab.TabIndex;
5803 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5804 end else if Source = ListView then begin
5805 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5806 end else if Source = TreeView then begin
5807 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5811 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5814 SenderNode: TTreeNode;
5817 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5818 if SenderNode <> nil then begin
5819 FavoriteDragDrop( SenderNode, Source );
5822 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5823 if FDropSpaceNode <> nil then begin
5825 FDropSpaceNode.Delete;
5827 FDropSpaceNode := nil;
5830 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5831 FavoriteDM.Modified := true;
5837 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5838 Node: TTreeNode; var S: String);
5840 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5841 FavoriteDM.Modified := true;
5843 FavoriteTreeView.ReadOnly := True;
5848 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5849 Shift: TShiftState);
5851 if not TTreeView(Sender).IsEditing then begin
5855 FClickNode := FavoriteTreeView.Selected;
5856 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5860 FClickNode := FavoriteTreeView.Selected;
5861 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5865 FavoriteClick( FavoriteTreeView.Selected );
5866 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5870 FClickNode := FavoriteTreeView.Selected;
5871 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5875 //
\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·
5876 if Key = VK_ESCAPE then begin
5877 if (TTreeView(Sender).Selected <> nil) then begin
5878 TTreeView(Sender).Selected.Text := FOrigenCaption;
5880 TTreeView(Sender).Selected.Focused := False;
5886 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5889 LinkToolButton: TLinkToolButton;
5892 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5894 FClickNode := FavoriteTreeView.Selected;
5896 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5898 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5899 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5900 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5901 FClickNode := FavoriteTreeView.Items[i];
5905 for i := 0 to FClickNode.Count - 1 do begin
5906 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5907 FClickNode := FClickNode.Item[i];
5914 if FClickNode = nil then begin
5915 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5916 FavoriteTreeDeletePopupMenu.Visible := False;
5917 FavoriteTreeRenamePopupMenu.Visible := False;
5918 FavoriteTreeNewFolderPopupMenu.Visible := False;
5919 FavoriteTreeURLCopyPopupMenu.Visible := False;
5920 FavoriteTreeNameCopyPopupMenu.Visible := False;
5921 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5922 FavoriteTreeReloadPopupMenu.Visible := False;
5923 FavoriteTreeLogDeletePopupMenu.Visible := False;
5924 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5925 end else if FClickNode.IsFirstNode then begin
5926 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5927 FavoriteTreeDeletePopupMenu.Visible := False;
5928 FavoriteTreeRenamePopupMenu.Visible := False;
5929 FavoriteTreeNewFolderPopupMenu.Visible := True;
5930 FavoriteTreeURLCopyPopupMenu.Visible := False;
5931 FavoriteTreeNameCopyPopupMenu.Visible := False;
5932 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5933 FavoriteTreeReloadPopupMenu.Visible := False;
5934 FavoriteTreeLogDeletePopupMenu.Visible := False;
5935 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5936 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
5937 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5938 FavoriteTreeDeletePopupMenu.Visible := True;
5939 FavoriteTreeRenamePopupMenu.Visible := False;
5940 FavoriteTreeNewFolderPopupMenu.Visible := True;
5941 FavoriteTreeURLCopyPopupMenu.Visible := False;
5942 FavoriteTreeNameCopyPopupMenu.Visible := False;
5943 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5944 FavoriteTreeReloadPopupMenu.Visible := False;
5945 FavoriteTreeLogDeletePopupMenu.Visible := False;
5946 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5947 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
5948 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5949 FavoriteTreeDeletePopupMenu.Visible := True;
5950 FavoriteTreeRenamePopupMenu.Visible := True;
5951 FavoriteTreeNewFolderPopupMenu.Visible := True;
5952 FavoriteTreeURLCopyPopupMenu.Visible := False;
5953 FavoriteTreeNameCopyPopupMenu.Visible := True;
5954 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5955 FavoriteTreeReloadPopupMenu.Visible := False;
5956 FavoriteTreeLogDeletePopupMenu.Visible := False;
5957 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5958 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
5959 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5960 FavoriteTreeDeletePopupMenu.Visible := True;
5961 FavoriteTreeRenamePopupMenu.Visible := True;
5962 FavoriteTreeNewFolderPopupMenu.Visible := True;
5963 FavoriteTreeURLCopyPopupMenu.Visible := True;
5964 FavoriteTreeNameCopyPopupMenu.Visible := True;
5965 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5966 FavoriteTreeReloadPopupMenu.Visible := True;
5967 FavoriteTreeLogDeletePopupMenu.Visible := True;
5968 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5969 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
5970 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5971 FavoriteTreeDeletePopupMenu.Visible := True;
5972 FavoriteTreeRenamePopupMenu.Visible := True;
5973 FavoriteTreeNewFolderPopupMenu.Visible := True;
5974 FavoriteTreeURLCopyPopupMenu.Visible := True;
5975 FavoriteTreeNameCopyPopupMenu.Visible := True;
5976 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5977 FavoriteTreeReloadPopupMenu.Visible := True;
5978 FavoriteTreeLogDeletePopupMenu.Visible := False;
5979 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5981 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5982 FavoriteTreeDeletePopupMenu.Visible := False;
5983 FavoriteTreeRenamePopupMenu.Visible := False;
5984 FavoriteTreeNewFolderPopupMenu.Visible := False;
5985 FavoriteTreeURLCopyPopupMenu.Visible := False;
5986 FavoriteTreeNameCopyPopupMenu.Visible := False;
5987 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5988 FavoriteTreeReloadPopupMenu.Visible := False;
5989 FavoriteTreeLogDeletePopupMenu.Visible := False;
5990 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5995 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6000 if not (TObject(node.Data) is TFavoriteFolder) then
6003 for i := 0 to node.Count - 1 do
6005 if TObject(node.Item[i].Data) is TFavoriteFolder then
6006 FavoriteBrowseFolder( node.Item[i] )
6007 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6008 FavoriteClick( node.Item[i], False );
6012 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6018 for i := 0 to Node.Count - 1 do begin
6019 if Node.Item[i].Data = FindPointer then begin
6020 Result := Node.Item[i];
6022 end else if Node.Item[i].Count > 0 then begin
6023 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6024 if Found <> nil then begin
6035 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6039 SenderNode: TTreeNode;
6043 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6044 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6045 SenderNode := FavoriteTreeView.Items[i];
6049 SenderNode.Selected := False;
6051 FavoriteDragDrop( SenderNode, Source );
6056 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6057 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6059 if FDragWFirst = true then
6060 FDragWFirst := false;
6062 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6063 if GikoSys.Setting.ListWidthState = glsMin then begin
6064 GikoDM.BrowserMaxAndFocusAction.Execute;
6067 if GikoSys.Setting.ListHeightState = glsMin then begin
6068 GikoDM.BrowserMaxAndFocusAction.Execute;
6073 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6074 Y: Integer; State: TDragState; var Accept: Boolean);
6077 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6081 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6085 if FDropSpaceNode <> nil then begin
6087 FDropSpaceNode.Delete;
6089 FDropSpaceNode := nil;
6091 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6092 FavoriteDM.Modified := true;
6098 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6100 if FListViewBackGroundColor <> value then begin
6101 FListViewBackGroundColor := value;
6102 ListView.Color := FListViewBackGroundColor;
6105 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6107 threadItem : TThreadItem;
6111 if FClickNode = nil then Exit;
6113 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6115 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6116 if threadItem = nil then
6118 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6120 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6122 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6123 if boardItem = nil then
6125 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6131 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6132 MousePos: TPoint; var Handled: Boolean);
6136 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6137 if BrowserTab.TabIndex <> idx then begin
6138 BrowserTab.TabIndex := idx;
6139 BrowserTab.OnChange(nil);
6143 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6145 ThreadItem: TThreadItem;
6151 boardPlugIn : TBoardPlugIn;
6153 if Number = 0 then Exit;
6154 ThreadItem := GetActiveContent;
6156 if ThreadItem <> nil then begin
6157 //if ThreadItem.IsBoardPlugInAvailable then begin
6158 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6159 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6160 //boardPlugIn := ThreadItem.BoardPlugIn;
6161 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6163 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6164 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6165 //
\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
6166 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6168 FileName := ThreadItem.FilePath;
6169 tmp := GikoSys.ReadThreadFile(FileName, Number);
6171 if tmp <> '' then begin
6172 THTMLCreate.DivideStrLine(tmp, @Res);
6174 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6175 if ReplaceTag then begin
6176 Header := CustomStringReplace(Header, '</b>', '',true);
6177 Header := CustomStringReplace(Header, '<b>', '',true);
6178 Header := CustomStringReplace(Header, '<br>', '',true);
6179 Header := DeleteFontTag(Header);
6181 //if ThreadItem.IsBoardPlugInAvailable then begin
6182 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6183 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6184 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6186 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6187 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6188 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6189 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6192 Body := CustomStringReplace(Body, '</a>', '',true);
6194 Body := HTMLCreater.DeleteLink(Body);
6195 if ReplaceTag then begin
6196 Body := CustomStringReplace(Body, '<', '<');
6197 Body := CustomStringReplace(Body, '>', '>');
6198 Body := CustomStringReplace(Body, '"', '"');
6199 Body := CustomStringReplace(Body, '&', '&');
6200 //Body := CustomStringReplace(Body, ' ', ' ');
6203 Header := Header + Body;
6205 Clipboard.SetTextBuf( PChar(Header) );
6211 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6213 AddRoundNameMenu(dummy1);
6216 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6218 FavoriteDM.URLReplace(oldURLs, newURLs);
6221 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6223 RoundList.URLReplace(oldURLs, newURLs);
6226 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6228 Filename = 'tab.sav';
6229 bFilename = '~tab.sav';
6235 oldBoardName: string;
6237 newBoardName: string;
6238 TabList: TStringList;
6241 if oldURLs.Count <> newURLs.Count then begin
6244 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6245 TabList := TStringList.Create;
6247 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6249 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6250 //
\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
6251 for i := 0 to oldURLs.Count - 1 do begin
6252 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6253 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6254 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6255 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6256 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6257 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6259 for j := 0 to TabList.Count - 1 do begin
6260 tempString := TabList[j];
6261 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6262 tempString := StringReplace(tempString, oldHost, newHost,[]);
6263 TabList[j] := tempString;
6267 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6269 if FileExists( GikoSys.GetAppDir + Filename) then begin
6270 if FileExists( GikoSys.GetAppDir + bFilename) then
6271 DeleteFile(GikoSys.GetAppDir + bFilename);
6273 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6274 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6277 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6285 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6286 procedure TGikoForm.OnMinimize;
6288 if FActiveContent <> nil then begin
6289 FIsMinimize := mtMinimizing;
6290 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6294 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6295 procedure TGikoForm.OnMinimized;
6297 FIsMinimize := mtMinimized;
6301 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6303 CoolBarResized( Sender, BrowserCoolBar );
6306 // *************************************************************************
6307 // ExternalBoardPlugInMain
6308 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6309 // *************************************************************************
6310 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6313 boardPlugIn : TBoardPlugIn;
6316 if not (Sender is TMenuItem) then
6319 item := TMenuItem( Sender );
6320 if not Assigned( Pointer( item.Tag ) ) then
6323 //
\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·
6324 boardPlugIn := TBoardPlugIn( item.Tag );
6325 boardPlugIn.PlugInMenu( item.Handle );
6328 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6329 procedure TGikoForm.TreeClick( Node : TTreeNode );
6335 if FTreeType = gttHistory then begin
6337 if TObject( Node.Data ) is TFavoriteThreadItem then
6338 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6339 FavoriteClick( Node );
6342 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6343 if ActiveList = Node.Data then
6346 ActiveListColumnSave;
6348 if TObject(Node.Data) is TBBS then begin
6349 SetActiveList(Node.data);
6350 end else if TObject(Node.Data) is TCategory then begin
6351 SetActiveList(Node.data);
6352 end else if TObject(Node.Data) is TBoard then begin
6353 if not TBoard(Node.Data).IsThreadDatRead then begin
6354 Screen.Cursor := crHourGlass;
6356 if not TBoard(Node.Data).IsThreadDatRead then
6357 GikoSys.ReadSubjectFile(Node.Data);
6359 Screen.Cursor := crDefault;
6362 Sort.SetSortDate(Now());
6363 SetActiveList(Node.data);
6366 if TObject( Node.Data ) is TBoard then begin // not TCategory
6367 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6368 if GikoSys.Setting.ListWidthState = glsMax then begin
6369 GikoDM.BrowserMinAction.Execute;
6370 if GikoForm.Visible then
6374 if GikoSys.Setting.ListHeightState = glsMax then begin
6375 GikoDM.BrowserMinAction.Execute;
6376 if GikoForm.Visible then
6384 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6385 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6388 ThreadItem : TThreadItem;
6389 shiftDown : Boolean;
6392 if Node = nil then Exit;
6394 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6396 if FTreeType = gtt2ch then begin
6397 if not (TObject(Node.Data) is TBoard) then Exit;
6398 Board := TBoard(Node.Data);
6399 DownloadList(Board, shiftDown);
6400 end else if FTreeType = gttHistory then begin
6401 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6402 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6403 DownloadContent(ThreadItem, shiftDown);
6407 // *************************************************************************
6408 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6409 // *************************************************************************
6410 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6411 Shift: TShiftState);
6413 if Key = VK_BACK then begin
6414 // UpFolderButtonClick(Sender);
6415 end else if Key = VK_SPACE then begin
6416 TreeDoubleClick( TreeView.Selected );
6417 end else if Key = VK_RETURN then begin
6418 TreeClick( TreeView.Selected );
6419 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6422 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6423 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6424 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6426 favItem : TTreeNode;
6427 favThreadItem : TFavoriteThreadItem;
6433 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6434 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6435 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6436 rect := FavoriteTreeView.Selected.DisplayRect(true);
6437 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6438 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6439 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6440 if ssDouble in Shift then begin
6441 FClickNode := FavoriteTreeView.Selected;
6442 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6446 TObject(FavoriteTreeView.Selected));
6453 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6454 if favItem = nil then Exit;
6456 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6457 favThreadItem := TFavoriteThreadItem( favItem.Data );
6458 if favThreadItem.Item <> nil then
6459 InsertBrowserTab( favThreadItem.Item, False );
6466 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6469 if FIsIgnoreResize <> rtNone then
6472 if GikoSys.Setting.ListOrientation = gloVertical then begin
6473 if GikoSys.Setting.ListHeightState = glsMin then begin
6474 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6475 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6481 procedure TGikoForm.OnResized;
6486 FOldFormWidth := Width;
6487 FIsIgnoreResize := rtNone;
6492 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6493 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6498 //
\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)
6499 if FActiveContent <> nil then begin
6500 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6501 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6503 FIsMinimize := mtNone;
6508 // *************************************************************************
6509 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6510 // *************************************************************************
6511 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6516 stlist : TStringList;
6517 i, count, rc : Integer;
6523 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6524 FActiveContent.Browser.SetFocus;
6527 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6528 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6529 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6530 if (Assigned(e)) then begin
6531 if (e.className = 'date') or (e.id = 'date') then begin
6533 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6534 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6535 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6536 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6539 stlist := TStringList.Create;
6541 stList.DelimitedText := AID;
6543 for i := 0 to stList.Count - 1 do
6544 if Length(WideString(stList[i])) = 8 then begin
6545 if GikoSys.NotDateorTimeString(stList[i]) then begin
6554 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6556 if count > 20 then begin
6557 rc := GikoUtil.MsgBox(Handle,
6558 '20
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6559 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6560 MB_YESNO or MB_ICONQUESTION);
6561 limited := rc <> ID_YES;
6563 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6564 FActiveContent.IDAnchorPopup(body);
6573 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6574 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6576 SelectTimer.Interval := 0;
6577 if not (ListView.Selected = nil) then
6578 if( FActiveContent = nil) or
6579 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6584 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6585 procedure TGikoForm.ActiveListColumnSave;
6587 ActivListObj : TObject;
6588 i, id, idx : Integer;
6589 BBSOrder : TGikoBBSColumnList;
6590 CategoryOrder : TGikoCategoryColumnList;
6591 BoardOrder : TGikoBoardColumnList;
6594 ActivListObj := ActiveList;
6595 if ActivListObj is TBBS then begin
6596 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6597 BBSOrder := TGikoBBSColumnList.Create;
6599 for i := 0 to ListView.Columns.Count - 1 do begin
6600 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6601 idx := ListView.Column[ i ].Tag;
6602 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6603 BBSOrder.Add( TGikoBBSColumnID( id ) );
6604 //
\95\9d\82Ì
\95Û
\91¶
6605 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6607 for i := 0 to ListView.Columns.Count - 1 do
6608 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6609 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6613 end else if ActivListObj is TCategory then begin
6614 //=====
\94Â
\83\8a\83X
\83g =====
6615 CategoryOrder := TGikoCategoryColumnList.Create;
6617 for i := 0 to ListView.Columns.Count - 1 do begin
6618 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6619 idx := ListView.Column[ i ].Tag;
6620 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6621 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6622 //
\95\9d\82Ì
\95Û
\91¶
6623 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6625 for i := 0 to ListView.Columns.Count - 1 do
6626 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6627 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6631 end else if ActivListObj is TBoard then begin
6632 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6633 BoardOrder := TGikoBoardColumnList.Create;
6635 for i := 0 to ListView.Columns.Count - 1 do begin
6636 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6637 idx := ListView.Column[ i ].Tag;
6638 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6639 BoardOrder.Add( TGikoBoardColumnID( id ) );
6640 //
\95\9d\82Ì
\95Û
\91¶
6641 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6643 for i := 0 to ListView.Columns.Count - 1 do
6644 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6645 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6653 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6654 Column: TListColumn; Point: TPoint);
6660 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6661 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6662 ListColumnPopupMenu.Items.Items[ i ].Free;
6664 //
\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¢)
6665 if TObject( FActiveList ) is TBBS then begin
6667 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6668 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6669 item := TMenuItem.Create( ListColumnPopupMenu );
6670 item.Caption := GikoBBSColumnCaption[ i ];
6672 item.OnClick := ListColumnPopupMenuOnClick;
6673 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6674 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6675 item.Checked := True;
6679 ListColumnPopupMenu.Items.Add( item );
6682 end else if TObject( FActiveList ) is TCategory then begin
6684 //=====
\94Â
\83\8a\83X
\83g =====
6685 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6686 item := TMenuItem.Create( ListColumnPopupMenu );
6687 item.Caption := GikoCategoryColumnCaption[ i ];
6689 item.OnClick := ListColumnPopupMenuOnClick;
6690 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6691 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6692 item.Checked := True;
6696 ListColumnPopupMenu.Items.Add( item );
6699 end else if TObject( FActiveList ) is TBoard then begin
6701 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6702 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6703 item := TMenuItem.Create( ListColumnPopupMenu );
6704 item.Caption := GikoBoardColumnCaption[ i ];
6706 item.OnClick := ListColumnPopupMenuOnClick;
6707 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6708 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6709 item.Checked := True;
6713 ListColumnPopupMenu.Items.Add( item );
6718 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6719 Point := ListView.ClientToScreen( Point );
6720 if ListColumnPopupMenu.Items.Count > 0 then
6721 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6725 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6726 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6733 if not (Sender is TMenuItem) then
6736 ActiveListColumnSave;
6737 item := TMenuItem( Sender );
6739 if TObject( FActiveList ) is TBBS then
6740 orderList := GikoSys.Setting.BBSColumnOrder
6741 else if TObject( FActiveList ) is TCategory then
6742 orderList := GikoSys.Setting.CategoryColumnOrder
6743 else if TObject( FActiveList ) is TBoard then
6744 orderList := GikoSys.Setting.BoardColumnOrder
6748 if item.Checked then begin
6749 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6750 for i := orderList.Count - 1 downto 0 do begin
6751 if Integer( orderList[ i ] ) = item.Tag then begin
6752 orderList.Delete( i );
6757 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6758 orderList.Add( Pointer( item.Tag ) );
6761 SetActiveList( FActiveList );
6765 procedure TGikoForm.OnGestureStart(Sender: TObject);
6770 procedure TGikoForm.OnGestureMove(Sender: TObject);
6777 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6779 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6780 s := MouseGesture.GetGestureStr;
6782 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6783 if Action <> nil then
6784 ActStr := '
\81i' + Action.Caption + '
\81j';
6785 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6786 StatusBar.Panels[1].Text := s;
6789 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6794 s := MouseGesture.GetGestureStr;
6796 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6797 if Action <> nil then
6799 StatusBar.Panels[1].Text := '';
6802 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6803 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6805 ThreadItem: TThreadItem;
6807 DefaultDraw := true;
6808 if TObject(Item.Data) is TThreadItem then begin
6809 ThreadItem := TThreadItem(Item.Data);
6810 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6811 ListView.Canvas.Brush.Color := FOddColor;
6812 //
\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
6813 if (GikoSys.Setting.UnFocusedBold) and
6814 (Item.Selected) and (not ListView.Focused) then begin
6815 ListView.Canvas.Font.Style := [fsBold];
6818 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6821 if ThreadItem.UnRead then
6822 ListView.Canvas.Font.Style := [fsBold];
6827 procedure TGikoForm.FormActivate(Sender: TObject);
6829 if GikoSys.Setting.GestureEnabled then begin
6830 GikoSys.Setting.Gestures.ClearGesture;
6831 GikoSys.Setting.Gestures.LoadGesture(
6832 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6833 MouseGesture.UnHook;
6834 MouseGesture.OnGestureStart := OnGestureStart;
6835 MouseGesture.OnGestureMove := OnGestureMove;
6836 MouseGesture.OnGestureEnd := OnGestureEnd;
6837 MouseGesture.SetHook(Handle);
6839 //MouseGesture.UnHook;
6840 MouseGesture.OnGestureStart := nil;
6841 MouseGesture.OnGestureMove := nil;
6842 MouseGesture.OnGestureEnd := nil;
6846 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6848 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6849 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6853 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6858 affectedBand : TCoolBand;
6861 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6862 FIsIgnoreResize := rtResizing;
6863 PostMessage( Handle, USER_RESIZED, 0, 0 );
6865 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6866 if CoolBar = MainCoolBar then begin
6867 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6868 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6869 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6870 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6871 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6873 end else if CoolBar = ListCoolBar then begin
6874 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
6875 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6876 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6877 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6878 GikoSys.Setting.ListCoolSet[i] := CoolSet;
6880 end else if CoolBar = BrowserCoolBar then begin
6881 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
6882 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6883 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6884 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6885 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
6888 if not (Sender is TToolBar) or (CoolBar = nil) then
6890 toolbar := TToolBar( Sender );
6891 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
6892 affectedBand := nil;
6893 for i := CoolBar.Bands.Count - 1 downto 0 do begin
6894 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
6895 band := CoolBar.Bands[ i ];
6896 if band.Break or (i = 0) then begin
6897 if i + 1 < CoolBar.Bands.Count then
6898 if not CoolBar.Bands[ i + 1 ].Break then
6899 affectedBand := CoolBar.Bands[ i + 1 ];
6902 affectedBand := CoolBar.Bands[ i - 1 ];
6907 //
\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·
6908 if CoolBar = MainCoolBar then begin
6909 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
6910 coolSet.FCoolWidth := toolbar.Width + 25;
6911 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
6912 if affectedBand <> nil then begin
6913 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
6914 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6915 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
6917 end else if CoolBar = ListCoolBar then begin
6918 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
6919 coolSet.FCoolWidth := toolbar.Width + 25;
6920 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
6921 if affectedBand <> nil then begin
6922 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
6923 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6924 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
6926 end else if CoolBar = BrowserCoolBar then begin
6927 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
6928 coolSet.FCoolWidth := toolbar.Width + 25;
6929 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
6930 if affectedBand <> nil then begin
6931 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
6932 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6933 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
6940 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
6942 CoolBarResized( Sender, MainCoolBar );
6945 procedure TGikoForm.ListToolBarResize(Sender: TObject);
6947 CoolBarResized( Sender, ListCoolBar );
6950 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
6952 CoolBarResized( Sender, BrowserCoolBar );
6955 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
6956 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
6958 ThreadItem : TThreadItem;
6959 ReadList : TStringList;
6960 wordCount : TWordCount;
6962 ThreadItem := GetActiveContent;
6963 ReadList := TStringList.Create;
6964 wordCount := TWordCount.Create;
6966 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6967 {$IFDEF SPAM_FILTER_ENABLED}
6968 //
\83X
\83p
\83\80\82É
\90Ý
\92è
6969 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
6970 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
6971 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
6972 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
6974 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
6975 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
6980 FActiveContent.Repaint := true;
6981 if ThreadItem <> nil then
6982 InsertBrowserTab( ThreadItem, True );
6985 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
6986 procedure TGikoForm.IndividualAbonID(Atype : Integer);
6988 ThreadItem : TThreadItem;
6991 ReadList : TStringList;
6992 wordCount : TWordCount;
6994 No := KokoPopupMenu.Tag;
6995 if No = 0 then Exit;
6996 ThreadItem := GetActiveContent;
6997 if ThreadItem = nil then Exit;
6998 body := TStringList.Create;
7000 GikoSys.GetSameIDRes(No, ThreadItem, body);
7002 ReadList := TStringList.Create;
7003 wordCount := TWordCount.Create;
7005 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7006 {$IFDEF SPAM_FILTER_ENABLED}
7007 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7008 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7010 for i := 0 to body.Count - 1 do begin
7011 {$IFDEF SPAM_FILTER_ENABLED}
7012 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7013 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7014 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7016 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7017 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7023 FActiveContent.Repaint := true;
7024 if ThreadItem <> nil then
7025 InsertBrowserTab( ThreadItem, True );
7032 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7034 firstElement: IHTMLElement;
7035 document: IHTMLDocument2;
7037 document := FActiveContent.Browser.Document as IHTMLDocument2;
7038 if Assigned(document) then
7039 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7040 if Assigned(firstElement) then
7041 if firstElement.style.visibility <> 'hidden' then
7042 firstElement.style.visibility := 'hidden';
7046 procedure TGikoForm.RepaintAllTabsBrowser();
7049 ThreadItem: TThreadItem;
7051 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7052 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7054 ThreadItem := GetActiveContent;
7055 if ThreadItem <> nil then
7056 InsertBrowserTab( ThreadItem, True );
7060 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7061 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7062 Shift: TShiftState);
7064 //
\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Ì
7065 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7066 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7067 SelectTimer.Interval := 0;
7068 if not (GikoSys.Setting.BrowserTabVisible) then begin
7069 if (GetActiveList is TBoard) then begin
7070 //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
7071 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7072 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7073 (Key = VK_UP) or (Key = VK_DOWN)) then
7074 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7078 // *************************************************************************
7079 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7080 // *************************************************************************
7081 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7082 Node: TTreeNode; var AllowEdit: Boolean);
7084 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7085 FOrigenCaption := Node.Text;
7087 // *************************************************************************
7088 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7089 // *************************************************************************
7090 function TGikoForm.GetMainForm(): TComponent;
7092 Result := Application.MainForm;
7094 // *************************************************************************
7095 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7096 // *************************************************************************
7097 function TGikoForm.GetScreenCursor(): TCursor;
7099 Result := Screen.Cursor;
7101 // *************************************************************************
7102 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7103 // *************************************************************************
7104 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7106 if (Screen.Cursor <> Cursor) then
7107 Screen.Cursor := Cursor;
7109 // *************************************************************************
7110 //!
\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
7111 // *************************************************************************
7112 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7114 //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Ì
7115 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7116 if GikoDM.CabinetVisibleAction.Enabled then begin
7117 GikoDM.CabinetVisibleAction.Execute;
7120 // *************************************************************************
7121 //!
\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
7122 // *************************************************************************
7123 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7125 if GikoDM.FavoriteArrangeAction.Enabled then begin
7126 GikoDM.FavoriteArrangeAction.Execute;
7129 // *************************************************************************
7130 //!
\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
7131 // *************************************************************************
7132 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7133 var Handled: Boolean);
7137 //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ß
7138 if Self.Active then begin
7140 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7141 WM_KEYFIRST..WM_KEYLAST :
7143 //
\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ç
7144 if (Msg.message <> WM_KEYUP)
7145 and (Msg.message <> WM_CHAR)
7146 and (Msg.message <> WM_SYSKEYUP) then begin
7147 wmMsg.Msg := Msg.message;
7148 wmMsg.CharCode := Word(Msg.wParam);
7149 wmMsg.KeyData := Msg.lParam;
7150 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7151 Self.OnShortCut(wmMsg, Handled);
7157 // *************************************************************************
7158 //!
\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
7159 // *************************************************************************
7160 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7162 Application.ProcessMessages;
7163 if not Application.Terminated then begin
7164 if PreviewTimer.Enabled then
7165 PreviewTimer.Enabled := False;
7166 //
\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
7167 if FHint <> nil then begin
7168 FHint.ReleaseHandle;
7171 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7172 if FPreviewBrowser <> nil then
7173 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7177 // *************************************************************************
7178 //!
\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
7179 // *************************************************************************
7180 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7185 if (Sender <> nil) then begin
7186 s := ' [' + Sender.ClassName + ']' + #13#10;
7188 s := ' [ Sender is nil ] ' + #13#10;
7191 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7193 // *************************************************************************
7194 //!
\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¬
7195 // *************************************************************************
7196 procedure TGikoForm.CreateControlThread();
7198 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7199 FControlThread := TThreadControl.Create(True);
7200 FControlThread.MaxThreadCount := 1;
7201 FControlThread.Resume;
7202 FControlThread.OnDownloadEnd := DownloadEnd;
7203 FControlThread.OnDownloadMsg := DownloadMsg;
7204 FControlThread.OnWork := Work;
7205 FControlThread.OnWorkBegin := WorkBegin;
7206 FControlThread.OnWorkEnd := WorkEnd;
7208 // *************************************************************************
7209 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7210 // *************************************************************************
7211 procedure TGikoForm.CreateBrowsers(count: Integer);
7214 newBrowser: TWebBrowser;
7216 BrowserNullTab := TBrowserRecord.Create;
7217 BrowserNullTab.Browser := Browser;
7218 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7219 FBrowsers := TList.Create;
7220 for i := 0 to count -1 do begin
7221 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7222 newBrowser := FBrowsers[FBrowsers.Count - 1];
7223 TOleControl(newBrowser).Parent := BrowserPanel;
7224 TOleControl(newBrowser).Align := alNone;
7225 TOleControl(newBrowser).Left := 0;
7226 TOleControl(newBrowser).Top := 0;
7227 newBrowser.RegisterAsDropTarget := False;
7228 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7229 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7230 newBrowser.OnEnter := BrowserEnter;
7231 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7232 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7233 newBrowser.Navigate(BLANK_HTML);
7234 ShowWindow(newBrowser.Handle, SW_HIDE);
7236 BrowserNullTab.Browser.BringToFront;
7237 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7238 //
\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Ì
7239 //
\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Å
7240 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7241 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7242 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7243 Application.ProcessMessages;
7246 // *************************************************************************
7247 //!
\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é
7248 // *************************************************************************
7249 procedure TGikoForm.SetSelectComboBox();
7251 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7254 ToolButton: TToolButton;
7256 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7257 SelectComboBoxPanel.Visible := False;
7259 for i := ListToolBar.ControlCount - 1 downto 0 do
7261 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7263 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7264 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7265 SelectComboBoxPanel.Parent := ListToolBar;
7266 SelectComboBoxPanel.Visible := True;
7268 SelectComboBox.Left := 0;
7269 SelectComboBox.Top := 0;
7270 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7271 SelectComboBox.Width := SelectComboBoxPanel.Width -
7272 SelectComboBoxSplitter.Width;
7274 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7275 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7276 if ToolButton = nil then begin
7277 ToolButton := TToolButton.Create(ListToolBar);
7278 ToolButton.Name := DUMMYCOMPNAME;
7280 ToolButton.Style := tbsSeparator;
7281 ToolButton.Width := 0;
7282 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7283 ListToolBar.InsertControl(ToolButton);
7284 ToolButton.Visible := False;
7286 //
\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·
7287 if (i + 1) < ListToolBar.ControlCount then
7288 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7289 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7290 ListToolBar.Controls[ i + 1 ].Visible := False;
7293 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7294 ListToolBar.Controls[ i ].Visible := False;
7302 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7303 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7304 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7311 if (TreeView.Selected <> nil) and
7312 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7313 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7314 rect := TreeView.Selected.DisplayRect(true);
7315 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7316 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7317 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7318 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7319 if ssDouble in Shift then begin
7320 TreeDoubleClick( TreeView.Selected );
7322 TreeClick(TreeView.Selected);
7329 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7330 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7334 if ActionList <> nil then begin
7335 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7337 for i := 0 to ActionList.ActionCount - 1 do begin
7339 FActionListGroupIndexes[i] :=
7340 TCustomAction(ActionList.Actions[i]).GroupIndex;
7341 TCustomAction(ActionList.Actions[i]).GroupIndex
7344 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7350 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7351 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7355 if ActionList <> nil then begin
7356 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7357 for i := 0 to ActionList.ActionCount - 1 do begin
7359 TCustomAction(ActionList.Actions[i]).GroupIndex
7360 := FActionListGroupIndexes[i];
7362 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7368 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7369 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7373 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7374 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7376 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7377 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7382 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7383 MousePos: TPoint; var Handled: Boolean);
7386 coolBar: TGikoCoolBar;
7389 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7390 coolBar := TGikoCoolBar(Sender);
7391 if (coolBar = MainCoolBar) then begin
7392 FToolBarSettingSender := tssMain;
7393 end else if (coolBar = ListCoolBar) then begin
7394 FToolBarSettingSender := tssList;
7395 end else if (coolBar = BrowserCoolBar) then begin
7396 FToolBarSettingSender := tssBrowser;
7398 FToolBarSettingSender := tssNone;
7400 pos := coolBar.ClientToScreen( MousePos );
7401 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7406 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7408 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7409 if (Msg.wParam = WM_LBUTTONUP) then begin
7413 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7414 procedure TGikoForm.StoredTaskTray;
7417 if (FIconData.uID = 0) then begin
7418 FIconData.cbSize := SizeOf(TNotifyIconData);
7419 FIconData.uID := Self.Handle;
7420 FIconData.Wnd := Handle;
7421 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7422 FIconData.uCallbackMessage := USER_TASKTRAY;
7423 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7424 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7425 Shell_NotifyIcon(NIM_ADD, @FIconData);
7426 ShowEditors(SW_HIDE);
7427 ShowWindow(Self.Handle, SW_HIDE);
7432 //!
\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¦
7433 procedure TGikoForm.UnStoredTaskTray;
7437 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7438 SetForegroundWindow(Application.Handle);
7443 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7444 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7445 ShowWindow(Self.Handle, SW_RESTORE);
7447 ShowWindow(Self.Handle, SW_SHOW);
7449 ShowEditors(SW_SHOW);
7450 GikoDM.StoredTaskTrayAction.Tag := 0;
7454 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7455 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7457 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7461 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7462 for i := 0 to Screen.CustomFormCount - 1 do begin
7463 if TObject(Screen.CustomForms[i]) is TEditorForm then
7464 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);