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);
681 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
682 procedure ReleaseOldestBrowser;
684 procedure CreateParams(var Params: TCreateParams); override;
685 procedure WndProc(var Message: TMessage); override;
686 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
687 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
688 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
692 LastRoundTime: TDateTime;
693 BrowserNullTab: TBrowserRecord;
694 FControlThread: TThreadControl;
695 FIconData : TNotifyIconData;
696 procedure MoveToURL(const inURL: string);
697 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
699 function GetHttpState: Boolean;
700 procedure SetEnabledCloseButton(Enabled: Boolean);
701 function GetTreeNode(Data: TObject): TTreeNode;
702 procedure ListViewAllSelect;
703 property ListStyle: TViewStyle read FListStyle write FListStyle;
704 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
705 property ViewType: TGikoViewType read FViewType write FViewType;
706 property NameCookie: string read FNameCookie write FNameCookie;
707 property MailCookie: string read FMailCookie write FMailCookie;
708 property ClickNode: TTreeNode read FClickNode write FClickNode;
709 property TreeType: TGikoTreeType read FTreeType write FTreeType;
710 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
711 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
712 property SelectResWord : string read FSelectResWord write FSelectResWord;
713 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
714 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
715 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
716 property ToolBarSettingSender : TToolBarSettingSenderType
717 read FToolBarSettingSender write FToolBarSettingSender;
718 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
719 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
720 property WorkCount: Integer read FWorkCount write FWorkCount;
721 procedure SetContent(inThread: TBrowserRecord);
722 function GetActiveContent: TThreadItem;
723 function GetActiveList: TObject;
725 procedure SetListViewType(AViewType: TGikoViewType); overload;
726 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
727 procedure PlaySound(SoundEventName: string);
728 procedure ShowBBSTree( inBBS : TBBS );
729 procedure ShowBBSTreeOld( inBBS : TBBS );
730 procedure ShowHistoryTree;
731 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
732 procedure SetBrowserTabState;
733 procedure SetToolBarPopup;
734 procedure ShowFavoriteAddDialog( Item : TObject );
735 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
736 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
737 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
738 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
739 property OddColor : TColor read FOddColor write FOddColor;
740 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
741 procedure OnPlugInMenuItem( Sender : TObject );
742 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
743 /// 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Å
744 procedure ActiveListColumnSave;
745 procedure SetActiveList(Obj: TObject);
746 property ActiveList: TObject read GetActiveList write SetActiveList;
747 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
748 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
749 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
750 procedure IndividualAbonID(Atype : Integer);
751 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
752 procedure IndividualAbon(Atag, Atype : Integer);
753 //
\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Ý
754 procedure RepaintAllTabsBrowser();
755 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
756 procedure SetLinkBar;
757 procedure FavoriteBrowseFolder( node: TTreeNode );
758 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
759 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
760 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
761 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
762 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
763 procedure DeleteHistory( threadItem: TThreadItem );
764 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
765 procedure DeleteTab(ThreadItem: TThreadItem); overload;
766 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
767 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
768 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
769 procedure DeleteTab(index, selectIndex: Integer); overload;
770 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
771 procedure BrowserMovement(const AName: string);
772 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
773 function GetMainForm(): TComponent;
774 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
775 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
776 procedure OnGestureStart(Sender: TObject);
777 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
778 procedure OnGestureMove(Sender: TObject);
779 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
780 procedure OnGestureEnd(Sender: TObject);
781 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
782 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
783 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
784 procedure SelectListItem(List: TList);
785 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
786 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
788 procedure ModifySelectList;
790 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
792 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
794 procedure SetSelectRoundName(Sender: TObject);
796 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
798 function WebBrowserClick(Sender: TObject): WordBool;
799 //!
\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é
800 procedure SetSelectComboBox();
802 //!
\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
803 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
804 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
805 procedure StoredTaskTray;
807 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
810 TFavoriteMenuItem = class(TMenuItem)
814 property Data: Pointer read FData write FData;
817 TBBSMenuItem = class(TMenuItem)
821 property Data: Pointer read FData write FData;
824 TLinkToolButton = class(TToolButton)
828 property Data: Pointer read FData write FData;
837 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
838 YofUtils, ToolBarUtil, ToolBarSetting,
839 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
840 FavoriteArrange, AddressHistory, Gesture,
841 About, Option, Round, Splash, Sort, ListSelect, Imm,
842 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
843 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
844 InputAssistDataModule, Types, ReplaceDataModule;
847 BLANK_HTML: string = 'about:blank';
848 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
850 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
851 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
852 HTML_FILE_NAME = 'temp_preview.html';
853 //
\83\81\83b
\83Z
\81[
\83WID
854 USER_TREECLICK = WM_USER + 2000;
855 USER_RESIZED = WM_USER + 2001;
856 USER_MINIMIZED = WM_USER + 2002;
857 USER_SETLINKBAR = WM_USER + 2003;
858 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
859 USER_TASKTRAY = WM_USER + 2010;
862 procedure TGikoForm.CreateParams(var Params: TCreateParams);
865 if FormStyle in [fsNormal, fsStayOnTop] then begin
866 if BorderStyle in [bsSingle, bsSizeable] then begin
867 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
868 Params.WndParent := 0;
873 procedure TGikoForm.FormCreate(Sender: TObject);
875 TVS_NOTOOLTIPS = $0080;
881 wp: TWindowPlacement;
885 Writeln('============================================================');
886 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
888 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
889 Writeln('
\8fI
\97¹
\8e\9e\82Í
\81A
\83M
\83R
\83i
\83r
\83E
\83B
\83\93\83h
\83E
\82ð
\95Â
\82¶
\82Ä
\82
\82¾
\82³
\82¢');
890 Writeln('============================================================');
893 Sort.SetSortDate(Now());
895 FTreeType := gttNone;
896 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
898 Application.HookMainWindow(Hook);
899 FIsIgnoreResize := rtResizing;
900 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
901 //(
\8bN
\93®
\8e\9e\82É
\83c
\81[
\83\8b\83{
\83^
\83\93\82ÌDown
\83v
\83\8d\83p
\83e
\83B
\82ð
\94½
\89f
\82³
\82¹
\82é
\93s
\8d\87\8fãGroupIndex
\82Í
\90Ý
\92è
\82Å
\82«
\82È
\82¢)
902 //
\82±
\82ê
\88È
\8cãSet
\81`
\82Å
\8dÄ
\90Ý
\92è
\82·
\82é
\82Ü
\82Å
\81AAction
\82ÌChecked
\82ð
\82¢
\82¶
\82é
\82Æ
\82«
\82Í
\92\8d\88Ó
\81I
903 GetGroupIndex(GikoDM.GikoFormActionList);
904 FSearchDialog := nil;
905 CreateBrowsers(BROWSER_COUNT);
908 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
911 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
912 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
914 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
915 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
917 EnabledCloseButton := True;
919 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
920 ListView.ViewStyle := GikoSys.Setting.ListStyle;
922 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
924 AnimePanel.Left := 0;
926 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
928 //
\83L
\83\83\83r
\83l
\83b
\83g
929 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
931 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
932 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
933 GikoDM.MsgBarVisibleActionExecute(nil);
934 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
936 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
937 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
938 GikoDM.StatusBarVisibleActionExecute(nil);
940 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
941 TreeView.Items.BeginUpdate;
942 FavoriteTreeView.Items.BeginUpdate;
943 ListView.Items.BeginUpdate;
945 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
946 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
947 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
948 TreeView.Color := GikoSys.Setting.CabinetBackColor;
949 FavoriteTreeView.Font.Assign(TreeView.Font);
950 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
952 ListView.Font.Name := GikoSys.Setting.ListFontName;
953 ListView.Font.Size := GikoSys.Setting.ListFontSize;
954 ListView.Font.Color := GikoSys.Setting.ListFontColor;
955 ListView.Font.Style := [];
956 if GikoSys.Setting.ListFontBold then
957 ListView.Font.Style := [fsbold];
958 if GikoSys.Setting.ListFontItalic then
959 ListView.Font.Style := ListView.Font.Style + [fsitalic];
961 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
962 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
963 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
964 FOddColor := GikoSys.Setting.OddColor;
967 TreeView.Items.EndUpdate;
968 FavoriteTreeView.Items.EndUpdate;
969 ListView.Items.EndUpdate;
971 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
972 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
974 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
975 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
977 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
978 FResRangeMenuSelect := GikoSys.ResRange;
979 case GikoSys.ResRange of
982 GikoDM.AllResAction.Execute;
986 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
987 GikoDM.SelectResAction.Checked := True;
990 case FResRangeMenuSelect of
991 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
992 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
993 100: GikoDM.OnlyAHundredResAction.Checked := True;
997 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
998 case GikoSys.Setting.ThreadRange of
1001 GikoDM.AllItemAction.Checked := True;
1006 GikoDM.LogItemAction.Checked := True;
1011 GikoDM.NewItemAction.Checked := True;
1016 GikoDM.LiveItemAction.Checked := True;
1017 ViewType := gvtLive;
1021 GikoDM.ArchiveItemAction.Checked := True;
1022 ViewType := gvtArch;
1027 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1028 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1029 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1030 BrowserTab.Font.Style := [];
1031 if GikoSys.Setting.BrowserTabFontBold then
1032 BrowserTab.Font.Style := [fsBold];
1033 if GikoSys.Setting.BrowserTabFontItalic then
1034 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1035 BrowserTab.DoubleBuffered := True;
1036 FDragWFirst := false;
1037 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1039 //
\83u
\83\89\83E
\83U
\83^
\83u
1040 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1042 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1043 GikoDM.BrowserTabTopAction.Checked := True;
1045 GikoDM.BrowserTabBottomAction.Checked := True;
1048 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1049 GikoDM.BrowserTabTabStyleAction.Checked := True;
1050 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1051 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1053 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1056 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1057 ProgressBar.Parent := StatusBar;
1058 ProgressBar.Top := 2;
1059 ProgressBar.Left := 0;
1060 ProgressBar.Width := StatusBar.Panels[0].Width;
1061 ProgressBar.Height := StatusBar.Height - 2;
1062 ProgressBar.Position := 0;
1064 //
\8aO
\95\94\94Â
\83v
\83\89\83O
\83C
\83\93\82ð
\83\8d\81[
\83h(ReadBoardFile, LoadHistory
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1065 InitializeBoardPlugIns;
1067 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1068 GikoSys.ListBoardFile;
1069 //
\81@
\98A
\91±
\8bN
\93®
\8e\9e\82É
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83\81\83\82\83\8a\82ª
\95s
\92è
\82É
1071 //
\83X
\83v
\83\89\83b
\83V
\83\85\83E
\83B
\83\93\83h
\83E
\82Ì
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\90Ý
\92è
1072 if (SplashWindow <> nil) then begin
1073 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1077 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1078 for i := Length(BBSs) - 1 downto 0 do begin
1079 if not BBSs[i].IsBoardFileRead then
1080 GikoSys.ReadBoardFile(BBSs[i]);
1082 if SplashWindow <> nil then begin
1083 SplashWindow.ProgressBar.StepBy(20);
1084 SplashWindow.Update;
1088 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1089 RoundList := TRoundList.Create;
1090 RoundList.LoadRoundBoardFile;
1091 RoundList.LoadRoundThreadFile;
1093 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1094 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1095 Style := Style or TVS_NOTOOLTIPS;
1096 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1098 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1099 TreeView.Align := alClient;
1100 FavoriteTreeView.Align := alClient;
1101 FavoriteTreeView.Visible := False;
1103 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1106 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1107 wp.length := sizeof(wp);
1108 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1109 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1110 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1111 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1112 wp.showCmd := SW_HIDE;
1113 SetWindowPlacement(Handle, @wp);
1116 if GikoSys.Setting.WindowMax then
1117 WindowState := wsMaximized;
1119 //
\83M
\83R
\83A
\83j
\83\81
1121 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1122 if FileExists(FileName) then
1123 Animate.FileName := FileName;
1131 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1132 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1133 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1136 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1137 FHistoryList := THistoryList.Create;
1139 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1140 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1141 TreeView, FTreeType);
1143 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1144 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1145 FavoriteDM.ReadFavorite;
1147 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1148 GikoDM.ArrangeAction.Execute;
1150 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1151 case GikoSys.Setting.ListWidthState of
1153 ViewPanel.Width := 1;
1154 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1155 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1158 ViewPanel.Width := GikoSys.Setting.ListWidth;
1159 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1160 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1163 ViewPanel.Width := GikoSys.Setting.ListWidth;
1164 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1165 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1169 case GikoSys.Setting.ListHeightState of
1171 ViewPanel.Height := 1;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1176 ViewPanel.Height := GikoSys.Setting.ListHeight;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1181 ViewPanel.Height := GikoSys.Setting.ListHeight;
1182 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1183 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1188 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1189 CreateControlThread();
1191 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1192 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1194 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1197 BrowserBoardNameLabel.Caption := '';
1198 BrowserNameLabel.Caption := '';
1201 FTabHintIndex := -1;
1203 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1204 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1205 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1207 MakeDefaultINIFile();
1208 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1209 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1210 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1211 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1214 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1215 SetSelectComboBox();
1217 //
\83A
\83h
\83\8c\83X
\83o
\81[
1218 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1220 //
\83\8a\83\93\83N
\83o
\81[
1222 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1224 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1225 if not FileExists(GikoSys.GetBoardFileName) then begin
1226 msg := '
\82±
\82Ì
\83\81\83b
\83Z
\81[
\83W
\82Í
\83M
\83R
\83i
\83r
\82ð
\8f\89\82ß
\82Ä
\8eg
\97p
\82·
\82é
\82Æ
\82«
\82É
\82P
\89ñ
\82¾
\82¯
\95\
\8e¦
\82³
\82ê
\82Ü
\82·' + #13#10#13#10
1227 + '
\82±
\82ê
\82©
\82ç
\81A
\81u
\82Q
\82¿
\82á
\82ñ
\82Ë
\82é
\81v
\82Ì
\83A
\83h
\83\8c\83X
\88ê
\97\97\82ð
\83_
\83E
\83\93\83\8d\81[
\83h
\82µ
\82Ü
\82·' + #13#10
1228 + '
\8e\9f\82É
\8fo
\82Ä
\82
\82é
\89æ
\96Ê
\82Å
\81A
\81u
\8dX
\90V
\81v
\83{
\83^
\83\93\82ð
\89\9f\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B';
1229 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1230 GikoDM.NewBoardAction.Execute;
1233 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1234 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1236 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1237 // FLastRoundTime := 0;
1240 FHint := TResPopup.Create(Self);
1242 ListView.OnData := TListViewUtils.ListViewData;
1244 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1245 CabinetVisible( False );
1246 if GikoSys.Setting.CabinetVisible then begin
1247 i := CabinetSelectPopupMenu.Items.Count - 1;
1248 if GikoSys.Setting.CabinetIndex = i - 1 then
1249 GikoDM.CabinetHistoryAction.Execute
1250 else if GikoSys.Setting.CabinetIndex = i then
1251 GikoDM.CabinetFavoriteAction.Execute
1253 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1254 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1255 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1256 FIsIgnoreResize := rtResizing;
1257 GikoDM.CabinetBBSAction.Execute;
1260 ShowBBSTreeOld( BBSs[ 0 ] );
1261 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1264 //
\88ø
\90\94\82ª
\82 \82Á
\82½
\82ç
\83X
\83\8c\82ð
\8aJ
\82
\81i
\96¢
\8eæ
\93¾
\82È
\82ç
\83_
\83E
\83\93\83\8d\81[
\83h
\81j
1265 for i := 1 to ParamCount do begin
1266 MoveToURL(ParamStr(i));
1269 GikoDM.RepaintStatusBar;
1270 StatusBarResize(Sender);
1272 dummy1.Caption := ItemReservPMenu.Caption;
1273 dummy1.Hint := ItemReservPMenu.Hint;
1275 {$IFDEF SPAM_FILTER_ENABLED}
1276 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1277 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1280 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1281 MouseGesture := TMouseGesture.Create;
1282 GikoSys.Setting.Gestures.LoadGesture(
1283 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1284 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1285 MouseGesture.OnGestureStart := OnGestureStart;
1286 MouseGesture.OnGestureMove := OnGestureMove;
1287 MouseGesture.OnGestureEnd := OnGestureEnd;
1288 if GikoSys.Setting.GestureEnabled then
1289 MouseGesture.SetHook( Handle );
1291 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1292 GikoSys.SetGikoMessage;
1294 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1295 if GikoSys.Setting.AutoLogin then
1296 GikoDM.LoginAction.Execute;
1298 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1300 //
\83L
\83\83\83v
\83V
\83\87\83\93\82ª
\8fã
\8f\91\82«
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\8dÄ
\90Ý
\92è
1301 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1302 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1304 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1305 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1307 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1308 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1311 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1312 procedure TGikoForm.SaveCoolBarSettings;
1315 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1317 SaveMainCoolBarSettings;
1318 SaveBoardCoolBarSettings;
1319 SaveBrowserCoolBarSettings;
1322 procedure TGikoForm.SaveMainCoolBarSettings;
1327 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1328 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1329 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1330 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1331 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1332 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1335 procedure TGikoForm.SaveBoardCoolBarSettings;
1340 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1341 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1342 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1343 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1344 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1345 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1348 procedure TGikoForm.SaveBrowserCoolBarSettings;
1353 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1354 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1355 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1356 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1357 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1358 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1361 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1362 procedure TGikoForm.LoadCoolBarSettings;
1368 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1369 MainCoolBar.Bands.BeginUpdate;
1371 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1372 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1373 CoolSet := GikoSys.Setting.MainCoolSet[i];
1374 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1375 FIsIgnoreResize := rtNone;
1376 SaveCoolBarSettings;
1379 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1380 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1381 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1384 MainCoolBar.Bands.EndUpdate;
1387 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1388 ListCoolBar.Bands.BeginUpdate;
1390 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1391 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1392 CoolSet := GikoSys.Setting.ListCoolSet[i];
1393 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1394 FIsIgnoreResize := rtNone;
1395 SaveCoolBarSettings;
1398 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1399 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1400 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1403 ListCoolBar.Bands.EndUpdate;
1406 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1407 BrowserCoolBar.Bands.BeginUpdate;
1409 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1410 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1411 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1412 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1413 FIsIgnoreResize := rtNone;
1414 SaveCoolBarSettings;
1417 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1418 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1419 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1422 BrowserCoolBar.Bands.EndUpdate;
1427 procedure TGikoForm.FormShow(Sender: TObject);
1429 if FStartUp then begin
1430 ShowWindow(Application.Handle, SW_HIDE);
1432 //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½
1433 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1434 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1435 GikoDM.StdToolBarVisibleActionExecute( nil );
1436 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1437 GikoDM.AddressBarVisibleActionExecute( nil );
1438 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1439 GikoDM.LinkBarVisibleActionExecute( nil );
1440 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1441 GikoDM.ListToolBarVisibleActionExecute( nil );
1442 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1443 GikoDM.ListNameBarVisibleActionExecute( nil );
1444 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1445 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1446 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1447 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1449 // CoolBar
\95\9c\8c³
1450 LoadCoolBarSettings;
1452 //
\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é
1453 // ResetBandInfo( ListCoolBar, ListToolBar );
1454 FIsIgnoreResize := rtNone;
1456 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1457 if GikoSys.Setting.TabAutoLoadSave then begin
1458 GikoDM.TabsOpenAction.Tag := 1;
1459 GikoDM.TabsOpenAction.Execute;
1460 GikoDM.TabsOpenAction.Tag := 0;
1463 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1464 SetGroupIndex(GikoDM.GikoFormActionList);
1470 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1472 // if GikoForm.WindowState <> wsMinimized then
1473 // SaveCoolBarSettings;
1475 if ( GikoSys.Setting.ShowDialogForEnd ) and
1476 (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
1481 if GikoSys.Setting.TabAutoLoadSave then begin
1482 GikoDM.TabsSaveAction.Execute;
1485 if (SearchDialog <> nil) then begin
1486 if (SearchDialog.Visible) then begin
1489 SearchDialog.Release;
1492 SearchDialog := nil;
1496 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1497 GikoDM.CloseAllEditorAction.Execute;
1499 Application.UnhookMainWindow(Hook);
1500 Application.Terminate;
1503 procedure TGikoForm.FormDestroy(Sender: TObject);
1506 // CoolSet: TCoolSet;
1507 wp : TWindowPlacement;
1510 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1512 MouseGesture.UnHook;
1516 ActiveListColumnSave;
1520 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1521 wp.length := sizeof(wp);
1522 GetWindowPlacement(Handle, @wp);
1523 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1524 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1525 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1526 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1527 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1529 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1530 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1531 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1532 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1533 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1534 if GikoDM.ArrangeAction.Checked then
1535 GikoSys.Setting.ListOrientation := gloVertical
1537 GikoSys.Setting.ListOrientation := gloHorizontal;
1538 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1543 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1544 if not GikoSys.Setting.ResRangeHold then
1545 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1548 if WindowState <> wsNormal then
1549 WindowState := wsNormal;
1550 SaveCoolBarSettings;
1552 GikoSys.Setting.WriteWindowSettingFile;
1553 GikoSys.Setting.WriteNameMailSettingFile;
1556 //
\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è
1557 //
\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¢
1559 //
\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
1561 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1563 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1564 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1566 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1568 //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é
1569 FavoriteDM.WriteFavorite;
1573 LockWindowUpdate(Self.Handle);
1575 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1576 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1577 GikoSys.Setting.ShowDialogForAllTabClose := false;
1578 GikoDM.AllTabCloseAction.Execute;
1579 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1583 for i := FBrowsers.Count - 1 downto 0 do begin
1584 TWebBrowser(FBrowsers[i]).Free;
1587 FBrowsers.Capacity := 0;
1592 if BrowserNullTab <> nil then begin
1593 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1594 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1596 BrowserNullTab.Free;
1602 TreeView.Items.BeginUpdate;
1603 TreeView.Items.GetFirstNode.Free;
1604 TreeView.Items.Clear;
1605 TreeView.Items.EndUpdate;
1609 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1611 //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
1612 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1616 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1618 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1630 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1632 RoundList.SaveRoundFile;
1646 FControlThread.Terminate;
1647 FControlThread.WaitFor;
1651 FControlThread.Free;
1653 //
\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é
1654 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1655 GikoForm.PlugInMenu.items[i].Free;
1657 GikoForm.PlugInMenu.Clear;
1660 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1661 // 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Å
1662 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1663 for i := Length(BoardGroups) - 1 downto 0 do begin
1664 //BoardGroups[i].Clear;
1665 BoardGroups[i].Free;
1669 for i := Length( BBSs ) - 1 downto 0 do begin
1670 if BBSs[ i ] <> nil then
1678 if FEvent <> nil then
1682 if FHint <> nil then begin
1683 FHint.ReleaseHandle;
1688 if TPreviewBrowser <> nil then begin
1689 FPreviewBrowser.Free;
1690 FPreviewBrowser := nil;
1694 LockWindowUpdate(0);
1697 //
\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
1698 procedure TGikoForm.SetBBSMenu;
1701 item : TBBSMenuItem;
1704 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1705 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1707 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1708 CabinetSelectPopupMenu.Items[ i ].Free;
1709 CabinetMenu.Items[ i ].Free;
1710 BBSSelectPopupMenu.Items[ i ].Free;
1716 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1717 for i := Length( BBSs ) - 1 downto 0 do begin
1719 item := TBBSMenuItem.Create( PopupMenu );
1720 item.Caption := BBSs[ i ].Title;
1721 item.Data := BBSs[ i ];
1722 item.OnClick := BBSMenuItemOnClick;
1723 CabinetSelectPopupMenu.Items.Insert( 0, item );
1724 item := TBBSMenuItem.Create( PopupMenu );
1725 item.Caption := BBSs[ i ].Title;
1726 item.Data := BBSs[ i ];
1727 item.OnClick := BBSMenuItemOnClick;
1728 CabinetMenu.Insert( 0, item );
1729 item := TBBSMenuItem.Create( PopupMenu );
1730 item.Caption := BBSs[ i ].Title;
1731 item.Data := BBSs[ i ];
1732 item.OnClick := BBSMenuItemOnClick;
1733 BBSSelectPopupMenu.Items.Insert( 0, Item );
1740 procedure TGikoForm.ReloadBBS;
1745 LockWindowUpdate(Self.Handle);
1747 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1748 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1749 GikoSys.Setting.ShowDialogForAllTabClose := false;
1750 GikoDM.AllTabCloseAction.Execute;
1751 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1752 SetContent(BrowserNullTab);
1753 //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
1754 TreeView.Items.Clear;
1756 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1758 RoundList.SaveRoundFile;
1761 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1767 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1769 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1774 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1776 FavoriteDM.WriteFavorite;
1781 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1782 for i := Length(BoardGroups) - 1 downto 0 do begin
1784 BoardGroups[i].Free;
1790 for i := Length( BBSs ) - 1 downto 0 do begin
1791 if BBSs[ i ] <> nil then
1800 FTreeType := gttNone;
1802 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1804 //
\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Æ)
1805 InitializeBoardPlugIns;
1807 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1809 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1810 for i := Length(BBSs) - 1 downto 0 do begin
1811 if not BBSs[i].IsBoardFileRead then
1812 GikoSys.ReadBoardFile(BBSs[i]);
1815 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1818 ShowBBSTree( BBSs[ 0 ] );
1820 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1821 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1822 TreeView, FTreeType);
1824 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1825 FavoriteDM.ReadFavorite;
1829 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1830 RoundList.LoadRoundBoardFile;
1831 RoundList.LoadRoundThreadFile;
1833 LockWindowUpdate(0);
1837 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1838 (IE 7
\82ª about:..
\82ð
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©
\81A
\83M
\83R
\83i
\83r
\82ª
\92Ç
\89Á
\82µ
\82Ä
\82¢
\82é
\82Ì
\82©)
1839 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1841 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1849 threadItem : TThreadItem;
1851 Protocol, Host, Path, Document, Port, Bookmark: string;
1856 ActiveFileName: string;
1862 //
\83M
\83R
\83i
\83r
\82Í
\83\8c\83X
\83A
\83\93\83J
\81[
\82ª about:blank..
\82Å
\8en
\82Ü
\82é
\82±
\82Æ
\82ð
\8aú
\91Ò
\82µ
\82Ä
\82¢
\82é
\82ª
1863 // IE 7
\82Å
\82Í about:blank..
\82Å
\82Í
\82È
\82 about:..
\82É
\82È
\82é
\82Ì
\82Å
\81A
\92u
\8a·
\82·
\82é(
\93\8a\82°
\82â
\82è)
1864 if Pos('about:..', Text) = 1 then
1865 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1868 if not( TObject(Sender) is TWebBrowser )then
1872 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1873 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1874 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1881 if PreviewTimer.Enabled then
1882 PreviewTimer.Enabled := False;
1883 Application.CancelHint;
1885 if GetActiveContent <> nil then
1886 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1888 ActiveFileName := '';
1890 FActiveContent := nil;
1893 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1894 if (StatusBar.Panels[1].Text = Text2) then begin
1896 Writeln('Status Text is not changed!');
1900 StatusBar.Panels[1].Text := Text2;
1902 if FHint <> nil then begin
1903 FHint.ReleaseHandle;
1906 if FPreviewBrowser <> nil then
1907 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1909 if not GikoSys.Setting.UnActivePopup then
1910 if not GikoForm.Active then
1915 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1916 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1919 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1920 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1921 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1922 if FPreviewBrowser = nil then begin
1923 FPreviewBrowser := TPreviewBrowser.Create(Self);
1924 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1925 TOleControl(FPreviewBrowser).Parent := nil;
1927 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1928 FPreviewURL := Text2;
1929 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1930 PreviewTimer.Enabled := True;
1931 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1932 if Pos('mailto:', Text2) = 1 then begin
1933 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1934 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1936 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1937 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1938 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1939 if (Assigned(e)) then begin
1940 tmp2 := ZenToHan(e.Get_outerText);
1941 if (GikoSys.IsNumeric(tmp2)) then begin
1942 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1943 wkIntSt := StrToInt64(tmp2);
1944 wkIntTo := StrToInt64(tmp2);
1945 //s := GetThreadText(wkBBS, wkKey, wkIntSt, wkIntTo, False, False);
1946 FHint.PopupType := gptThread;
1947 HTMLCreater.SetResPopupText(FHint, GetActiveContent, wkIntSt, wkIntTo, False, False);
1949 FHint.PopupType := gptRaw;
1954 threadItem := GetActiveContent;
1955 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
1956 PathRec := Gikosys.Parse2chURL2(URL);
1957 if (PathRec.FNoParam) then begin
1961 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
1963 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
1965 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
1967 URL := GikoSys.GetBrowsableThreadURL( URL );
1968 wkIntSt := PathRec.FSt;
1969 wkIntTo := PathRec.FTo;
1971 if (wkIntSt = 0) and (wkIntTo = 0) then begin
1974 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
1976 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
1978 end else if wkIntSt > wkIntTo then begin
1983 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
1988 threadItem := BBSsFindThreadFromURL( URL );
1990 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
1991 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
1992 if board <> nil then begin
1993 if not board.IsThreadDatRead then
1994 GikoSys.ReadSubjectFile( board );
1995 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
1999 if threadItem <> nil then begin
2000 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2001 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2002 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2006 FHint.PopupType := gptThread;
2007 HTMLCreater.SetResPopupText(FHint, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2012 if FHint.PopupType = gptRaw then begin
2013 if FHint.Caption <> '' then
2016 if (FHint.ResCount <> 0) or (FHint.Title <> '') then
2022 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2026 FEnabledCloseButton := Enabled;
2027 SysMenu := GetSystemMenu(Handle, False);
2029 if Enabled then begin
2030 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2032 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2035 DrawMenuBar(Handle);
2038 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2039 var AllowChange: Boolean);
2041 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2042 // if FTreeType = gtt2ch then
2043 // FSortIndex := -1;
2046 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2047 Shift: TShiftState);
2051 if GetActiveList is TBoard then begin
2053 VK_BACK:; // UpFolderButtonClick(Sender);
2054 VK_SPACE: ListDoubleClick(Shift);
2055 VK_RETURN: ListClick;
2058 if ListView.Selected <> nil then begin
2059 pos.X := ListView.Column[ 0 ].Width;
2060 pos.Y := ListView.Selected.Top;
2062 pos.X := ListView.Left;
2063 pos.Y := ListView.Top;
2065 Windows.ClientToScreen( ListView.Handle, pos );
2066 ListPopupMenu.Popup( pos.X, pos.Y );
2069 end else begin // TBBS, TCategory
2071 VK_BACK:; // UpFolderButtonClick(Sender);
2072 VK_SPACE: ListClick;
2073 VK_RETURN: ListDoubleClick(Shift);
2076 if ListView.Selected <> nil then begin
2077 pos.X := ListView.Column[ 0 ].Width;
2078 pos.Y := ListView.Selected.Top;
2080 pos.X := ListView.Left;
2081 pos.Y := ListView.Top;
2083 Windows.ClientToScreen( ListView.Handle, pos );
2084 ListPopupMenu.Popup( pos.X, pos.Y );
2090 function TGikoForm.GetHttpState: Boolean;
2092 Result := FHttpState;
2095 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2096 Column: TListColumn);
2100 vSortIndex : Integer;
2101 vSortOrder : Boolean;
2103 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2104 if TObject( FActiveList ) is TBBS then begin
2105 orderList := GikoSys.Setting.BBSColumnOrder;
2106 vSortIndex := GikoSys.Setting.BBSSortIndex;
2107 vSortOrder := GikoSys.Setting.BBSSortOrder;
2108 end else if TObject( FActiveList ) is TCategory then begin
2109 orderList := GikoSys.Setting.CategoryColumnOrder;
2110 vSortIndex := GikoSys.Setting.CategorySortIndex;
2111 vSortOrder := GikoSys.Setting.CategorySortOrder;
2112 end else if TObject( FActiveList ) is TBoard then begin
2113 orderList := GikoSys.Setting.BoardColumnOrder;
2114 vSortIndex := GikoSys.Setting.BoardSortIndex;
2115 vSortOrder := GikoSys.Setting.BoardSortOrder;
2119 id := Integer( orderList[ idx ] );
2122 if vSortIndex = id then
2123 vSortOrder := not vSortOrder
2125 vSortOrder := id = 0;
2128 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2131 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2132 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2136 DefaultDraw := True;
2138 DefaultDraw := False;
2139 if (cdsSelected in State) or (cdsHot in State) then begin
2140 Sender.Canvas.Brush.Color := clHighlight;
2141 Sender.Canvas.Font.Color := clHighlightText;
2143 Sender.Canvas.Brush.Color := clBtnFace;
2144 Sender.Canvas.Font.Color := clBtnText;
2146 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2147 Sender.Canvas.FillRect(ARect);
2148 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2151 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2156 Nodes := TreeView.Items;
2158 for i := 0 to Nodes.Count - 1 do begin
2159 if Nodes.Item[i].Data = Data then begin
2160 Result := Nodes.Item[i];
2167 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2168 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2169 Headers: OleVariant; var Cancel: WordBool);
2174 kMenuName: string = 'menu:';
2177 if Pos(kMenuName, URL) <> 0 then begin
2178 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2180 if not GikoSys.IsNumeric(sNo) then Exit;
2184 KokoPopupMenu.Tag := StrToInt(sNo);
2185 KokoPopupMenu.Popup(p.x, p.y);
2186 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2187 Cancel := not GikoSys.Setting.OpenMailer;
2192 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2193 const ARect: TRect; var DefaultDraw: Boolean);
2197 IsBoardNode: Boolean;
2203 Category: TCategory;
2207 DefaultDraw := True;
2209 if FTreeType = gttHistory then Exit;
2211 TreeView.Canvas.Font.Color := clBlue;
2212 IsBoardNode := False;
2213 for i := 0 to TreeView.Items.Count - 1 do begin
2215 if not TreeView.Items[i].IsVisible then
2218 if TObject(TreeView.Items[i].Data) is TCategory then begin
2219 if TreeView.Items[i].Expanded then
2222 IsBoardNode := False;
2223 Category := TCategory(TreeView.Items[i].Data);
2224 for j := 0 to Category.Count - 1 do begin
2225 Board := Category.Items[j];
2226 if Board <> nil then begin
2227 if Board.UnRead > 0 then begin
2235 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2236 IsBoardNode := True;
2237 Board := TBoard(TreeView.Items[i].Data);
2239 Cnt := Board.UnRead;
2245 Bitmap := TBitmap.Create;
2247 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2248 Bitmap.Canvas.Font.Style := [fsBold];
2249 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2254 NodeRect := TreeView.Items[i].DisplayRect(True);
2257 CntText := '(' + IntToStr(Cnt) + ')'
2258 else if Cnt = 1 then
2262 TextWidth := TreeView.Canvas.TextWidth(CntText);
2264 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2266 NodeRect.Left + NodeWidth + TextWidth + 8,
2268 DrawText(TreeView.Canvas.Handle,
2272 DT_SINGLELINE or DT_VCENTER);
2274 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2277 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2278 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2281 Category: TCategory;
2284 DefaultDraw := True;
2286 if FTreeType = gttHistory then Exit;
2288 TreeView.Canvas.Font.Style := [];
2289 if Node <> nil then begin
2290 if TObject(Node.Data) is TCategory then begin
2291 Category := TCategory(Node.Data);
2292 for i := 0 to Category.Count - 1 do begin
2293 Board := Category.Items[i];
2294 if Board <> nil then begin
2295 if Board.UnRead > 0 then begin
2296 TreeView.Canvas.Font.Style := [fsBold];
2301 end else if TObject(Node.Data) is TBoard then begin
2302 Board := TBoard(Node.Data);
2303 if Board.UnRead > 0 then
2304 TreeView.Canvas.Font.Style := [fsBold];
2309 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2311 TreeView.Invalidate;
2313 if TObject(Node.Data) is TBBS then begin
2314 TBBS(Node.Data).NodeExpand := True;
2315 end else if TObject(Node.Data) is TCategory then begin
2316 TCategory(Node.Data).NodeExpand := True;
2317 end else if TObject(Node.Data) is TBoard then begin
2318 TBoard(Node.Data).NodeExpand := True;
2322 procedure TGikoForm.ListViewAllSelect;
2327 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2329 AddMessageList(Msg, nil, Icon);
2331 // *************************************************************************
2332 //!
\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
2333 // *************************************************************************
2334 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2338 boardPlugIn : TBoardPlugIn;
2343 if Item.DownType = gdtBoard then
2344 ATitle := Item.Board.Title
2346 ATitle := Item.ThreadItem.Title;
2348 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2350 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2352 if Item.DownType = gdtBoard then begin
2355 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2356 if GetActiveList = Item.Board then begin
2358 //
\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é
2359 if (GikoSys.Setting.AutoSortThreadList) then begin
2360 GikoSys.Setting.BoardSortIndex := 0;
2361 GikoSys.Setting.BoardSortOrder := True;
2363 Sort.SetSortDate(Now());
2364 SetActiveList(Item.Board);
2366 Item.Board.Modified := True;
2367 Item.Board.IsThreadDatRead := True;
2370 end else if Item.DownType = gdtThread then begin
2373 Item.ThreadItem.NewArrival := True;
2374 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2375 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2376 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2377 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2378 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2379 Item.ThreadItem.Title := Res.FTitle;
2380 ATitle := Item.ThreadItem.Title;
2381 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2382 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2383 ATitle := Res.FTitle;
2385 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2386 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2387 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2391 if GikoSys.Setting.BrowserTabVisible then begin
2392 if GetActiveContent = Item.ThreadItem then
2393 InsertBrowserTab(Item.ThreadItem)
2394 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2395 InsertBrowserTab(Item.ThreadItem, True)
2397 InsertBrowserTab(Item.ThreadItem, False);
2400 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2401 InsertBrowserTab(Item.ThreadItem);
2404 Application.ProcessMessages;
2406 if Item.State = gdsComplete then begin
2408 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2412 PlaySound('NewDiff');
2413 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2418 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2419 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2420 Item.ThreadItem.Round := False;
2421 //Item.ThreadItem.RoundName := '';
2422 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);
2425 //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
2426 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2427 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2428 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2429 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2430 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2431 case GikoForm.ViewType of
2432 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2433 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2434 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2435 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2436 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2437 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2440 RefreshListView(Item.ThreadItem);
2443 end else if Item.State = gdsNotModify then begin
2445 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2446 //SetContent(Item.ThreadItem);
2447 InsertBrowserTab(Item.ThreadItem);
2449 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2450 PlaySound('NoChange');
2451 Screen.Cursor := crDefault;
2452 end else if Item.State = gdsAbort then begin
2454 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2455 end else if Item.State = gdsError then begin
2460 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2461 // if Item.ResponseCode = 302 then
2462 // 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);
2468 if FWorkCount < 0 then FWorkCount := 0;
2469 if FWorkCount = 0 then begin
2471 Animate.Active := False;
2473 Screen.Cursor := crDefault;
2480 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2482 // SetProgressValue(Number, 0, AWorkCountMax);
2483 // ProgressBar.Visible := True;
2484 ProgressBar.Position := 0;
2485 ProgressBar.Max := AWorkCountMax;
2486 FDownloadTitle := AWorkTitle;
2487 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2488 FDownloadMax := AWorkCountMax;
2491 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2493 ProgressBar.Position := 0;
2494 if FDownloadMax <> 0 then
2495 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2498 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2500 ProgressBar.Position := AWorkCount;
2501 // SetProgressValue(Number, AWorkCount);
2502 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2505 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2507 ListItem: TListItem;
2509 MessageListView.Items.BeginUpdate;
2511 ListItem := MessageListView.Items.Add;
2512 ListItem.Caption := ACaption;
2513 ListItem.Data := AObject;
2514 ListItem.MakeVisible(False);
2516 gmiOK: ListItem.ImageIndex := 0;
2517 gmiSAD: ListItem.ImageIndex := 1;
2518 gmiNG: ListItem.ImageIndex := 2;
2519 gmiWhat: ListItem.ImageIndex := 3;
2522 MessageListView.Items.EndUpdate;
2526 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2527 procedure TGikoForm.ReleaseOldestBrowser;
2531 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2532 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2533 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2534 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2540 function TGikoForm.InsertBrowserTab(
2541 ThreadItem : TThreadItem;
2542 ActiveTab : Boolean = True
2545 i, j, idx : Integer;
2546 favItem : TFavoriteThreadItem;
2547 newBrowser : TBrowserRecord;
2551 if Threaditem = nil then Exit;
2553 if ThreadItem.IsLogFile then begin
2554 //
\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é
2555 //
\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é
2556 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2557 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2558 j := FBrowsers.IndexOf(FActiveContent.Browser);
2559 if j = BROWSER_COUNT - 1 then
2560 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2562 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2563 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2566 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2567 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2568 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2569 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2570 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2571 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2572 ReleaseOldestBrowser;
2573 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2574 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2575 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2577 if ActiveTab then begin
2578 BrowserTab.TabIndex := i;
2579 BrowserTab.OnChange(nil);
2586 idx := BrowserTab.TabIndex;
2587 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2588 newBrowser := TBrowserRecord.Create;
2589 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2590 ReleaseOldestBrowser;
2591 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2592 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2593 //newBrowser.Browser.Navigate(BLANK_HTML);
2594 newBrowser.thread := ThreadItem;
2595 newBrowser.Repaint := true;
2596 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2598 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2599 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2600 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2604 if ActiveTab then begin
2605 BrowserTab.TabIndex := 0;
2609 newBrowser := TBrowserRecord.Create;
2610 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2611 ReleaseOldestBrowser;
2612 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2613 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2614 //newBrowser.Browser.Navigate(BLANK_HTML);
2615 newBrowser.thread := ThreadItem;
2616 // newBrowser.OnlyHundred := GikoSys.OnlyAHundredRes;
2617 newBrowser.Repaint := true;
2619 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2620 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2621 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2625 if ActiveTab then begin
2626 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2627 BrowserTab.TabIndex := 0
2629 BrowserTab.TabIndex := i;
2632 Result := newBrowser;
2633 if(ActiveTab) or (idx = -1) then begin
2634 BrowserTab.OnChange(nil);
2637 if BrowserNullTab = nil then begin
2638 BrowserNullTab := TBrowserRecord.Create;
2639 BrowserNullTab.Browser := Browser;
2641 // if BrowserNullTab.thread <> ThreadItem then begin
2642 // BrowserNullTab.Movement := '';
2644 BrowserNullTab.thread := ThreadItem;
2645 Result := BrowserNullTab;
2646 BrowserTab.TabIndex := -1;
2647 SetContent(BrowserNullTab);
2650 if GikoSys.Setting.URLDisplay then
2651 AddressComboBox.Text := ThreadItem.URL;
2655 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2663 ThreadItem: TThreadItem;
2664 Thread: TBrowserRecord;
2665 ThreadTitle, ThreadPTitle: string;
2666 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2669 idx := BrowserTab.TabIndex;
2670 if (FActiveContent <> nil) and
2671 (FActiveContent.Thread <> Thread.Thread) and
2672 (FActiveContent.Browser <> nil) and
2673 (Assigned(FActiveContent.Browser.Document)) then begin
2676 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2679 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2684 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2685 Thread.Browser.Navigate(BLANK_HTML);
2686 BrowserBoardNameLabel.Caption := '';
2687 ItemBoardImage.Picture := nil;
2688 BrowserNameLabel.Caption := '';
2689 ItemImage.Picture := nil;
2690 BrowserNullTab.Thread := nil;
2691 //TOleControl(BrowserNullTab.Browser).Visible := true;
2692 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2693 FActiveContent := nil;
2695 end else if Thread.Browser = nil then begin
2696 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2697 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2698 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2699 ReleaseOldestBrowser;
2700 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2701 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2704 ThreadTitle := Thread.Thread.Title;
2705 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2706 //ThreadScrollTop := Thread.Thread.ScrollTop;
2707 ThreadIsLog := Thread.Thread.IsLogFile;
2708 ThreadItem := Thread.Thread;
2709 ThreadNewArraical := Thread.Thread.NewArrival;
2710 //ThreadUnRead := Thread.Thread.UnRead;
2711 BBSID := ThreadItem.ParentBoard.BBSID;
2712 FileName := ThreadItem.FileName;
2714 if GetCapture = ListView.Handle then
2717 Screen.Cursor := crHourGlass;
2721 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2722 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2723 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2725 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2726 if (not Assigned(Thread.Browser.Document)) then begin
2727 Thread.Browser.Navigate('about:blank');
2729 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2730 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2731 Application.ProcessMessages;
2732 if idx <> BrowserTab.TabIndex then begin
2737 if (Thread <> nil) and (ThreadItem <>nil) then begin
2738 BrowserBoardNameLabel.Caption := ThreadPTitle;
2739 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2740 BrowserNameLabel.Caption := ThreadTitle;
2741 ItemImage.Picture := nil;
2743 if ThreadNewArraical then
2744 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2746 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2748 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2750 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2751 BrowserNameLabel.Left := ItemImage.Left + 20;
2754 //ActiveContent
\81@
\82Ì
\8dX
\90V
2755 FActiveContent := Thread;
2757 if not ThreadIsLog then begin
2758 Self.Caption := GikoDataModule.CAPTION_NAME ;
2759 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2760 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2762 Thread.Browser.BringToFront;
2763 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2764 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2766 doc.charset := 'Shift_JIS';
2773 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2774 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2775 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2776 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2777 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2778 //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«
2779 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2780 if Thread.Repaint then begin
2781 Thread.Repaint := false;
2783 Thread.Browser.OnStatusTextChange := nil;
2784 LockWindowUpdate(Thread.Browser.ParentWindow);
2785 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2786 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2787 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2791 RefreshListView(ThreadItem);
2793 Screen.Cursor := crDefault;
2797 function TGikoForm.GetActiveContent: TThreadItem;
2800 if FActiveContent <> nil then
2801 Result := FActiveContent.Thread
2810 procedure TGikoForm.SetActiveList(Obj: TObject);
2814 // if FActiveList <> Obj then begin
2817 if ListView.Selected <> nil then
2818 idx := ListView.Selected.Index
2824 ListView.Items.Count := 0;
2825 ListView.Items.Clear;
2826 ListView.Selected := nil;
2827 // ListView.Columns.Clear;
2828 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2829 and (FActiveContent.Thread.IsLogFile) then begin
2831 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2833 on E: Exception do begin
2834 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2835 //
\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é
2836 ReleaseBrowser(FActiveContent);
2837 FActiveContent.Thread := nil;
2838 Self.Caption := GikoDataModule.CAPTION_NAME;
2842 Self.Caption := GikoDataModule.CAPTION_NAME;
2843 //Application.Title := CAPTION_NAME;
2845 // ActiveListColumnSave;
2847 Screen.Cursor := crHourGlass;
2849 if Obj is TBBS then begin
2850 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2851 end else if Obj is TCategory then begin
2852 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2853 end else if Obj is TBoard then begin
2854 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2857 Screen.Cursor := crDefault;
2860 if idx >= 0 then begin
2861 if idx >= ListView.Items.Count then
2862 idx := ListView.Items.Count - 1;
2863 ListView.ItemIndex := idx;
2864 ListView.ItemFocused := ListView.Items.Item[ idx ];
2870 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2871 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2872 function TGikoForm.GetActiveList: TObject;
2874 Result := FActiveList;
2877 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2879 SetListViewType(AViewType, '', False);
2882 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2887 for i := Length( BBSs ) - 1 downto 0 do begin
2888 BBSs[i].SelectText := SelectText;
2889 BBSs[i].KubetsuChk := KubetsuChk;
2891 ViewType := AViewType;
2892 if ActiveList is TBoard then begin
2893 Board := TBoard(ActiveList);
2895 //gvtAll: ListView.Items.Count := Board.Count;
2896 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2897 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2898 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2899 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2900 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2904 SetActiveList(Board);
2908 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
2909 const ARect: TRect; var DefaultDraw: Boolean);
2915 if ListView.Items.Count = 0 then begin
2916 DefaultDraw := true;
2917 ListView.Canvas.Brush.Color := ListView.Color;
2918 ListView.Canvas.FillRect(ARect);
2922 ListView.Canvas.Font.Color := clWindowText;
2923 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2926 ListView.Canvas.Font.Color := clBlue;
2927 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';
2930 ListView.Canvas.Font.Color := clGreen;
2931 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2934 ListView.Canvas.Font.Color := clFuchsia;
2935 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';
2938 ListView.Canvas.Font.Color := clMaroon;
2939 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
2942 ListView.Canvas.Font.Color := clNavy;
2943 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';
2944 if GetActiveList is TBoard then
2945 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
2953 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
2954 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
2955 ListView.Canvas.TextOut(p.X, p.Y, s);
2957 DefaultDraw := True;
2961 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
2963 Item: TDownloadItem;
2965 if not Board.IsThreadDatRead then
2966 GikoSys.ReadSubjectFile(Board);
2967 Item := TDownloadItem.Create;
2969 Item.Board := Board;
2970 Item.DownType := gdtBoard;
2971 Item.ForceDownload := ForceDownload;
2972 FControlThread.AddItem(Item);
2973 if FWorkCount = 0 then begin
2975 Animate.Active := True;
2978 Screen.Cursor := crAppStart;
2986 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
2988 Item: TDownloadItem;
2990 Item := TDownloadItem.Create;
2992 Item.ThreadItem := ThreadItem;
2993 Item.DownType := gdtThread;
2994 Item.ForceDownload := ForceDownload;
2995 FControlThread.AddItem(Item);
2996 if FWorkCount = 0 then begin
2998 Animate.Active := True;
3001 Screen.Cursor := crAppStart;
3009 procedure TGikoForm.PlaySound(SoundEventName: string);
3013 if not GikoSys.Setting.Mute then begin
3014 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3015 if FileExists(FileName) then begin
3016 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3017 sndPlaySound(nil, SND_SYNC);
3018 Application.ProcessMessages;
3020 sndPlaySound(PChar(FileName), SND_ASYNC);
3026 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3027 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3029 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3032 procedure TGikoForm.ShowBBSTreeOld(
3040 FavoriteTreeView.Visible := False;
3041 FavoriteToolBar.Hide;
3042 TreeView.Visible := True;
3044 b := CabinetSelectPopupMenu.Items.Count - 1;
3045 for i := 0 to b do begin
3046 item := CabinetSelectPopupMenu.Items[ i ];
3047 if item is TBBSMenuItem then begin
3048 if TBBSMenuItem( item ).Data = inBBS then begin
3049 item.Checked := True;
3050 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3051 CabinetMenu.Items[ i ].Checked := True;
3052 GikoSys.Setting.CabinetIndex := i;
3056 item.Checked := False;
3057 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3058 CabinetMenu.Items[ i ].Checked := False;
3060 CabinetSelectToolButton.Caption := inBBS.Title;
3062 GikoDM.CabinetHistoryAction.Checked := False;
3063 GikoDM.CabinetFavoriteAction.Checked := False;
3065 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3066 FTreeType := gtt2ch;
3067 HistoryToolBar.Hide;
3068 FActiveBBS := inBBS;
3069 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3070 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3071 //?c???[??g?b?v?????I????
3072 if GetActiveList = nil then
3073 TreeView.Selected := TreeView.Items[0]
3075 for i := 0 to TreeView.Items.Count - 1 do begin
3076 if TreeView.Items[i].Data = GetActiveList then begin
3077 TreeView.Selected := TreeView.Items[i];
3081 TreeView.Selected := TreeView.Items[0]
3089 procedure TGikoForm.ShowBBSTree(
3098 FavoriteTreeView.Visible := False;
3099 FavoriteToolBar.Hide;
3100 TreeView.Visible := True;
3102 b := CabinetSelectPopupMenu.Items.Count - 1;
3103 for i := 0 to b do begin
3104 item := CabinetSelectPopupMenu.Items[ i ];
3105 if item is TBBSMenuItem then begin
3106 if TBBSMenuItem( item ).Data = inBBS then begin
3107 item.Checked := True;
3108 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3109 CabinetMenu.Items[ i ].Checked := True;
3110 GikoSys.Setting.CabinetIndex := i;
3114 item.Checked := False;
3115 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3116 CabinetMenu.Items[ i ].Checked := False;
3118 CabinetSelectToolButton.Caption := inBBS.Title;
3120 GikoDM.CabinetHistoryAction.Checked := False;
3121 GikoDM.CabinetFavoriteAction.Checked := False;
3123 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3124 or (not (CabinetPanel.Visible)) then begin
3125 FTreeType := gtt2ch;
3126 HistoryToolBar.Hide;
3127 FActiveBBS := inBBS;
3128 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3129 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3130 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3131 if GetActiveList = nil then begin
3133 TreeClick( TreeView.Items[0] );
3137 for i := 0 to TreeView.Items.Count - 1 do begin
3138 if TreeView.Items[i].Data = GetActiveList then begin
3139 TreeClick( TreeView.Items[i] );
3143 TreeClick( TreeView.Items[0] );
3151 procedure TGikoForm.ShowHistoryTree;
3156 if CabinetPanel.Visible then begin
3157 if FTreeType = gttHistory then begin
3158 CabinetVisible( False );
3159 GikoDM.CabinetHistoryAction.Checked := False;
3161 GikoDM.CabinetHistoryAction.Checked := True;
3164 CabinetVisible( True );
3165 GikoDM.CabinetHistoryAction.Checked := True;
3168 // BBS...BBS, History, Favorite
3169 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3171 FavoriteTreeView.Visible := False;
3172 TreeView.Visible := True;
3174 GikoDM.CabinetBBSAction.Checked := False;
3175 GikoDM.CabinetFavoriteAction.Checked := False;
3177 if FTreeType <> gttHistory then begin
3178 b := CabinetSelectPopupMenu.Items.Count - 1;
3179 for i := 0 to b do begin
3180 item := CabinetSelectPopupMenu.Items[ i ];
3181 if item is TBBSMenuItem then begin
3182 item.Checked := False;
3183 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3184 CabinetMenu.Items[ i ].Checked := False;
3188 FTreeType := gttHistory;
3189 HistoryToolBar.Show;
3190 FavoriteToolBar.Hide;
3191 FHistoryList.SetTreeNode( TreeView );
3192 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3196 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3198 ChangeEvent: TTVChangedEvent;
3199 ChangingEvent: TTVChangingEvent;
3203 if Item is TCategory then
3204 bbs := TCategory( Item ).ParenTBBS
3205 else if Item is TBoard then
3206 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3210 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3211 if Item <> FActiveList then begin
3213 ChangingEvent := nil;
3215 if not CallEvent then begin
3216 ChangeEvent := TreeView.OnChange;
3217 ChangingEvent := TreeView.OnChanging;
3220 if not CallEvent then begin
3221 TreeView.OnChange := nil;
3222 TreeView.OnChanging := nil;
3224 //Application.ProcessMessages;
3225 for i := 0 to TreeView.Items.Count - 1 do begin
3226 if TreeView.Items[i].Data = Item then begin
3227 TreeView.Items[i].Selected := True;
3229 TreeClick(TreeView.Items[i]);
3233 //Application.ProcessMessages;
3235 if not CallEvent then begin
3236 TreeView.OnChange := ChangeEvent;
3237 TreeView.OnChanging := ChangingEvent;
3242 if Item <> FActiveList then begin
3243 ActiveListColumnSave;
3244 if (Item is TBBS) or (Item is TCategory) then begin
3245 ListView.Columns.Clear;
3246 SetActiveList( Item );
3247 end else if Item is TBoard then begin
3248 if not TBoard( Item ).IsThreadDatRead then begin
3249 Screen.Cursor := crHourGlass;
3251 if not TBoard( Item ).IsThreadDatRead then
3252 GikoSys.ReadSubjectFile(TBoard( Item ));
3254 Screen.Cursor := crDefault;
3257 Sort.SetSortDate(Now());
3258 SetActiveList( Item );
3263 if Item is TBoard then begin // not TCategory
3264 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3265 if GikoSys.Setting.ListWidthState = glsMax then begin
3266 GikoDM.BrowserMinAction.Execute;
3267 if GikoForm.Visible then
3271 if GikoSys.Setting.ListHeightState = glsMax then begin
3272 GikoDM.BrowserMinAction.Execute;
3273 if GikoForm.Visible then
3280 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3281 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3283 listItem : TListItem;
3284 threadItem : TThreadItem;
3291 if not (GetActiveList is TBoard) then Exit;
3292 listItem := ListView.GetItemAt( X, Y );
3293 if listItem = nil then Exit;
3294 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3296 threadItem := TThreadItem(ListItem.Data);
3297 InsertBrowserTab(threadItem, False);
3298 if threadItem.IsLogFile then
3299 ListView.UpdateItems(listItem.Index, listItem.Index);
3303 //
\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Å
3304 if (ssDouble in Shift) then
3305 ListDoubleClick(Shift)
3313 Windows.ClientToScreen( ListView.Handle, pos );
3314 ListPopupMenu.Popup( pos.X, pos.Y );
3320 procedure TGikoForm.ListClick;
3322 ListItem: TListItem;
3323 ThreadItem: TThreadItem;
3325 if ListView.SelCount <> 1 then Exit;
3326 ListItem := ListView.Selected;
3327 if ListItem = nil then Exit;
3328 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3330 ThreadItem := TThreadItem(ListItem.Data);
3331 if ThreadItem.IsLogFile then begin
3332 InsertBrowserTab(ThreadItem);
3333 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3335 InsertBrowserTab(ThreadItem);
3338 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3339 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3340 if GikoSys.Setting.ListWidthState = glsMin then begin
3341 GikoDM.BrowserMaxAndFocusAction.Execute;
3344 if GikoSys.Setting.ListHeightState = glsMin then begin
3345 GikoDM.BrowserMaxAndFocusAction.Execute;
3351 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3353 ThreadItem: TThreadItem;
3356 shiftDown := (ssShift in Shift);
3358 if ListView.Selected = nil then Exit;
3360 if TObject(ListView.Selected.Data) is TCategory then begin
3361 SelectTreeNode(ListView.Selected.Data, True);
3362 end else if TObject(ListView.Selected.Data) is TBoard then begin
3363 SelectTreeNode(ListView.Selected.Data, True)
3364 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3365 Application.ProcessMessages;
3366 ThreadItem := TThreadItem(ListView.Selected.Data);
3367 DownloadContent(ThreadItem, shiftDown);
3369 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3370 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3371 if GikoSys.Setting.ListWidthState = glsMin then begin
3372 GikoDM.BrowserMaxAction.Execute;
3373 GikoDM.SetFocusForBrowserAction.Execute;
3376 if GikoSys.Setting.ListHeightState = glsMin then begin
3377 GikoDM.BrowserMaxAction.Execute;
3378 GikoDM.SetFocusForBrowserAction.Execute;
3385 procedure TGikoForm.BrowserMovement(const AName: string);
3387 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3388 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3389 and (FActiveContent <> nil) then begin
3390 FActiveContent.Move(AName);
3394 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3396 if TObject(Node.Data) is TBBS then begin
3397 TBBS(Node.Data).NodeExpand := False;
3398 end else if TObject(Node.Data) is TCategory then begin
3399 TCategory(Node.Data).NodeExpand := False;
3400 end else if TObject(Node.Data) is TBoard then begin
3401 TBoard(Node.Data).NodeExpand := False;
3403 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3404 TreeClick(TreeView.Selected);
3408 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3410 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3412 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3414 TreeSplitter.Visible := isVisible;
3415 CabinetPanel.Visible := isVisible;
3416 GikoDM.CabinetVisibleAction.Checked := isVisible;
3419 procedure TGikoForm.SelectListItem(List: TList);
3421 TmpListItem: TListItem;
3425 TmpListItem := ListView.Selected;
3426 while TmpListItem <> nil do begin
3427 List.Add(TmpListItem.Data);
3428 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3433 procedure TGikoForm.FormResize(Sender: TObject);
3436 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3437 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3439 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3440 if GikoSys.Setting.ListWidthState = glsMin then begin
3441 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3442 ViewPanel.Width := ThreadMainPanel.Width - 80;
3445 if GikoSys.Setting.ListHeightState = glsMin then begin
3446 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3447 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3451 FIsIgnoreResize := rtResizing;
3452 PostMessage( Handle, USER_RESIZED, 0, 0 );
3457 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3461 FTabHintIndex := -1;
3462 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3463 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3464 DeleteTab(i, BrowserTab.TabIndex);
3469 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3473 FTabHintIndex := -1;
3474 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3475 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3476 DeleteTab(i, BrowserTab.TabIndex);
3481 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3487 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3488 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3489 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3492 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3494 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3495 FActiveContent := nil;
3496 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3497 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3499 FBrowsers.Move(j, BROWSER_COUNT - 1);
3501 BrowserTab.Tabs.BeginUpdate;
3503 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3504 if ( BrowserTab.Tabs.Count - 1 = index ) and
3505 ( BrowserTab.TabRect(index).Left
3506 <= BrowserTab.DisplayRect.Left ) then begin
3507 BrowserTab.ScrollTabs(-1);
3509 BrowserTab.Tabs.Delete(index);
3510 if selectIndex > index then begin
3511 BrowserTab.TabIndex := selectIndex - 1;
3513 if BrowserTab.Tabs.Count -1 >= selectIndex then
3514 BrowserTab.TabIndex := selectIndex
3516 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3519 BrowserTab.Tabs.EndUpdate;
3521 if BrowserTab.Tabs.Count = 0 then begin
3522 BrowserNullTab.Thread := nil;
3524 if(BrowserTab.TabIndex <> -1) and
3525 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3526 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3527 ReleaseOldestBrowser;
3529 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3530 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3531 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3532 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3535 if( FActiveContent = nil) then
3536 BrowserTab.OnChange(nil);
3538 function TGikoForm.Hook(var Message: TMessage): Boolean;
3540 //
\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Ì
3541 //
\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ð
3545 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3547 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3551 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3553 bBoard, bCategory : Boolean;
3555 bBoard := (GetActiveList is TBoard);
3556 bCategory := (GetActiveList is TCategory);
3557 ItemRoundPMenu.Visible := bBoard;
3558 ItemReservPMenu.Visible := bBoard;
3559 LPMSep01.Visible := bBoard;
3560 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3561 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3562 LPMSep02.Visible := bCategory or bBoard;
3563 KidokuPMenu.Visible := bBoard;
3564 MidokuPMenu.Visible := bBoard;
3565 UrlCopyPMenu.Visible := bCategory or bBoard;
3566 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3567 AllSelectPMenu.Visible := bCategory or bBoard;
3568 LPMSep05.Visible := bCategory or bBoard;
3569 DeletePMenu.Visible := bBoard;
3570 LPMSep06.Visible := bCategory or bBoard;
3571 BoardFavoriteAddMenu.Visible := bCategory;
3572 ThreadFavoriteAddMenu.Visible := bBoard;
3573 SaveThreadFile.Visible := bBoard;
3574 AddRoundNameMenu(ItemReservPMenu);
3575 AddRoundNameMenu(ListReservPMenu);
3578 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3580 FClickNode := TreeView.Selected;
3581 if FClickNode = nil then begin
3582 TreeSelectThreadPupupMenu.Visible := False;
3583 TreeSelectBoardPupupMenu.Visible := False;
3584 TPMSep01.Visible := False;
3585 TreeSelectURLPupupMenu.Visible := False;
3586 TreeSelectNamePupupMenu.Visible := False;
3587 TreeSelectNameURLPupupMenu.Visible := False;
3588 TreeSelectFavoriteAddPupupMenu.Visible := False;
3589 TreeSelectLogDeleteSeparator.Visible := False;
3590 TreeSelectLogDeletePopupMenu.Visible := False;
3591 end else if TObject(FClickNode.Data) is TBoard then begin
3592 TreeSelectThreadPupupMenu.Visible := False;
3593 TreeSelectBoardPupupMenu.Visible := True;
3594 TPMSep01.Visible := True;
3595 TreeSelectURLPupupMenu.Visible := True;
3596 TreeSelectNamePupupMenu.Visible := True;
3597 TreeSelectNameURLPupupMenu.Visible := True;
3598 TreeSelectFavoriteAddPupupMenu.Visible := True;
3599 TreeSelectLogDeleteSeparator.Visible := False;
3600 TreeSelectLogDeletePopupMenu.Visible := False;
3601 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3602 TreeSelectThreadPupupMenu.Visible := False;
3603 TreeSelectBoardPupupMenu.Visible := True;
3604 TPMSep01.Visible := True;
3605 TreeSelectURLPupupMenu.Visible := True;
3606 TreeSelectNamePupupMenu.Visible := True;
3607 TreeSelectNameURLPupupMenu.Visible := True;
3608 TreeSelectFavoriteAddPupupMenu.Visible := True;
3609 TreeSelectLogDeleteSeparator.Visible := False;
3610 TreeSelectLogDeletePopupMenu.Visible := False;
3611 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3612 TreeSelectThreadPupupMenu.Visible := True;
3613 TreeSelectBoardPupupMenu.Visible := False;
3614 TPMSep01.Visible := True;
3615 TreeSelectURLPupupMenu.Visible := True;
3616 TreeSelectNamePupupMenu.Visible := True;
3617 TreeSelectNameURLPupupMenu.Visible := True;
3618 TreeSelectFavoriteAddPupupMenu.Visible := True;
3619 TreeSelectLogDeleteSeparator.Visible := True;
3620 TreeSelectLogDeletePopupMenu.Visible := True;
3621 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3622 TreeSelectThreadPupupMenu.Visible := True;
3623 TreeSelectBoardPupupMenu.Visible := False;
3624 TPMSep01.Visible := True;
3625 TreeSelectURLPupupMenu.Visible := True;
3626 TreeSelectNamePupupMenu.Visible := True;
3627 TreeSelectNameURLPupupMenu.Visible := True;
3628 TreeSelectFavoriteAddPupupMenu.Visible := True;
3629 TreeSelectLogDeleteSeparator.Visible := True;
3630 TreeSelectLogDeletePopupMenu.Visible := True;
3631 end else if (TObject(FClickNode.Data) is TCategory) then begin
3632 TreeSelectThreadPupupMenu.Visible := False;
3633 TreeSelectBoardPupupMenu.Visible := False;
3634 TPMSep01.Visible := False;
3635 TreeSelectURLPupupMenu.Visible := False;
3636 TreeSelectNamePupupMenu.Visible := True;
3637 TreeSelectNameURLPupupMenu.Visible := False;
3638 TreeSelectFavoriteAddPupupMenu.Visible := False;
3639 TreeSelectLogDeleteSeparator.Visible := False;
3640 TreeSelectLogDeletePopupMenu.Visible := False;
3641 end else if FClickNode.IsFirstNode then begin
3642 TreeSelectThreadPupupMenu.Visible := False;
3643 TreeSelectBoardPupupMenu.Visible := False;
3644 TPMSep01.Visible := False;
3645 TreeSelectURLPupupMenu.Visible := False;
3646 TreeSelectNamePupupMenu.Visible := True;
3647 TreeSelectNameURLPupupMenu.Visible := False;
3648 TreeSelectFavoriteAddPupupMenu.Visible := False;
3649 TreeSelectLogDeleteSeparator.Visible := False;
3650 TreeSelectLogDeletePopupMenu.Visible := False;
3652 TreeSelectThreadPupupMenu.Visible := False;
3653 TreeSelectBoardPupupMenu.Visible := False;
3654 TPMSep01.Visible := False;
3655 TreeSelectURLPupupMenu.Visible := False;
3656 TreeSelectNamePupupMenu.Visible := False;
3657 TreeSelectNameURLPupupMenu.Visible := False;
3658 TreeSelectFavoriteAddPupupMenu.Visible := False;
3659 TreeSelectLogDeleteSeparator.Visible := False;
3660 TreeSelectLogDeletePopupMenu.Visible := False;
3664 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3665 var ppDisp: IDispatch; var Cancel: WordBool);
3674 threadItem: TThreadItem;
3675 aElement : IHTMLElement;
3678 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3679 if ( aElement <> nil) then begin
3680 Text := aElement.Get_outerText;
3681 Html := aElement.Get_outerHTML;
3682 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3683 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3684 if GikoSys.Setting.ResAnchorJamp then begin
3686 Text := ZenToHan(Trim(Text));
3688 if(AnsiPos('>>', Text) = 1) then begin
3689 //Text := Copy(Text, 3, Length(Text) - 2);
3692 //Text := Copy(Text, 2, Length(Text) - 1);
3696 if AnsiPos('-', Text) <> 0 then begin
3697 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3698 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3699 wkIntTo := StrToIntDef(Text, 0);
3700 if wkIntTo < wkIntSt then
3703 wkIntSt := StrToIntDef(Text, 0);
3706 if wkIntSt <> 0 then begin
3707 FActiveContent.IDAnchorPopup('');
3708 MoveHisotryManager.pushItem(FActiveContent);
3709 BrowserMovement(IntToStr(wkIntSt));
3715 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3717 URL := GikoSys.GetHRefText(Html);
3718 URL := GikoSys.HTMLDecode(URL);
3719 if AnsiPos('BE:', URL) = 1 then begin
3720 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3721 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3722 threadItem := FActiveContent.Thread;
3723 if threadItem = nil then Exit;
3724 URL := BE_PHP_URL + BNum + '&u=d'
3725 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3728 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3729 ( AnsiPos('ftp://', URL) = 1) then begin
3730 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3731 if GikoSys.Setting.LinkAddAddressBar then begin
3732 idx := AddressComboBox.Items.IndexOf(URL);
3733 if idx = -1 then begin
3734 AddressComboBox.Items.Insert(0, URL);
3735 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3736 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3738 AddressComboBox.Items.Delete(idx);
3739 AddressComboBox.Items.Insert(0, URL);
3742 MoveHisotryManager.pushItem(FActiveContent);
3750 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3752 if Mouse.Capture <> 0 then
3754 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3755 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3756 FBrowserSizeWidth := ViewPanel.Width;
3758 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3759 FBrowserSizeHeight := ViewPanel.Height;
3761 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3762 if ViewPanel.Width < 2 then begin
3763 ViewPanel.Width := 1;
3764 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3765 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3766 GikoSys.Setting.ListWidthState := glsMax;
3767 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3768 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3769 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3770 GikoSys.Setting.ListWidthState := glsMin;
3772 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3773 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3774 GikoSys.Setting.ListWidthState := glsNormal;
3777 if ViewPanel.Height < 2 then begin
3778 ViewPanel.Height := 1;
3779 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3780 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3781 GikoSys.Setting.ListHeightState := glsMax;
3782 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3783 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3784 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3785 GikoSys.Setting.ListHeightState := glsMin;
3787 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3788 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3789 GikoSys.Setting.ListHeightState := glsNormal;
3792 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3793 FBrowserSizeHeight := ViewPanel.Height
3794 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3795 FBrowserSizeWidth := ViewPanel.Width;}
3798 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3803 BrowserTab.Tabs.BeginUpdate;
3805 if not BrowserTab.Dragging then begin
3806 FTabHintIndex := -1;
3807 BrowserTab.Hint := '';
3808 idx := BrowserTab.TabIndex;
3809 if idx = -1 then begin
3810 SetContent(BrowserNullTab);
3812 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3813 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3814 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3816 FBrowsers.Move(j ,0);
3818 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3819 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3820 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3821 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3823 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3824 ReleaseOldestBrowser;
3826 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3827 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3828 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3830 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3831 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3832 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3834 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3835 AddressComboBox.Text := GetActiveContent.URL;
3837 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3838 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3841 GikoDM.SetFocusForBrowserAction.Execute;
3845 BrowserTab.Tabs.EndUpdate;
3850 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3851 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3857 if Button = mbMiddle then begin
3858 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3861 p := BrowserTab.ScreenToClient(p);
3862 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3864 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3865 end else if Button = mbLeft then begin
3866 FDragWFirst := true;
3867 FMouseDownPos.X := X;
3868 FMouseDownPos.Y := Y;
3873 procedure TGikoForm.SetBrowserTabState;
3875 CoolBand: TCoolBand;
3877 BrowserBottomPanel.AutoSize := False;
3878 if GikoSys.Setting.BrowserTabVisible then begin
3880 BrowserTab.Tabs.BeginUpdate;
3882 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3883 BrowserTab.Style := tsTabs;
3884 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3885 BrowserTab.TabPosition := tpTop
3887 BrowserTab.TabPosition := tpBottom;
3888 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
3889 BrowserTab.TabPosition := tpTop;
3890 BrowserTab.Style := tsButtons;
3892 BrowserTab.TabPosition := tpTop;
3893 BrowserTab.Style := tsFlatButtons
3896 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
3897 BrowserTab.Parent := BrowserTabToolBar;
3898 BrowserBottomPanel.Hide;
3899 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3900 if CoolBand <> nil then
3901 CoolBand.Visible := True;
3903 BrowserTab.Parent := BrowserBottomPanel;
3904 BrowserTab.Top := 0;
3905 BrowserTab.Left := 0;
3906 BrowserBottomPanel.Show;
3907 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3908 if CoolBand <> nil then
3909 CoolBand.Visible := False;
3912 BrowserTab.Tabs.EndUpdate;
3916 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
3917 if CoolBand <> nil then
3918 CoolBand.Visible := False;
3919 BrowserBottomPanel.Visible := False;
3920 GikoDM.AllTabCloseAction.Execute;
3924 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
3925 Y: Integer; State: TDragState; var Accept: Boolean);
3929 idx := BrowserTab.IndexOfTabAt(X, Y);
3930 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
3933 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
3938 FDragWFirst := False;
3939 idx := BrowserTab.IndexOfTabAt(X, Y);
3941 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
3944 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
3945 Shift: TShiftState; X, Y: Integer);
3948 ThreadItem: TThreadItem;
3951 TabIdx := BrowserTab.IndexOfTabAt(x, y);
3953 if ( ssLeft in Shift ) then begin
3954 if (FDragWFirst) then begin
3955 BrowserTab.EndDrag(false);
3956 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
3959 BrowserTab.EndDrag(false);
3960 FDragWFirst := false;
3963 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
3964 Application.CancelHint;
3965 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
3966 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
3967 BrowserTab.Hint := ThreadItem.Title;
3968 Application.ShowHint := True;
3970 BrowserTab.Hint := '';
3971 Application.ShowHint := True;
3973 FTabHintIndex := TabIdx;
3978 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
3979 const pDisp: IDispatch; var URL: OleVariant);
3981 FDispHtmlDocument: DispHTMLDocument;
3982 BrowserRecord :TBrowserRecord;
3985 threadItem : TThreadItem;
3987 if TObject(Sender) is TWebBrowser then begin
3988 BrowserRecord := nil;
3989 if TWebBrowser(Sender) <> Browser then begin
3990 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
3991 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
3992 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
3996 if BrowserRecord <> nil then begin
3997 if BrowserRecord.Event <> nil then
3998 BrowserRecord.Event.Free;
3999 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4000 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4001 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4002 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4005 if GetActiveContent <> nil then begin
4006 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4007 if FEvent <> nil then
4009 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4010 FEvent.OnContextMenu := OnDocumentContextMenu;
4011 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4013 if FEvent <> nil then begin
4021 if (BrowserRecord <> nil) and
4022 Assigned( BrowserRecord.Thread ) then begin
4023 threadItem := BrowserRecord.Thread;
4025 if (threadItem.JumpAddress > 0) then begin
4026 if threadItem.UnRead then begin
4027 threadItem.UnRead := False;
4029 RefreshListView(threadItem);
4031 //
\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®
4032 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4033 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4034 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4035 threadItem.JumpAddress := 0;
4037 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4040 end else if threadItem.UnRead then begin
4041 threadItem.UnRead := False;
4043 BrowserRecord.Move('new');
4044 RefreshListView(threadItem);
4045 end else if threadItem.ScrollTop <> 0 then begin
4047 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4048 doc.Body.ScrollTop := threadItem.ScrollTop;
4051 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4056 LockWindowUpdate(0);
4059 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4061 AddRoundNameMenu(RoundNamePopupMenu.Items);
4064 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4070 Item := TMenuItem.Create(Self);
4071 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4072 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4074 Item := TMenuItem.Create(Self);
4075 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4076 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4078 Item := TMenuItem.Create(Self);
4079 Item.Caption := '-';
4081 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4082 Item := TMenuItem.Create(Self);
4083 Item.Caption := RoundList.RoundNameList[i];
4084 Item.OnClick := SetSelectRoundName;
4089 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4091 threadItem : TThreadItem;
4093 if ParentName <> 'dummy1' then begin
4094 SetSelectItemRound(RoundFlag, RoundName);
4096 threadItem := GetActiveContent;
4097 if threadItem <> nil then begin
4098 threadItem.RoundName := RoundName;
4100 RoundList.RoundNameList.Add(RoundName);
4101 threadItem.Round := RoundFlag;
4106 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4111 List := TList.Create;
4113 SelectListItem(List);
4114 for i := 0 to List.Count - 1 do begin
4115 if TObject(List[i]) is TBoard then begin
4116 TBoard(List[i]).RoundName := RoundName;
4118 RoundList.RoundNameList.Add(RoundName);
4119 TBoard(List[i]).Round := RoundFlag;
4120 end else if TObject(List[i]) is TThreadItem then begin
4121 if TThreadItem(List[i]).IsLogFile then begin
4122 TThreadItem(List[i]).RoundName := RoundName;
4124 RoundList.RoundNameList.Add(RoundName);
4125 TThreadItem(List[i]).Round := RoundFlag;
4134 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4136 MenuItem: TMenuItem;
4138 if Sender is TMenuItem then begin
4139 MenuItem := TMenuItem(Sender);
4140 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4145 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4150 if CoolBar = nil then
4152 for i := 0 to CoolBar.Bands.Count - 1 do begin
4153 if CoolBar.Bands[i].Control = Control then begin
4154 Result := CoolBar.Bands[i];
4160 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4162 if BrowserTab.Parent = BrowserTabToolBar then
4163 BrowserTab.Width := BrowserTabToolBar.Width;
4166 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4171 procedure TGikoForm.SetMenuFont;
4173 // GikoSys.MenuFont(MenuToolBar.Font);
4174 // MenuToolBar.Buttons[0].AutoSize := False;
4175 // MenuToolBar.Buttons[0].AutoSize := True;
4176 // MenuToolBar.Font.Color := clMenuText;
4177 GikoSys.MenuFont(MainCoolBar.Font);
4178 MenuToolBar.Buttons[0].AutoSize := False;
4179 MenuToolBar.Buttons[0].AutoSize := True;
4180 MainCoolBar.AutoSize := False;
4181 MainCoolBar.AutoSize := True;
4183 GikoSys.MenuFont(ListCoolBar.Font);
4184 GikoSys.MenuFont(BrowserCoolBar.Font);
4185 // MenuToolBar.Font.Color := clMenuText;
4188 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4192 if FavoriteDM.Modified then begin
4195 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4196 NewMenu := TMenuItem.Create(MainMenu);
4197 NewMenu.Action := GikoDM.FavoriteAddAction;
4198 FavoriteMenu.Add(NewMenu);
4199 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4200 NewMenu := TMenuItem.Create(FavoriteMenu);
4201 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4202 FavoriteMenu.Add(NewMenu);
4203 //
\83Z
\83p
\83\8c\81[
\83^
4204 FavoriteMenu.InsertNewLineAfter(NewMenu);
4205 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4206 FavoriteDM.Modified := false;
4210 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4213 NewMenu: array of TMenuItem;
4215 SetLength(NewMenu, Node.Count);
4216 Node := Node.getFirstChild;
4218 while ( Node <> nil ) do begin
4219 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4220 NewMenu[i].AutoHotkeys := maAutomatic;
4221 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4222 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4224 if TObject(Node.Data) is TFavoriteFolder then begin
4225 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4226 CreateFavMenu(Node, NewMenu[i]);
4227 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4228 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4229 NewMenu[i].OnClick := FavoriteClick;
4230 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4231 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4232 NewMenu[i].OnClick := FavoriteClick;
4235 Node := Node.getNextSibling;
4237 MenuItem.Add(NewMenu);
4240 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4242 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';
4243 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4245 Dlg : TFavoriteAddDialog;
4251 if Item is TFavoriteBoardItem then
4252 Item := TFavoriteBoardItem( Item ).Item
4253 else if Item is TFavoriteThreadItem then
4254 Item := TFavoriteThreadItem( Item ).Item;
4256 Node := FavoriteTreeView.Items.GetFirstNode;
4257 if Item is TBoard then begin
4258 ItemURL := TBoard( Item ).URL;
4259 while Node <> nil do begin
4261 if TObject( Data ) is TFavoriteBoardItem then begin
4262 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4263 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4268 Node := Node.GetNext;
4270 Dlg := TFavoriteAddDialog.Create(Self);
4272 Dlg.SetBoard( TBoard( Item ) );
4277 end else if Item is TThreadItem then begin
4278 ItemURL := TThreadItem( Item ).URL;
4279 while Node <> nil do begin
4281 if TObject( Data ) is TFavoriteThreadItem then begin
4282 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4283 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4288 Node := Node.GetNext;
4290 Dlg := TFavoriteAddDialog.Create(Self);
4292 Dlg.SetThreadItem( TThreadItem( Item ) );
4302 procedure TGikoForm.FavoriteClick(Sender: TObject);
4304 FavoriteClick( Sender, True );
4307 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4310 ThreadItem: TThreadItem;
4311 FavBoard: TFavoriteBoardItem;
4312 FavThread: TFavoriteThreadItem;
4316 if Sender is TFavoriteMenuItem then
4317 Item := TFavoriteMenuItem(Sender).Data
4318 else if Sender is TLinkToolButton then
4319 Item := TLinkToolButton(Sender).Data
4320 else if Sender is TTreeNode then
4321 Item := TTreeNode( Sender ).Data
4325 if TObject(Item) is TFavoriteBoardItem then begin
4326 FavBoard := TFavoriteBoardItem(Item);
4327 Board := FavBoard.Item;
4328 if Board <> nil then begin
4329 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4330 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4331 SelectTreeNode(Board, True);
4333 end else if TObject(Item) is TFavoriteThreadItem then begin
4334 FavThread := TFavoriteThreadItem(Item);
4335 ThreadItem := FavThread.Item;
4336 if ThreadItem = nil then
4339 InsertBrowserTab(ThreadItem, ActiveTab);
4341 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4342 if GikoSys.Setting.ListWidthState = glsMin then begin
4343 GikoDM.BrowserMaxAndFocusAction.Execute;
4346 if GikoSys.Setting.ListHeightState = glsMin then begin
4347 GikoDM.BrowserMaxAndFocusAction.Execute;
4353 procedure TGikoForm.BBSMenuItemOnClick(
4358 if Sender is TBBSMenuItem then
4359 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4363 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4365 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4368 //!
\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é)
4369 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4371 stRes, edRes : Int64;
4372 browserRec : TBrowserRecord;
4373 threadNumber : String;
4378 Thread.JumpAddress := 0;
4379 //
\83^
\83u
\82ð
\90¶
\90¬
4380 browserRec := InsertBrowserTab(Thread);
4381 if (browserRec <> nil) then begin
4382 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4383 threadNumber := ChangeFileExt(Thread.FileName, '');
4384 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4385 //
\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
4386 if (StrToInt64(threadNumber) = stRes) then begin
4387 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4388 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4392 if ( stRes > 0 ) then begin
4393 Thread.JumpAddress := stRes;
4395 //
\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é
4396 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4397 DownloadContent(Thread);
4398 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4399 browserRec.Move(IntToStr(stRes));
4400 Thread.JumpAddress := 0;
4402 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4403 Thread.ScrollTop := doc.Body.ScrollTop;
4410 procedure TGikoForm.MoveToURL(const inURL: string);
4412 protocol, host, path, document, port, bookmark : string;
4413 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4415 BBSID, BBSKey: string;
4416 {tmpBoard,} Board: TBoard;
4417 ThreadItem: TThreadItem;
4420 tmpThread : TThreadItem;
4421 shiftDown : Boolean;
4425 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4426 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4429 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4430 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4431 if shiftDown then begin
4432 GikoSys.OpenBrowser(inURL, gbtUserApp);
4434 end else if ctrlDown then begin
4435 GikoSys.OpenBrowser(inURL, gbtIE);
4439 //=====
\83v
\83\89\83O
\83C
\83\93
4442 bi := Length(BoardGroups) - 1;
4443 for i := 1 to bi do begin
4444 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4445 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4448 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4449 Board := BBSsFindBoardFromURL( boardURL );
4452 if Board = nil then begin
4454 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4455 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4458 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4459 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4460 ShowBBSTree( BBSs[ 1 ] );
4463 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4464 if not Board.IsThreadDatRead then begin
4465 GikoSys.ReadSubjectFile( Board );
4469 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4470 if ThreadItem = nil then begin
4471 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4472 ThreadItem := tmpThread;
4473 Board.Insert( 0, ThreadItem );
4474 if ActiveList is TBoard then begin
4475 if TBoard(ActiveList) = Board then
4476 ListView.Items.Count := ListView.Items.Count + 1;
4481 OpenThreadItem(ThreadItem, inURL);
4488 Board := BBSsFindBoardFromURL(
4489 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4491 if Board <> nil then begin
4492 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4493 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4494 SelectTreeNode( Board, True );
4502 // 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¢
4506 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4507 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4508 Board := BBSsFindBoardFromURL( boardURL );
4509 if Board = nil then begin
4510 //
\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
4511 GikoSys.OpenBrowser(inURL, gbtUserApp);
4514 //
\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é
4516 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4517 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4518 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4519 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4520 GikoSys.OpenBrowser(inURL, gbtUserApp);
4525 if not Board.IsThreadDatRead then
4526 GikoSys.ReadSubjectFile(Board);
4527 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4528 ThreadItem := Board.FindThreadFromURL( URL );
4529 //
\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)
4530 if ThreadItem = nil then begin
4531 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4534 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4535 if ThreadItem = nil then begin
4536 ThreadItem := TThreadItem.Create( nil, Board, URL );
4537 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4538 Board.Insert(0, ThreadItem);
4539 if ActiveList is TBoard then begin
4540 if TBoard(ActiveList) = Board then
4541 ListView.Items.Count := ListView.Items.Count + 1;
4544 //
\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é
4545 if (not ThreadItem.IsLogFile) then begin
4546 if AnsiPos(Host, Board.URL) = 0 then
4547 ThreadItem.DownloadHost := Host
4549 ThreadItem.DownloadHost := '';
4551 OpenThreadItem(ThreadItem, inURL);
4555 Board := BBSsFindBoardFromURL( inURL );
4556 if Board = nil then begin
4557 GikoSys.OpenBrowser(inURL, gbtAuto);
4559 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4560 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4561 SelectTreeNode( Board, True );
4566 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4568 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4569 CoolBarResized( Sender, MainCoolBar );
4572 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4573 Shift: TShiftState);
4575 if Key = VK_RETURN then
4576 GikoDM.MoveToAction.Execute;
4579 procedure TGikoForm.BrowserEnter(Sender: TObject);
4581 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4584 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4586 CDS:PCopyDataStruct;
4590 CDS := Message.CopyDataStruct;
4591 GetMem(PC, CDS^.cbData);
4593 lstrcpy(PC,CDS^.lpData);
4594 SetString(sURL, PC,lstrlen(PC));
4599 Message.Result := 1;
4602 procedure TGikoForm.WndProc(var Message: TMessage);
4604 senderBrowser : TWebBrowser;
4610 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4613 if Message.WParam = SC_MINIMIZE then begin
4615 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4618 TreeClick( TreeView.Selected );
4623 if (GikoSys.Setting.StoredTaskTray) then begin
4630 USER_DOCUMENTCOMPLETE:
4631 if (Message.WParam <> 0) and
4632 (TObject(Message.WParam) is TWebBrowser) then begin
4633 senderBrowser := TWebBrowser( Message.WParam );
4634 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4643 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4648 //
\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Í
4649 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4650 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4651 if Msg.CharCode in [VK_BACK] then begin
4652 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4653 if Msg.KeyData > 0 then begin
4656 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4660 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4661 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4664 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4667 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4668 if Msg.CharCode in [VK_BACK] then begin
4669 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4670 if Msg.KeyData > 0 then begin
4673 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4676 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4679 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4683 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4687 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4692 PreviewTimer.Enabled := False;
4696 ARect := FPreviewBrowser.GetWindowRect(p);
4698 FPreviewBrowser.PreviewImage(FPreviewURL);
4700 if ARect.Bottom > Screen.DesktopHeight then begin
4701 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4703 if (ARect.Right > Screen.DesktopWidth) then begin
4704 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4706 if (ARect.Left < Screen.DesktopLeft) then begin
4707 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4709 if (ARect.Top < Screen.DesktopTop) then begin
4710 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4713 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4714 ARect.Left, ARect.Top,
4715 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4716 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4718 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4719 FPreviewBrowserRect := ARect;
4722 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4727 if PreviewTimer.Enabled then
4728 PreviewTimer.Enabled := False;
4729 if (FHint <> nil) and (IsWindowVisible(FHint.Handle)) then begin
4730 FHint.ReleaseHandle;
4734 if (FPreviewBrowser <> nil)
4735 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4736 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4737 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4738 Pos := Mouse.CursorPos;
4739 Pos.X := Pos.X + Left;
4740 Pos.Y := Pos.Y + Top;
4741 if (FPreviewBrowserRect.Left > Pos.X) or
4742 (FPreviewBrowserRect.Right < Pos.X) or
4743 (FPreviewBrowserRect.Top > Pos.Y) or
4744 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4745 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4749 Message.Result := 1;
4752 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4754 GikoDM.MsgBarCloseAction.Execute;
4757 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4759 Doc: IHtmlDocument2;
4760 Range: IHTMLTxtRange;
4763 ThreadItem: TThreadItem;
4766 FactiveContent.IDAnchorPopup('');
4767 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4768 if Assigned(Doc) then begin
4769 Range := Doc.selection.createRange as IHTMLTxtRange;
4770 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4771 s := ZenToHan(Trim(s));
4772 if GikoSys.IsNumeric(s) then begin
4774 ThreadItem := GetActiveContent;
4775 if ThreadItem <> nil then begin
4776 Num := StrToInt64(s);
4777 FHint.PopupType := gptThread;
4778 HTMLCreater.SetResPopupText(FHint, ThreadItem, Num, Num, False, False);
4779 if FHint.ResCount <> 0 then
4790 procedure TGikoForm.ShowTextPopup;
4795 // if Trim(s) = '' then
4798 FHint.Font.Name := GikoSys.Setting.HintFontName;
4799 FHint.Font.Size := GikoSys.Setting.HintFontSize;
4800 FHint.Font.Color := GikoSys.Setting.HintFontColor;
4801 FHint.Color := GikoSys.Setting.HintBackColor;
4802 FHint.HeaderBold := GikoSys.Setting.ResPopupHeaderBold;
4804 if FHint.PopupType = gptRaw then
4805 ARect := FHint.CalcHintRect(Screen.Width, FHint.Caption, nil)
4807 ARect := FHint.CalcHintRect(Screen.Width, '', nil);
4808 case GikoSys.Setting.PopupPosition of
4809 gppRightTop: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4810 gppRight: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4811 gppRightBottom: OffsetRect(ARect, p.x - (ARect.Right - ARect.Left) - 15, p.y + 15);
4812 gppTop: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - (ARect.Bottom - ARect.Top) - 15);
4813 gppCenter: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y - ((ARect.Bottom - ARect.Top) div 2));
4814 gppBottom: OffsetRect(ARect, p.x - ((ARect.Right - ARect.Left) div 2), p.y + 15);
4815 gppLeftTop: OffsetRect(ARect, p.x + 15, p.y - (ARect.Bottom - ARect.Top) - 15);
4816 gppLeft: OffsetRect(ARect, p.x + 15, p.y - ((ARect.Bottom - ARect.Top) div 2));
4817 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Ó
4819 //FHint.ActivateHint(ARect, s);
4820 if FHint.PopupType = gptRaw then
4821 FHint.ActivateHint(ARect, FHint.Caption)
4823 FHint.ActivateHint(ARect, '');
4825 FHint.ReleaseHandle;
4830 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4832 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4833 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4835 if FTreeType = gttHistory then begin
4836 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4837 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4840 TreeView.Items.Clear;
4844 procedure TGikoForm.SetLinkBar;
4848 ToolButton: TLinkToolButton;
4849 MenuItem: TMenuItem;
4850 oldIgnoreResize : TResizeType;
4852 oldIgnoreResize := FIsIgnoreResize;
4853 FIsIgnoreResize := rtResizing;
4854 MainCoolBar.Bands.BeginUpdate;
4856 LinkBarPopupMenu.Items.Clear;
4857 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4858 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4859 LinkToolBar.Buttons[i].Free;
4860 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4861 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4862 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4863 ToolButton := TLinkToolButton.Create(LinkToolBar);
4864 // ToolButton.Parent := LinkToolBar;
4865 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4866 MenuItem := TMenuItem.Create(Self);
4867 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4868 LinkBarPopupMenu.Items.Add(MenuItem);
4869 ToolButton.MenuItem := MenuItem;
4870 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4871 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4872 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4873 ToolButton.OnClick := FavoriteClick;
4874 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4875 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4876 ToolButton.OnClick := FavoriteClick;
4878 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4879 ToolButton.Left := 10000;
4880 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4881 ToolButton.AutoSize := True;
4882 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4883 ToolButton.OnDragOver := FavoriteDragOver;
4884 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4885 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4886 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4887 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4888 //ToolButton.DragMode := dmAutomatic;
4889 ToolButton.DragMode := dmManual;
4890 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4892 LinkToolBar.InsertControl(ToolButton);
4897 { if LinkToolBar.ButtonCount = 0 then begin
4898 ToolButton := TLinkToolButton.Create(LinkToolBar);
4899 ToolButton.Style := tbsButton;
4900 ToolButton.ImageIndex := -1;
4901 ToolButton.Caption := '';
4902 LinkToolBar.InsertControl(ToolButton);
4905 MainCoolBar.Bands.EndUpdate;
4906 LoadCoolBarSettings;
4907 FIsIgnoreResize := oldIgnoreResize;
4911 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4919 if Sender = FavoriteTreeView then begin
4920 Node := FavoriteTreeView.GetNodeAt(X, Y);
4925 bound := Node.DisplayRect( False );
4926 height := bound.Bottom - bound.Top;
4927 if (bound.Top + height / 2) <= Y then
4928 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
4933 if Node.IsFirstNode then
4938 if FDropSpaceNode <> nil then
4939 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
4942 if Change then begin
4943 if FDropSpaceNode <> nil then
4944 FDropSpaceNode.Free;
4946 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
4947 FDropSpaceNode.MoveTo( Node, naInsert );
4948 FDropSpaceNode.ImageIndex := -1;
4949 FDropSpaceNode.SelectedIndex := -1;
4953 if Source = FavoriteTreeView then begin
4954 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
4959 end else if Source = BrowserTab then
4961 else if Source = ListView then
4963 else if Source is TLinkToolButton then
4965 else if Source = TreeView then
4971 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4974 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
4977 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
4979 // FDragging := true;
4982 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
4984 SenderNode: TTreeNode;
4985 LinkToolButton: TLinkToolButton;
4988 LinkToolButton := TLinkToolButton( Sender );
4989 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
4990 SenderNode.Selected := False;
4991 FavoriteDragDrop( SenderNode, Source );
4997 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4999 favButton : TLinkToolButton;
5000 favThreadItem : TFavoriteThreadItem;
5006 if Sender is TLinkToolButton then begin
5007 favButton := TLinkToolButton( Sender );
5008 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5009 favThreadItem := TFavoriteThreadItem( favButton.Data );
5010 if favThreadItem.Item <> nil then
5011 InsertBrowserTab( favThreadItem.Item, False );
5019 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5023 TToolButton( Sender ).DragMode := dmManual;
5024 if ssLeft in Shift then begin
5025 // 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)
5026 if FDragTime = 0 then begin
5027 FDragTime := GetTickCount();
5029 Now := GetTickCount();
5030 if (Now - FDragTime) > 500 then begin
5031 if FDragButton <> TToolButton( Sender ) then begin
5033 FDragButton := TToolButton( Sender );
5034 TToolButton(Sender).BeginDrag(false ,5);
5037 {$IF Defined(debug)}
5038 ShowMessage('Error');
5049 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5054 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5059 for i := 0 to ToolBar.ButtonCount - 1 do
5060 if ToolBar.Buttons[i].Visible then
5061 Result := Result + ToolBar.Buttons[i].Width;
5064 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5066 Control : TWinControl;
5069 Control := FindControl(BandInfo^.hwndChild);
5070 if Control = nil then
5073 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5074 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5075 idx := MainCoolBar.Bands[ i ].ID;
5079 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5080 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5081 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5082 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5083 BandInfo^.cxMinChild := 0;
5084 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5085 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5086 end else if Control = LinkToolBar then begin
5087 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5088 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5089 BandInfo^.cxMinChild := 0;
5090 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5091 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5092 end else begin // AddressToolBar
5093 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5094 BandInfo^.cxMinChild := 0;
5095 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5099 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5105 ChevronPopupMenu.Items.Clear;
5107 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5108 if MainCoolBar.Bands[ i ].Visible then begin
5109 if Idx = Int64(RebarChevron^.uBand) then begin
5116 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5117 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5119 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5120 ToolBarChevronMenu(StdToolBar);
5121 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5125 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5126 ChevronPopupMenu.Popup(p.x, p.y);
5130 procedure TGikoForm.MenuBarChevronMenu;
5131 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5137 for i := 0 to MenuItem.Count - 1 do begin
5139 if MenuItem[i] is TFavoriteMenuItem then begin
5140 Item := TFavoriteMenuItem.Create(Self);
5141 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5143 Item := TMenuItem.Create(Self);
5144 Item.Caption := MenuItem[i].Caption;
5145 Item.Action := MenuItem[i].Action;
5146 Item.ImageIndex := MenuItem[i].ImageIndex;
5147 Item.OnClick := MenuItem[i].OnClick;
5148 PopupItem.Add(Item);
5149 if MenuItem[i].Count > 0 then
5150 SetSubMenu(MenuItem[i], Item);
5159 ChevronPopupMenu.Items.Clear;
5160 ChevronPopupMenu.Images := MainMenu.Images;
5161 bw := GetWidthAllToolButton(MenuToolBar);
5162 if MenuToolBar.Width < bw then begin
5164 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5165 w := w + MenuToolBar.Buttons[i].Width;
5166 if MenuToolBar.Width <= w then begin
5167 Item := TMenuItem.Create(Self);
5168 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5169 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5170 ChevronPopupMenu.Items.Add(Item);
5171 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5177 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5178 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5183 if Assigned(PopupMenu.OnPopup) then
5184 PopupMenu.OnPopup(nil);
5185 for i := 0 to PopupMenu.Items.Count - 1 do begin
5187 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5188 Item := TFavoriteMenuItem.Create(Self);
5189 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5191 Item := TMenuItem.Create(Self);
5192 Item.Caption := PopupMenu.Items[i].Caption;
5193 Item.Action := PopupMenu.Items[i].Action;
5194 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5195 Item.OnClick := PopupMenu.Items[i].OnClick;
5196 PopupItem.Add(Item);
5205 ChevronPopupMenu.Items.Clear;
5206 ChevronPopupMenu.Images := ToolBar.HotImages;
5207 bw := GetWidthAllToolButton(ToolBar);
5208 if ToolBar.Width < bw then begin
5210 for i := 0 to ToolBar.ButtonCount - 1 do begin
5211 if ToolBar.Buttons[i].Visible then
5212 w := w + ToolBar.Buttons[i].Width;
5213 if ToolBar.Width <= w then begin
5214 if ToolBar.Buttons[i].Tag = 0 then begin
5215 Item := TMenuItem.Create(Self);
5216 if ToolBar.Buttons[i].Style = tbsSeparator then
5219 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5220 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5223 Item.Caption := ToolBar.Buttons[i].Caption;
5224 Item.Action := ToolBar.Buttons[i].Action;
5226 //Item.Visible := True;
5228 ChevronPopupMenu.Items.Add(Item);
5229 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5231 Item.OnClick := nil;
5232 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5240 procedure TGikoForm.LinkBarChevronMenu;
5245 Item: TFavoriteMenuItem;
5247 Button: TLinkToolButton;
5249 ChevronPopupMenu.Items.Clear;
5250 ChevronPopupMenu.Images := LinkToolBar.Images;
5251 bw := GetWidthAllToolButton(LinkToolBar);
5252 if LinkToolBar.Width < bw then begin
5254 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5255 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5256 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5257 w := w + LinkToolBar.Buttons[j].Width;
5258 if LinkToolBar.Width <= w then begin
5259 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5260 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5261 Item := TFavoriteMenuItem.Create(Self);
5262 if TObject(Button.Data) is TFavoriteFolder then begin
5263 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5264 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5265 Item.OnClick := FavoriteClick;
5266 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5267 Item.OnClick := FavoriteClick;
5269 Item.Data := Button.Data;
5270 Item.Caption := LinkToolBar.Buttons[j].Caption;
5271 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5272 ChevronPopupMenu.Items.Add(Item);
5283 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5284 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5285 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5287 \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É
5288 \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
5290 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5292 bandInfo : tagREBARBANDINFOA;
5293 pBandInfo : PReBarBandInfoA;
5300 pBandInfo := @bandInfo;
5301 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5302 bandInfo.cbSize := sizeof( bandInfo );
5303 bandInfo.hwndChild := h;
5304 bandInfo.cyMinChild := bar.Height;
5305 bar.OnBandInfo( nil, pBandInfo );
5306 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5308 for i := bar.Bands.Count - 1 downto 0 do begin
5309 if bar.Bands[ i ].Control.Handle = h then begin
5315 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5319 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5321 Control: TWinControl;
5324 Control := FindControl(BandInfo^.hwndChild);
5325 if Control = nil then
5328 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5329 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5330 idx := ListCoolBar.Bands[ i ].ID;
5334 if Control = ListToolBar then begin
5335 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5336 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5337 BandInfo^.cxMinChild := 0;
5338 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5339 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5341 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5342 BandInfo^.cxMinChild := 0;
5343 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5347 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5352 ChevronPopupMenu.Items.Clear;
5353 Idx := RebarChevron^.uBand;
5354 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5355 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5356 ToolBarChevronMenu(ListToolBar);
5359 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5360 ChevronPopupMenu.Popup(p.x, p.y);
5364 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5366 Control: TWinControl;
5369 Control := FindControl(BandInfo^.hwndChild);
5370 if Control = nil then
5373 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5374 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5375 idx := BrowserCoolBar.Bands[ i ].ID;
5379 if Control = BrowserToolBar then begin
5380 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5381 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5382 BandInfo^.cxMinChild := 0;
5383 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5384 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5386 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5387 BandInfo^.cxMinChild := 0;
5388 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5392 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5397 ChevronPopupMenu.Items.Clear;
5398 Idx := RebarChevron^.uBand;
5399 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5400 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5401 ToolBarChevronMenu(BrowserToolBar)
5404 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5405 ChevronPopupMenu.Popup(p.x, p.y);
5409 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5411 if Column^.iImage = -1 then begin
5412 Column^.mask := Column^.mask or LVCF_FMT;
5414 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5415 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5419 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5424 for i := bar.ButtonCount - 1 downto 0 do begin
5425 if bar.Buttons[ i ].Action = action then begin
5426 Result := bar.Buttons[ i ];
5432 procedure TGikoForm.SetToolBarPopup;
5435 aIEButton : TToolButton;
5436 aCabinetBBSButton : TToolButton;
5437 aResRangeButton : TToolButton;
5438 aThreadRangeButton: TToolButton;
5440 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5442 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5443 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5444 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5445 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5446 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5448 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5449 if aIEButton <> nil then
5450 aIEButton.DropdownMenu := BrowserPopupMenu;
5451 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5452 if aCabinetBBSButton <> nil then
5453 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5454 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5455 if aResRangeButton <> nil then
5456 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5457 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5458 if aThreadRangeButton <> nil then
5459 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5462 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5463 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5467 // browserPos : TPoint;
5471 Wnd := WindowFromPoint(Mouse.CursorPos);
5473 if WheelDelta > 0 then
5478 if (Wnd = BrowserTab.Handle) or
5479 (Wnd = BrowserTab.Parent.Handle) then begin
5480 BrowserTab.ScrollTabs(Delta);
5482 if FIsHandledWheel then begin
5483 FIsHandledWheel := False;
5486 FIsHandledWheel := True;
5487 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5488 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5490 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5498 procedure TGikoForm.SetSelectWord( const text : string );
5500 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5501 ClearThreadRengeAction;
5503 if Length( text ) = 0 then
5505 GikoDM.AllItemAction.Checked := True;
5506 SetListViewType( gvtAll )
5508 SetListViewType( gvtUser, text, false );
5512 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5515 SetSelectWord( SelectComboBox.Text );
5519 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5520 Shift: TShiftState);
5528 if Key = VK_Return then
5531 end else if Key = 229 then begin
5532 if GikoSys.Setting.UseUndecided then begin
5533 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5534 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5535 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5536 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5537 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5538 SetLength(Str, Len);
5539 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5540 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5541 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5543 Str := SelectComboBox.Text + Str;
5545 if (Length(Str) > 0) then begin
5549 end else if Length( SelectComboBox.Text ) = 0 then
5551 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5552 *
\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
5553 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5556 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5557 ClearThreadRengeAction;
5561 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5562 procedure TGikoForm.ClearThreadRengeAction;
5564 //
\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é
5565 if GikoDM.AllItemAction.Checked then
5566 GikoDM.AllItemAction.Checked := False;
5567 if GikoDM.LogItemAction.Checked then
5568 GikoDM.LogItemAction.Checked := False;
5569 if GikoDM.NewItemAction.Checked then
5570 GikoDM.NewItemaction.Checked := False;
5571 if GikoDM.LiveItemAction.Checked then
5572 GikoDM.LiveItemAction.Checked := False;
5573 if GikoDM.ArchiveItemAction.Checked then
5574 GikoDM.ArchiveItemAction.Checked := False;
5578 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5583 if Length( SelectComboBox.Text ) = 0 then
5585 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5586 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5591 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5592 procedure TGikoForm.ModifySelectList;
5599 if not SelectComboBoxPanel.Visible then
5602 if Length( SelectComboBox.Text ) > 0 then
5604 oldText := SelectComboBox.Text;
5605 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5607 GikoSys.Setting.SelectTextList.Delete( idx );
5608 idx := SelectComboBox.Items.IndexOf( oldText );
5610 SelectComboBox.Items.Delete( idx );
5611 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5612 SelectComboBox.Items.Insert( 0, oldText );
5613 SelectComboBox.Text := oldText;
5621 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5622 Shift: TShiftState; X, Y: Integer);
5627 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5630 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5631 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5632 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5634 If w <= 50 Then Begin
5635 //
\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
5636 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5637 pos.X := pos.X + (50 - w);
5639 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5643 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5644 //If SelectComboBox.Width <> w Then Begin
5645 If SelectComboBoxPanel.Width <> w Then Begin
5646 SelectComboBoxPanel.Width := w;
5647 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5648 GikoSys.Setting.SelectComboBoxWidth := w;
5649 DraggingSelectComboBoxPosition := pos;
5651 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5652 ResetBandInfo( ListCoolBar, ListToolBar );
5658 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5659 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5663 IsDraggingSelectComboBox := True;
5666 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5670 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5671 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5673 IsDraggingSelectComboBox := False;
5677 procedure TGikoForm.StatusBarResize(Sender: TObject);
5679 StatusBar.Panels[1].Width := StatusBar.Width -
5680 StatusBar.Panels[0].Width -
5681 StatusBar.Panels[THREADSIZE_PANEL].Width -
5682 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5684 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5687 if (Length( SelectComboBox.Text ) = 0) or
5688 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5690 SelectComboBox.Text := '';
5691 SelectComboBox.Color := clWindow;
5696 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5699 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5702 if TObject(SenderNode.Data) is TFavoriteFolder then
5703 SourceNode.MoveTo(SenderNode, naAddChild)
5705 SourceNode.MoveTo(SenderNode, naInsert);
5709 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5713 FavoBoardItem: TFavoriteBoardItem;
5714 FavoThreadItem: TFavoriteThreadItem;
5716 ThreadItem: TThreadItem;
5719 if (SenderNode = nil) or (Source = nil) then
5722 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5723 FavNode := SenderNode.Parent
5725 FavNode := SenderNode;
5729 if Source is TBoard then begin
5730 Board := TBoard( Source );
5731 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5732 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5733 Node.ImageIndex := 15;
5734 Node.SelectedIndex := 15;
5735 end else if Source is TFavoriteBoardItem then begin
5736 FavoBoardItem := TFavoriteBoardItem( Source );
5737 Board := FavoBoardItem.Item;
5738 if Board <> nil then
5739 if not Board.IsThreadDatRead then
5740 GikoSys.ReadSubjectFile(Board);
5741 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5742 Node.ImageIndex := 15;
5743 Node.SelectedIndex := 15;
5744 end else if Source is TThreadItem then begin
5745 ThreadItem := TThreadItem( Source );
5746 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5747 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5748 Node.ImageIndex := 16;
5749 Node.SelectedIndex := 16;
5750 end else if Source is TBrowserRecord then begin
5751 ThreadItem := TBrowserRecord( Source ).Thread;
5752 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5753 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5754 Node.ImageIndex := 16;
5755 Node.SelectedIndex := 16;
5756 end else if Source is TFavoriteThreadItem then begin
5757 FavoThreadItem := TFavoriteThreadItem( Source );
5758 ThreadItem := FavoThreadItem.Item;
5759 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5760 Node.ImageIndex := 16;
5761 Node.SelectedIndex := 16;
5764 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5766 FavoriteMoveTo( SenderNode, Node );
5770 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5773 SourceNode: TTreeNode;
5774 LinkToolButton: TLinkToolButton;
5777 if SenderNode = nil then
5780 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5781 if FDropSpaceNode <> nil then
5782 SenderNode := FDropSpaceNode;
5784 if Source = FavoriteTreeView then begin
5785 SourceNode := FavoriteTreeView.Selected;
5786 FavoriteMoveTo( SenderNode, SourceNode );
5787 end else if Source is TLinkToolButton then begin
5788 LinkToolButton := TLinkToolButton( Source );
5789 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5790 FavoriteMoveTo( SenderNode, SourceNode );
5791 end else if Source = BrowserTab then begin
5792 idx := BrowserTab.TabIndex;
5793 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5794 end else if Source = ListView then begin
5795 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5796 end else if Source = TreeView then begin
5797 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5801 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5804 SenderNode: TTreeNode;
5807 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5808 if SenderNode <> nil then begin
5809 FavoriteDragDrop( SenderNode, Source );
5812 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5813 if FDropSpaceNode <> nil then begin
5815 FDropSpaceNode.Delete;
5817 FDropSpaceNode := nil;
5820 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5821 FavoriteDM.Modified := true;
5827 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5828 Node: TTreeNode; var S: String);
5830 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5831 FavoriteDM.Modified := true;
5833 FavoriteTreeView.ReadOnly := True;
5838 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5839 Shift: TShiftState);
5841 if not TTreeView(Sender).IsEditing then begin
5845 FClickNode := FavoriteTreeView.Selected;
5846 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5850 FClickNode := FavoriteTreeView.Selected;
5851 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5855 FavoriteClick( FavoriteTreeView.Selected );
5856 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5860 FClickNode := FavoriteTreeView.Selected;
5861 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5865 //
\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·
5866 if Key = VK_ESCAPE then begin
5867 if (TTreeView(Sender).Selected <> nil) then begin
5868 TTreeView(Sender).Selected.Text := FOrigenCaption;
5870 TTreeView(Sender).Selected.Focused := False;
5876 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5879 LinkToolButton: TLinkToolButton;
5882 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5884 FClickNode := FavoriteTreeView.Selected;
5886 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5888 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5889 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5890 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5891 FClickNode := FavoriteTreeView.Items[i];
5895 for i := 0 to FClickNode.Count - 1 do begin
5896 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5897 FClickNode := FClickNode.Item[i];
5904 if FClickNode = nil then begin
5905 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5906 FavoriteTreeDeletePopupMenu.Visible := False;
5907 FavoriteTreeRenamePopupMenu.Visible := False;
5908 FavoriteTreeNewFolderPopupMenu.Visible := False;
5909 FavoriteTreeURLCopyPopupMenu.Visible := False;
5910 FavoriteTreeNameCopyPopupMenu.Visible := False;
5911 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5912 FavoriteTreeReloadPopupMenu.Visible := False;
5913 FavoriteTreeLogDeletePopupMenu.Visible := False;
5914 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5915 end else if FClickNode.IsFirstNode then begin
5916 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5917 FavoriteTreeDeletePopupMenu.Visible := False;
5918 FavoriteTreeRenamePopupMenu.Visible := False;
5919 FavoriteTreeNewFolderPopupMenu.Visible := True;
5920 FavoriteTreeURLCopyPopupMenu.Visible := False;
5921 FavoriteTreeNameCopyPopupMenu.Visible := False;
5922 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5923 FavoriteTreeReloadPopupMenu.Visible := False;
5924 FavoriteTreeLogDeletePopupMenu.Visible := False;
5925 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5926 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
5927 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5928 FavoriteTreeDeletePopupMenu.Visible := True;
5929 FavoriteTreeRenamePopupMenu.Visible := False;
5930 FavoriteTreeNewFolderPopupMenu.Visible := True;
5931 FavoriteTreeURLCopyPopupMenu.Visible := False;
5932 FavoriteTreeNameCopyPopupMenu.Visible := False;
5933 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5934 FavoriteTreeReloadPopupMenu.Visible := False;
5935 FavoriteTreeLogDeletePopupMenu.Visible := False;
5936 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5937 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
5938 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5939 FavoriteTreeDeletePopupMenu.Visible := True;
5940 FavoriteTreeRenamePopupMenu.Visible := True;
5941 FavoriteTreeNewFolderPopupMenu.Visible := True;
5942 FavoriteTreeURLCopyPopupMenu.Visible := False;
5943 FavoriteTreeNameCopyPopupMenu.Visible := True;
5944 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5945 FavoriteTreeReloadPopupMenu.Visible := False;
5946 FavoriteTreeLogDeletePopupMenu.Visible := False;
5947 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5948 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
5949 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5950 FavoriteTreeDeletePopupMenu.Visible := True;
5951 FavoriteTreeRenamePopupMenu.Visible := True;
5952 FavoriteTreeNewFolderPopupMenu.Visible := True;
5953 FavoriteTreeURLCopyPopupMenu.Visible := True;
5954 FavoriteTreeNameCopyPopupMenu.Visible := True;
5955 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5956 FavoriteTreeReloadPopupMenu.Visible := True;
5957 FavoriteTreeLogDeletePopupMenu.Visible := True;
5958 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5959 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
5960 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5961 FavoriteTreeDeletePopupMenu.Visible := True;
5962 FavoriteTreeRenamePopupMenu.Visible := True;
5963 FavoriteTreeNewFolderPopupMenu.Visible := True;
5964 FavoriteTreeURLCopyPopupMenu.Visible := True;
5965 FavoriteTreeNameCopyPopupMenu.Visible := True;
5966 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
5967 FavoriteTreeReloadPopupMenu.Visible := True;
5968 FavoriteTreeLogDeletePopupMenu.Visible := False;
5969 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5971 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5972 FavoriteTreeDeletePopupMenu.Visible := False;
5973 FavoriteTreeRenamePopupMenu.Visible := False;
5974 FavoriteTreeNewFolderPopupMenu.Visible := False;
5975 FavoriteTreeURLCopyPopupMenu.Visible := False;
5976 FavoriteTreeNameCopyPopupMenu.Visible := False;
5977 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5978 FavoriteTreeReloadPopupMenu.Visible := False;
5979 FavoriteTreeLogDeletePopupMenu.Visible := False;
5980 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5985 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
5990 if not (TObject(node.Data) is TFavoriteFolder) then
5993 for i := 0 to node.Count - 1 do
5995 if TObject(node.Item[i].Data) is TFavoriteFolder then
5996 FavoriteBrowseFolder( node.Item[i] )
5997 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
5998 FavoriteClick( node.Item[i], False );
6002 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6008 for i := 0 to Node.Count - 1 do begin
6009 if Node.Item[i].Data = FindPointer then begin
6010 Result := Node.Item[i];
6012 end else if Node.Item[i].Count > 0 then begin
6013 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6014 if Found <> nil then begin
6025 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6029 SenderNode: TTreeNode;
6033 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6034 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6035 SenderNode := FavoriteTreeView.Items[i];
6039 SenderNode.Selected := False;
6041 FavoriteDragDrop( SenderNode, Source );
6046 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6047 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6049 if FDragWFirst = true then
6050 FDragWFirst := false;
6052 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6053 if GikoSys.Setting.ListWidthState = glsMin then begin
6054 GikoDM.BrowserMaxAndFocusAction.Execute;
6057 if GikoSys.Setting.ListHeightState = glsMin then begin
6058 GikoDM.BrowserMaxAndFocusAction.Execute;
6063 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6064 Y: Integer; State: TDragState; var Accept: Boolean);
6067 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6071 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6075 if FDropSpaceNode <> nil then begin
6077 FDropSpaceNode.Delete;
6079 FDropSpaceNode := nil;
6081 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6082 FavoriteDM.Modified := true;
6088 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6090 if FListViewBackGroundColor <> value then begin
6091 FListViewBackGroundColor := value;
6092 ListView.Color := FListViewBackGroundColor;
6095 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6097 threadItem : TThreadItem;
6101 if FClickNode = nil then Exit;
6103 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6105 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6106 if threadItem = nil then
6108 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6110 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6112 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6113 if boardItem = nil then
6115 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6121 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6122 MousePos: TPoint; var Handled: Boolean);
6126 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6127 if BrowserTab.TabIndex <> idx then begin
6128 BrowserTab.TabIndex := idx;
6129 BrowserTab.OnChange(nil);
6133 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6135 ThreadItem: TThreadItem;
6141 boardPlugIn : TBoardPlugIn;
6143 if Number = 0 then Exit;
6144 ThreadItem := GetActiveContent;
6146 if ThreadItem <> nil then begin
6147 //if ThreadItem.IsBoardPlugInAvailable then begin
6148 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6149 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6150 //boardPlugIn := ThreadItem.BoardPlugIn;
6151 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6153 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6154 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6155 //
\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
6156 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6158 FileName := ThreadItem.FilePath;
6159 tmp := GikoSys.ReadThreadFile(FileName, Number);
6161 if tmp <> '' then begin
6162 THTMLCreate.DivideStrLine(tmp, @Res);
6164 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6165 if ReplaceTag then begin
6166 Header := CustomStringReplace(Header, '</b>', '',true);
6167 Header := CustomStringReplace(Header, '<b>', '',true);
6168 Header := CustomStringReplace(Header, '<br>', '',true);
6169 Header := DeleteFontTag(Header);
6171 //if ThreadItem.IsBoardPlugInAvailable then begin
6172 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6173 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6174 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6176 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6177 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6178 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6179 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6182 Body := CustomStringReplace(Body, '</a>', '',true);
6184 Body := HTMLCreater.DeleteLink(Body);
6185 if ReplaceTag then begin
6186 Body := CustomStringReplace(Body, '<', '<');
6187 Body := CustomStringReplace(Body, '>', '>');
6188 Body := CustomStringReplace(Body, '"', '"');
6189 Body := CustomStringReplace(Body, '&', '&');
6190 //Body := CustomStringReplace(Body, ' ', ' ');
6193 Header := Header + Body;
6195 Clipboard.SetTextBuf( PChar(Header) );
6201 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6203 AddRoundNameMenu(dummy1);
6206 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6208 FavoriteDM.URLReplace(oldURLs, newURLs);
6211 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6213 RoundList.URLReplace(oldURLs, newURLs);
6216 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6218 Filename = 'tab.sav';
6219 bFilename = '~tab.sav';
6225 oldBoardName: string;
6227 newBoardName: string;
6228 TabList: TStringList;
6231 if oldURLs.Count <> newURLs.Count then begin
6234 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6235 TabList := TStringList.Create;
6237 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6239 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6240 //
\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
6241 for i := 0 to oldURLs.Count - 1 do begin
6242 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6243 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6244 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6245 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6246 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6247 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6249 for j := 0 to TabList.Count - 1 do begin
6250 tempString := TabList[j];
6251 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6252 tempString := StringReplace(tempString, oldHost, newHost,[]);
6253 TabList[j] := tempString;
6257 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6259 if FileExists( GikoSys.GetAppDir + Filename) then begin
6260 if FileExists( GikoSys.GetAppDir + bFilename) then
6261 DeleteFile(GikoSys.GetAppDir + bFilename);
6263 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6264 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6267 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6275 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6276 procedure TGikoForm.OnMinimize;
6278 if FActiveContent <> nil then begin
6279 FIsMinimize := mtMinimizing;
6280 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6284 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6285 procedure TGikoForm.OnMinimized;
6287 FIsMinimize := mtMinimized;
6291 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6293 CoolBarResized( Sender, BrowserCoolBar );
6296 // *************************************************************************
6297 // ExternalBoardPlugInMain
6298 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6299 // *************************************************************************
6300 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6303 boardPlugIn : TBoardPlugIn;
6306 if not (Sender is TMenuItem) then
6309 item := TMenuItem( Sender );
6310 if not Assigned( Pointer( item.Tag ) ) then
6313 //
\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·
6314 boardPlugIn := TBoardPlugIn( item.Tag );
6315 boardPlugIn.PlugInMenu( item.Handle );
6318 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6319 procedure TGikoForm.TreeClick( Node : TTreeNode );
6325 if FTreeType = gttHistory then begin
6327 if TObject( Node.Data ) is TFavoriteThreadItem then
6328 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6329 FavoriteClick( Node );
6332 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6333 if ActiveList = Node.Data then
6336 ActiveListColumnSave;
6338 if TObject(Node.Data) is TBBS then begin
6339 SetActiveList(Node.data);
6340 end else if TObject(Node.Data) is TCategory then begin
6341 SetActiveList(Node.data);
6342 end else if TObject(Node.Data) is TBoard then begin
6343 if not TBoard(Node.Data).IsThreadDatRead then begin
6344 Screen.Cursor := crHourGlass;
6346 if not TBoard(Node.Data).IsThreadDatRead then
6347 GikoSys.ReadSubjectFile(Node.Data);
6349 Screen.Cursor := crDefault;
6352 Sort.SetSortDate(Now());
6353 SetActiveList(Node.data);
6356 if TObject( Node.Data ) is TBoard then begin // not TCategory
6357 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6358 if GikoSys.Setting.ListWidthState = glsMax then begin
6359 GikoDM.BrowserMinAction.Execute;
6360 if GikoForm.Visible then
6364 if GikoSys.Setting.ListHeightState = glsMax then begin
6365 GikoDM.BrowserMinAction.Execute;
6366 if GikoForm.Visible then
6374 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6375 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6378 ThreadItem : TThreadItem;
6379 shiftDown : Boolean;
6382 if Node = nil then Exit;
6384 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6386 if FTreeType = gtt2ch then begin
6387 if not (TObject(Node.Data) is TBoard) then Exit;
6388 Board := TBoard(Node.Data);
6389 DownloadList(Board, shiftDown);
6390 end else if FTreeType = gttHistory then begin
6391 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6392 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6393 DownloadContent(ThreadItem, shiftDown);
6397 // *************************************************************************
6398 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6399 // *************************************************************************
6400 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6401 Shift: TShiftState);
6403 if Key = VK_BACK then begin
6404 // UpFolderButtonClick(Sender);
6405 end else if Key = VK_SPACE then begin
6406 TreeDoubleClick( TreeView.Selected );
6407 end else if Key = VK_RETURN then begin
6408 TreeClick( TreeView.Selected );
6409 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6412 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6413 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6414 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6416 favItem : TTreeNode;
6417 favThreadItem : TFavoriteThreadItem;
6423 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6424 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6425 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6426 rect := FavoriteTreeView.Selected.DisplayRect(true);
6427 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6428 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6429 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6430 if ssDouble in Shift then begin
6431 FClickNode := FavoriteTreeView.Selected;
6432 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6436 TObject(FavoriteTreeView.Selected));
6443 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6444 if favItem = nil then Exit;
6446 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6447 favThreadItem := TFavoriteThreadItem( favItem.Data );
6448 if favThreadItem.Item <> nil then
6449 InsertBrowserTab( favThreadItem.Item, False );
6456 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6459 if FIsIgnoreResize <> rtNone then
6462 if GikoSys.Setting.ListOrientation = gloVertical then begin
6463 if GikoSys.Setting.ListHeightState = glsMin then begin
6464 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6465 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6471 procedure TGikoForm.OnResized;
6476 FOldFormWidth := Width;
6477 FIsIgnoreResize := rtNone;
6482 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6483 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6488 //
\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)
6489 if FActiveContent <> nil then begin
6490 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6491 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6493 FIsMinimize := mtNone;
6498 // *************************************************************************
6499 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6500 // *************************************************************************
6501 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6508 stlist : TStringList;
6515 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6516 FActiveContent.Browser.SetFocus;
6519 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6520 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6521 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6522 if (Assigned(e)) then begin
6523 if (e.className = 'date') or (e.id = 'date') then begin
6525 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6526 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6527 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6528 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6531 stlist := TStringList.Create;
6533 stList.DelimitedText := AID;
6535 for i := 0 to stList.Count - 1 do
6536 if Length(WideString(stList[i])) = 8 then begin
6537 if GikoSys.NotDateorTimeString(stList[i]) then begin
6546 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6548 if count > LIMIT then begin
6549 if (GikoUtil.MsgBox(Handle,
6550 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6551 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6552 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6556 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6557 FActiveContent.IDAnchorPopup(body);
6566 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6567 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6569 SelectTimer.Interval := 0;
6570 if not (ListView.Selected = nil) then
6571 if( FActiveContent = nil) or
6572 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6577 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6578 procedure TGikoForm.ActiveListColumnSave;
6580 ActivListObj : TObject;
6581 i, id, idx : Integer;
6582 BBSOrder : TGikoBBSColumnList;
6583 CategoryOrder : TGikoCategoryColumnList;
6584 BoardOrder : TGikoBoardColumnList;
6587 ActivListObj := ActiveList;
6588 if ActivListObj is TBBS then begin
6589 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6590 BBSOrder := TGikoBBSColumnList.Create;
6592 for i := 0 to ListView.Columns.Count - 1 do begin
6593 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6594 idx := ListView.Column[ i ].Tag;
6595 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6596 BBSOrder.Add( TGikoBBSColumnID( id ) );
6597 //
\95\9d\82Ì
\95Û
\91¶
6598 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6600 for i := 0 to ListView.Columns.Count - 1 do
6601 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6602 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6606 end else if ActivListObj is TCategory then begin
6607 //=====
\94Â
\83\8a\83X
\83g =====
6608 CategoryOrder := TGikoCategoryColumnList.Create;
6610 for i := 0 to ListView.Columns.Count - 1 do begin
6611 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6612 idx := ListView.Column[ i ].Tag;
6613 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6614 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6615 //
\95\9d\82Ì
\95Û
\91¶
6616 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6618 for i := 0 to ListView.Columns.Count - 1 do
6619 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6620 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6624 end else if ActivListObj is TBoard then begin
6625 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6626 BoardOrder := TGikoBoardColumnList.Create;
6628 for i := 0 to ListView.Columns.Count - 1 do begin
6629 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6630 idx := ListView.Column[ i ].Tag;
6631 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6632 BoardOrder.Add( TGikoBoardColumnID( id ) );
6633 //
\95\9d\82Ì
\95Û
\91¶
6634 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6636 for i := 0 to ListView.Columns.Count - 1 do
6637 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6638 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6646 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6647 Column: TListColumn; Point: TPoint);
6653 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6654 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6655 ListColumnPopupMenu.Items.Items[ i ].Free;
6657 //
\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¢)
6658 if TObject( FActiveList ) is TBBS then begin
6660 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6661 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6662 item := TMenuItem.Create( ListColumnPopupMenu );
6663 item.Caption := GikoBBSColumnCaption[ i ];
6665 item.OnClick := ListColumnPopupMenuOnClick;
6666 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6667 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6668 item.Checked := True;
6672 ListColumnPopupMenu.Items.Add( item );
6675 end else if TObject( FActiveList ) is TCategory then begin
6677 //=====
\94Â
\83\8a\83X
\83g =====
6678 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6679 item := TMenuItem.Create( ListColumnPopupMenu );
6680 item.Caption := GikoCategoryColumnCaption[ i ];
6682 item.OnClick := ListColumnPopupMenuOnClick;
6683 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6684 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6685 item.Checked := True;
6689 ListColumnPopupMenu.Items.Add( item );
6692 end else if TObject( FActiveList ) is TBoard then begin
6694 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6695 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6696 item := TMenuItem.Create( ListColumnPopupMenu );
6697 item.Caption := GikoBoardColumnCaption[ i ];
6699 item.OnClick := ListColumnPopupMenuOnClick;
6700 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6701 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6702 item.Checked := True;
6706 ListColumnPopupMenu.Items.Add( item );
6711 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6712 Point := ListView.ClientToScreen( Point );
6713 if ListColumnPopupMenu.Items.Count > 0 then
6714 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6718 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6719 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6726 if not (Sender is TMenuItem) then
6729 ActiveListColumnSave;
6730 item := TMenuItem( Sender );
6732 if TObject( FActiveList ) is TBBS then
6733 orderList := GikoSys.Setting.BBSColumnOrder
6734 else if TObject( FActiveList ) is TCategory then
6735 orderList := GikoSys.Setting.CategoryColumnOrder
6736 else if TObject( FActiveList ) is TBoard then
6737 orderList := GikoSys.Setting.BoardColumnOrder
6741 if item.Checked then begin
6742 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6743 for i := orderList.Count - 1 downto 0 do begin
6744 if Integer( orderList[ i ] ) = item.Tag then begin
6745 orderList.Delete( i );
6750 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6751 orderList.Add( Pointer( item.Tag ) );
6754 SetActiveList( FActiveList );
6758 procedure TGikoForm.OnGestureStart(Sender: TObject);
6763 procedure TGikoForm.OnGestureMove(Sender: TObject);
6770 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6772 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6773 s := MouseGesture.GetGestureStr;
6775 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6776 if Action <> nil then
6777 ActStr := '
\81i' + Action.Caption + '
\81j';
6778 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6779 StatusBar.Panels[1].Text := s;
6782 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6787 s := MouseGesture.GetGestureStr;
6789 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6790 if Action <> nil then
6792 StatusBar.Panels[1].Text := '';
6795 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6796 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6798 ThreadItem: TThreadItem;
6800 DefaultDraw := true;
6801 if TObject(Item.Data) is TThreadItem then begin
6802 ThreadItem := TThreadItem(Item.Data);
6803 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6804 ListView.Canvas.Brush.Color := FOddColor;
6805 //
\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
6806 if (GikoSys.Setting.UnFocusedBold) and
6807 (Item.Selected) and (not ListView.Focused) then begin
6808 ListView.Canvas.Font.Style := [fsBold];
6811 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6814 if ThreadItem.UnRead then
6815 ListView.Canvas.Font.Style := [fsBold];
6820 procedure TGikoForm.FormActivate(Sender: TObject);
6822 if GikoSys.Setting.GestureEnabled then begin
6823 GikoSys.Setting.Gestures.ClearGesture;
6824 GikoSys.Setting.Gestures.LoadGesture(
6825 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6826 MouseGesture.UnHook;
6827 MouseGesture.OnGestureStart := OnGestureStart;
6828 MouseGesture.OnGestureMove := OnGestureMove;
6829 MouseGesture.OnGestureEnd := OnGestureEnd;
6830 MouseGesture.SetHook(Handle);
6832 //MouseGesture.UnHook;
6833 MouseGesture.OnGestureStart := nil;
6834 MouseGesture.OnGestureMove := nil;
6835 MouseGesture.OnGestureEnd := nil;
6839 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6841 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6842 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6846 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6851 affectedBand : TCoolBand;
6854 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6855 FIsIgnoreResize := rtResizing;
6856 PostMessage( Handle, USER_RESIZED, 0, 0 );
6858 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6859 if CoolBar = MainCoolBar then begin
6860 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6861 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6862 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6863 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6864 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6866 end else if CoolBar = ListCoolBar then begin
6867 for i := 0 to LIST_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.ListCoolSet[i] := CoolSet;
6873 end else if CoolBar = BrowserCoolBar then begin
6874 for i := 0 to BROWSER_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.BrowserCoolSet[i] := CoolSet;
6881 if not (Sender is TToolBar) or (CoolBar = nil) then
6883 toolbar := TToolBar( Sender );
6884 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
6885 affectedBand := nil;
6886 for i := CoolBar.Bands.Count - 1 downto 0 do begin
6887 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
6888 band := CoolBar.Bands[ i ];
6889 if band.Break or (i = 0) then begin
6890 if i + 1 < CoolBar.Bands.Count then
6891 if not CoolBar.Bands[ i + 1 ].Break then
6892 affectedBand := CoolBar.Bands[ i + 1 ];
6895 affectedBand := CoolBar.Bands[ i - 1 ];
6900 //
\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·
6901 if CoolBar = MainCoolBar then begin
6902 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
6903 coolSet.FCoolWidth := toolbar.Width + 25;
6904 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
6905 if affectedBand <> nil then begin
6906 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
6907 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6908 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
6910 end else if CoolBar = ListCoolBar then begin
6911 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
6912 coolSet.FCoolWidth := toolbar.Width + 25;
6913 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
6914 if affectedBand <> nil then begin
6915 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
6916 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6917 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
6919 end else if CoolBar = BrowserCoolBar then begin
6920 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
6921 coolSet.FCoolWidth := toolbar.Width + 25;
6922 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
6923 if affectedBand <> nil then begin
6924 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
6925 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
6926 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
6933 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
6935 CoolBarResized( Sender, MainCoolBar );
6938 procedure TGikoForm.ListToolBarResize(Sender: TObject);
6940 CoolBarResized( Sender, ListCoolBar );
6943 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
6945 CoolBarResized( Sender, BrowserCoolBar );
6948 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
6949 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
6951 ThreadItem : TThreadItem;
6952 ReadList : TStringList;
6953 wordCount : TWordCount;
6955 ThreadItem := GetActiveContent;
6956 ReadList := TStringList.Create;
6957 wordCount := TWordCount.Create;
6959 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6960 {$IFDEF SPAM_FILTER_ENABLED}
6961 //
\83X
\83p
\83\80\82É
\90Ý
\92è
6962 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
6963 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
6964 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
6965 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
6967 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
6968 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
6973 FActiveContent.Repaint := true;
6974 if ThreadItem <> nil then
6975 InsertBrowserTab( ThreadItem, True );
6978 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
6979 procedure TGikoForm.IndividualAbonID(Atype : Integer);
6981 ThreadItem : TThreadItem;
6984 ReadList : TStringList;
6985 wordCount : TWordCount;
6987 No := KokoPopupMenu.Tag;
6988 if No = 0 then Exit;
6989 ThreadItem := GetActiveContent;
6990 if ThreadItem = nil then Exit;
6991 body := TStringList.Create;
6993 GikoSys.GetSameIDRes(No, ThreadItem, body);
6995 ReadList := TStringList.Create;
6996 wordCount := TWordCount.Create;
6998 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6999 {$IFDEF SPAM_FILTER_ENABLED}
7000 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7001 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7003 for i := 0 to body.Count - 1 do begin
7004 {$IFDEF SPAM_FILTER_ENABLED}
7005 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7006 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7007 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7009 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7010 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7016 FActiveContent.Repaint := true;
7017 if ThreadItem <> nil then
7018 InsertBrowserTab( ThreadItem, True );
7025 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7027 firstElement: IHTMLElement;
7028 document: IHTMLDocument2;
7030 document := FActiveContent.Browser.Document as IHTMLDocument2;
7031 if Assigned(document) then
7032 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7033 if Assigned(firstElement) then
7034 if firstElement.style.visibility <> 'hidden' then
7035 firstElement.style.visibility := 'hidden';
7039 procedure TGikoForm.RepaintAllTabsBrowser();
7042 ThreadItem: TThreadItem;
7044 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7045 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7047 ThreadItem := GetActiveContent;
7048 if ThreadItem <> nil then
7049 InsertBrowserTab( ThreadItem, True );
7053 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7054 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7055 Shift: TShiftState);
7057 //
\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Ì
7058 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7059 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7060 SelectTimer.Interval := 0;
7061 if not (GikoSys.Setting.BrowserTabVisible) then begin
7062 if (GetActiveList is TBoard) then begin
7063 //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
7064 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7065 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7066 (Key = VK_UP) or (Key = VK_DOWN)) then
7067 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7071 // *************************************************************************
7072 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7073 // *************************************************************************
7074 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7075 Node: TTreeNode; var AllowEdit: Boolean);
7077 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7078 FOrigenCaption := Node.Text;
7080 // *************************************************************************
7081 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7082 // *************************************************************************
7083 function TGikoForm.GetMainForm(): TComponent;
7085 Result := Application.MainForm;
7087 // *************************************************************************
7088 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7089 // *************************************************************************
7090 function TGikoForm.GetScreenCursor(): TCursor;
7092 Result := Screen.Cursor;
7094 // *************************************************************************
7095 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7096 // *************************************************************************
7097 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7099 if (Screen.Cursor <> Cursor) then
7100 Screen.Cursor := Cursor;
7102 // *************************************************************************
7103 //!
\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
7104 // *************************************************************************
7105 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7107 //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Ì
7108 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7109 if GikoDM.CabinetVisibleAction.Enabled then begin
7110 GikoDM.CabinetVisibleAction.Execute;
7113 // *************************************************************************
7114 //!
\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
7115 // *************************************************************************
7116 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7118 if GikoDM.FavoriteArrangeAction.Enabled then begin
7119 GikoDM.FavoriteArrangeAction.Execute;
7122 // *************************************************************************
7123 //!
\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
7124 // *************************************************************************
7125 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7126 var Handled: Boolean);
7130 //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ß
7131 if Self.Active then begin
7133 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7134 WM_KEYFIRST..WM_KEYLAST :
7136 //
\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ç
7137 if (Msg.message <> WM_KEYUP)
7138 and (Msg.message <> WM_CHAR)
7139 and (Msg.message <> WM_SYSKEYUP) then begin
7140 wmMsg.Msg := Msg.message;
7141 wmMsg.CharCode := Word(Msg.wParam);
7142 wmMsg.KeyData := Msg.lParam;
7143 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7144 Self.OnShortCut(wmMsg, Handled);
7150 // *************************************************************************
7151 //!
\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
7152 // *************************************************************************
7153 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7155 Application.ProcessMessages;
7156 if not Application.Terminated then begin
7157 if PreviewTimer.Enabled then
7158 PreviewTimer.Enabled := False;
7159 //
\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
7160 if FHint <> nil then begin
7161 FHint.ReleaseHandle;
7164 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7165 if FPreviewBrowser <> nil then
7166 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7170 // *************************************************************************
7171 //!
\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
7172 // *************************************************************************
7173 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7178 if (Sender <> nil) then begin
7179 s := ' [' + Sender.ClassName + ']' + #13#10;
7181 s := ' [ Sender is nil ] ' + #13#10;
7184 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7186 // *************************************************************************
7187 //!
\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¬
7188 // *************************************************************************
7189 procedure TGikoForm.CreateControlThread();
7191 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7192 FControlThread := TThreadControl.Create(True);
7193 FControlThread.MaxThreadCount := 1;
7194 FControlThread.Resume;
7195 FControlThread.OnDownloadEnd := DownloadEnd;
7196 FControlThread.OnDownloadMsg := DownloadMsg;
7197 FControlThread.OnWork := Work;
7198 FControlThread.OnWorkBegin := WorkBegin;
7199 FControlThread.OnWorkEnd := WorkEnd;
7201 // *************************************************************************
7202 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7203 // *************************************************************************
7204 procedure TGikoForm.CreateBrowsers(count: Integer);
7207 newBrowser: TWebBrowser;
7209 BrowserNullTab := TBrowserRecord.Create;
7210 BrowserNullTab.Browser := Browser;
7211 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7212 FBrowsers := TList.Create;
7213 for i := 0 to count -1 do begin
7214 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7215 newBrowser := FBrowsers[FBrowsers.Count - 1];
7216 TOleControl(newBrowser).Parent := BrowserPanel;
7217 TOleControl(newBrowser).Align := alNone;
7218 TOleControl(newBrowser).Left := 0;
7219 TOleControl(newBrowser).Top := 0;
7220 newBrowser.RegisterAsDropTarget := False;
7221 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7222 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7223 newBrowser.OnEnter := BrowserEnter;
7224 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7225 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7226 newBrowser.Navigate(BLANK_HTML);
7227 ShowWindow(newBrowser.Handle, SW_HIDE);
7229 BrowserNullTab.Browser.BringToFront;
7230 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7231 //
\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Ì
7232 //
\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Å
7233 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7234 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7235 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7236 Application.ProcessMessages;
7239 // *************************************************************************
7240 //!
\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é
7241 // *************************************************************************
7242 procedure TGikoForm.SetSelectComboBox();
7244 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7247 ToolButton: TToolButton;
7249 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7250 SelectComboBoxPanel.Visible := False;
7252 for i := ListToolBar.ControlCount - 1 downto 0 do
7254 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7256 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7257 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7258 SelectComboBoxPanel.Parent := ListToolBar;
7259 SelectComboBoxPanel.Visible := True;
7261 SelectComboBox.Left := 0;
7262 SelectComboBox.Top := 0;
7263 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7264 SelectComboBox.Width := SelectComboBoxPanel.Width -
7265 SelectComboBoxSplitter.Width;
7267 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7268 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7269 if ToolButton = nil then begin
7270 ToolButton := TToolButton.Create(ListToolBar);
7271 ToolButton.Name := DUMMYCOMPNAME;
7273 ToolButton.Style := tbsSeparator;
7274 ToolButton.Width := 0;
7275 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7276 ListToolBar.InsertControl(ToolButton);
7277 ToolButton.Visible := False;
7279 //
\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·
7280 if (i + 1) < ListToolBar.ControlCount then
7281 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7282 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7283 ListToolBar.Controls[ i + 1 ].Visible := False;
7286 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7287 ListToolBar.Controls[ i ].Visible := False;
7295 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7296 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7297 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7304 if (TreeView.Selected <> nil) and
7305 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7306 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7307 rect := TreeView.Selected.DisplayRect(true);
7308 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7309 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7310 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7311 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7312 if ssDouble in Shift then begin
7313 TreeDoubleClick( TreeView.Selected );
7315 TreeClick(TreeView.Selected);
7322 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7323 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7327 if ActionList <> nil then begin
7328 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7330 for i := 0 to ActionList.ActionCount - 1 do begin
7332 FActionListGroupIndexes[i] :=
7333 TCustomAction(ActionList.Actions[i]).GroupIndex;
7334 TCustomAction(ActionList.Actions[i]).GroupIndex
7337 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7343 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7344 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7348 if ActionList <> nil then begin
7349 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7350 for i := 0 to ActionList.ActionCount - 1 do begin
7352 TCustomAction(ActionList.Actions[i]).GroupIndex
7353 := FActionListGroupIndexes[i];
7355 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7361 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7362 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7366 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7367 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7369 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7370 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7375 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7376 MousePos: TPoint; var Handled: Boolean);
7379 coolBar: TGikoCoolBar;
7382 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7383 coolBar := TGikoCoolBar(Sender);
7384 if (coolBar = MainCoolBar) then begin
7385 FToolBarSettingSender := tssMain;
7386 end else if (coolBar = ListCoolBar) then begin
7387 FToolBarSettingSender := tssList;
7388 end else if (coolBar = BrowserCoolBar) then begin
7389 FToolBarSettingSender := tssBrowser;
7391 FToolBarSettingSender := tssNone;
7393 pos := coolBar.ClientToScreen( MousePos );
7394 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7399 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7401 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7402 if (Msg.wParam = WM_LBUTTONUP) then begin
7406 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7407 procedure TGikoForm.StoredTaskTray;
7410 if (FIconData.uID = 0) then begin
7411 FIconData.cbSize := SizeOf(TNotifyIconData);
7412 FIconData.uID := Self.Handle;
7413 FIconData.Wnd := Handle;
7414 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7415 FIconData.uCallbackMessage := USER_TASKTRAY;
7416 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7417 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7418 Shell_NotifyIcon(NIM_ADD, @FIconData);
7419 ShowEditors(SW_HIDE);
7420 ShowWindow(Self.Handle, SW_HIDE);
7425 //!
\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¦
7426 procedure TGikoForm.UnStoredTaskTray;
7430 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7431 SetForegroundWindow(Application.Handle);
7436 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7437 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7438 ShowWindow(Self.Handle, SW_RESTORE);
7440 ShowWindow(Self.Handle, SW_SHOW);
7442 ShowEditors(SW_SHOW);
7443 GikoDM.StoredTaskTrayAction.Tag := 0;
7447 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7448 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7450 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7454 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7455 for i := 0 to Screen.CustomFormCount - 1 do begin
7456 if TObject(Screen.CustomForms[i]) is TEditorForm then
7457 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);