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, ResPopupBrowser;
30 TToolBarSettingSenderType = (tssNone, tssMain, tssList, tssBrowser);
31 TMinimizeType = (mtNone, mtMinimizing, mtMinimized);
32 TResizeType = (rtNone, rtResizing);
34 // TBrowserRecord = class;
36 TGikoForm = class(TForm)
37 StatusBar: TStatusBar;
40 TreeSplitter: TSplitter;
43 ThreadMainPanel: TPanel;
44 ListSplitter: TSplitter;
46 ListView: TGikoListView;
50 MessageHideButton: TSpeedButton;
51 MessageListView: TListView;
52 MessageSplitter: TSplitter;
54 CabinetCloseSpeedButton: TSpeedButton;
56 CabinetSelectToolButton: TToolButton;
57 HistoryToolBar: TToolBar;
58 HistoryShowToolButton: TToolButton;
59 HistoryAllClearToolButton: TToolButton;
60 ItemIcon16: TImageList;
61 ItemIcon32: TImageList;
62 HotToobarImageList: TImageList;
63 ItemImageList: TImageList;
66 DeleteMenu: TMenuItem;
68 KidokuMenu: TMenuItem;
69 MidokuMenu: TMenuItem;
70 AllSelectMenu: TMenuItem;
72 StdToolBarMenu: TMenuItem;
73 CabinetMenu: TMenuItem;
76 CabinetVisibleMenu: TMenuItem;
77 MessageMenu: TMenuItem;
78 StatusBarMenu: TMenuItem;
80 LargeIconMenu: TMenuItem;
81 SmallIconMenu: TMenuItem;
83 DetailMenu: TMenuItem;
88 OptionMenu: TMenuItem;
93 BrowserPopupMenu: TPopupMenu;
94 ShowThreadMenu: TMenuItem;
95 ShowBoardMenu: TMenuItem;
96 ListIconPopupMenu: TPopupMenu;
97 LargeIconPMenu: TMenuItem;
98 SmallIconPMenu: TMenuItem;
100 DetailPMenu: TMenuItem;
101 ClosePopupMenu: TPopupMenu;
102 CloseMenu: TMenuItem;
112 ListPopupMenu: TPopupMenu;
113 ListRoundPMenu: TMenuItem;
114 ListReservPMenu: TMenuItem;
116 ItemRoundPMenu: TMenuItem;
118 KidokuPMenu: TMenuItem;
119 MidokuPMenu: TMenuItem;
120 AllSelectPMenu: TMenuItem;
121 UrlCopyPMenu: TMenuItem;
123 DeletePMenu: TMenuItem;
125 ViewPMenu: TMenuItem;
126 LargeIconLPMenu: TMenuItem;
127 SmallIconLPMenu: TMenuItem;
128 ListLPMenu: TMenuItem;
129 DetailLPMenu: TMenuItem;
147 KokoPopupMenu: TPopupMenu;
148 KokomadePMenu: TMenuItem;
150 MenuItem1: TMenuItem;
151 MenuItem2: TMenuItem;
152 BrowserTabPopupMenu: TPopupMenu;
157 TreePopupMenu: TPopupMenu;
158 TreeSelectThreadPupupMenu: TMenuItem;
159 TreeSelectBoardPupupMenu: TMenuItem;
161 TreeSelectURLPupupMenu: TMenuItem;
165 BrowserBottomPanel: TGikoPanel;
166 CabinetSelectPopupMenu: TPopupMenu;
168 ItemReservPMenu: TMenuItem;
169 RoundNamePopupMenu: TPopupMenu;
181 MessageImageList: TImageList;
182 ProgressBar: TProgressBar;
184 NameUrlCopyPMenu: TMenuItem;
191 ListCoolBar: TGikoCoolBar;
192 ListToolBar: TToolBar;
193 BrowserCoolBar: TGikoCoolBar;
194 BrowserToolBar: TToolBar;
195 ToolButton3: TToolButton;
196 ToolButton9: TToolButton;
197 ToolButton11: TToolButton;
198 ToolButton5: TToolButton;
199 ListNameToolBar: TToolBar;
200 ListNameLabel: TLabel;
202 BrowserNameToolBar: TToolBar;
203 ItemBoardImage: TImage;
204 BrowserBoardNameLabel: TLabel;
206 BrowserNameLabel: TLabel;
213 TreeSelectNameURLPupupMenu: TMenuItem;
217 BrowserTabToolBar: TToolBar;
218 BrowserTab: TTabControl;
229 FavoriteMenu: TMenuItem;
231 BoardFavoriteAddMenu: TMenuItem;
232 ThreadFavoriteAddMenu: TMenuItem;
234 TreeSelectFavoriteAddPupupMenu: TMenuItem;
235 FavoriteTreeView: TTreeView;
236 StateIconImageList: TImageList;
238 TopRightPanel: TPanel;
241 TopCoolPanel: TPanel;
242 MainCoolBar: TGikoCoolBar;
243 MenuToolBar: TToolBar;
244 StdToolBar: TToolBar;
245 AddressToolBar: TToolBar;
246 AddressComboBox: TComboBox;
247 MoveToToolButton: TToolButton;
248 AddressImageList: TImageList;
249 AddressToolBarMenu: TMenuItem;
259 PreviewTimer: TTimer;
260 MonazillaWebPageAction1: TMenuItem;
267 ChevronPopupMenu: TPopupMenu;
271 LinkToolBar: TToolBar;
276 LinkBarPopupMenu: TPopupMenu;
278 ThreadPopupMenu: TPopupMenu;
279 MenuItem4: TMenuItem;
280 MenuItem5: TMenuItem;
281 MenuItem6: TMenuItem;
284 SelectItemNameCopyAction1: TMenuItem;
287 NameCopyPMenu: TMenuItem;
288 SelectComboBox: TComboBox;
289 MainCoolBarPopupMenu: TPopupMenu;
290 StdToolBarVisiblePMenu: TMenuItem;
291 AddressToolBarVisiblePMenu: TMenuItem;
292 LinkToolBarVisiblePMenu: TMenuItem;
313 ToolButton16: TToolButton;
320 IndividualAbon1: TMenuItem;
322 IndividualAbon2: TMenuItem;
323 AntiIndivAbonMenuItem: TMenuItem;
324 AntiIndividualAbon: TMenuItem;
328 SearchBoardName: TMenuItem;
329 TreeSelectLogDeleteSeparator: TMenuItem;
332 FavoriteTreePopupMenu: TPopupMenu;
333 FavoriteTreeRenamePopupMenu: TMenuItem;
334 FavoriteTreeNewFolderPopupMenu: TMenuItem;
336 FavoriteTreeDeletePopupMenu: TMenuItem;
337 FavoriteToolBar: TToolBar;
338 FavoriteAddToolButton: TToolButton;
339 FavoriteArrangeToolButton: TToolButton;
340 FavoriteTreeBrowseFolderPopupMenu: TMenuItem;
342 FavoriteTreeReloadPopupMenu: TMenuItem;
344 FavoriteTreeURLCopyPopupMenu: TMenuItem;
345 FavoriteTreeNameCopyPopupMenu: TMenuItem;
346 FavoriteTreeLogDeletePopupMenu: TMenuItem;
348 FavoriteTreeNameURLCopyPopupMenu: TMenuItem;
349 ToolButton20: TToolButton;
351 ExportFavoriteFileAction1: TMenuItem;
362 TreeSelectLogDeletePopupMenu: TMenuItem;
364 BBSSelectPopupMenu: TPopupMenu;
365 PlugInMenu: TMenuItem;
366 TreeSelectNamePupupMenu: TMenuItem;
367 BrowserPanel: TPanel;
369 SelectThreadSave: TMenuItem;
373 OpenLogFolder: TMenuItem;
374 Browser: TWebBrowser;
377 ResRangePopupMenu: TPopupMenu;
378 ResRangeHundPMenuItem: TMenuItem;
379 ResRangeKokoPMenuItem: TMenuItem;
380 ResRangeNewPMenuItem: TMenuItem;
381 ResRangeAllPMenuItem: TMenuItem;
382 BrowsBoradHeadAction1: TMenuItem;
383 ThreadRangePopupMenu: TPopupMenu;
390 ResRangeSelectPMenuItem: TMenuItem;
391 ListColumnPopupMenu: TPopupMenu;
400 SelectComboBoxPanel: TPanel;
401 SelectComboBoxSplitter: TImage;
402 ToolButton1: TToolButton;
405 GikoApplicationEvents: TApplicationEvents;
412 FavoriteTreeItemNameCopyPopupMenu: TMenuItem;
415 SaveThreadFile: TMenuItem;
420 SameBoardThreadItem: TMenuItem;
422 procedure FormCreate(Sender: TObject);
423 procedure FormDestroy(Sender: TObject);
424 procedure BrowserStatusTextChange(Sender: TObject;
425 const Text: WideString);
426 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
427 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
428 var AllowChange: Boolean);
429 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
431 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
432 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
433 Button: TToolButton; State: TCustomDrawState;
434 var DefaultDraw: Boolean);
435 procedure BrowserBeforeNavigate2(Sender: TObject;
436 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
437 Headers: OleVariant; var Cancel: WordBool);
438 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
439 const ARect: TRect; var DefaultDraw: Boolean);
440 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
441 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
442 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
443 procedure ListViewCustomDraw(Sender: TCustomListView;
444 const ARect: TRect; var DefaultDraw: Boolean);
445 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
446 Shift: TShiftState; X, Y: Integer);
447 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
448 procedure MessageListViewResize(Sender: TObject);
449 procedure CabinetVisible( isVisible : Boolean );
450 procedure FormResize(Sender: TObject);
451 procedure ListPopupMenuPopup(Sender: TObject);
452 procedure TreePopupMenuPopup(Sender: TObject);
453 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
454 var Cancel: WordBool);
455 procedure ListSplitterMoved(Sender: TObject);
456 procedure BrowserTabChange(Sender: TObject);
457 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
458 Shift: TShiftState; X, Y: Integer);
459 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
460 State: TDragState; var Accept: Boolean);
461 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
462 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
464 procedure BrowserDocumentComplete(Sender: TObject;
465 const pDisp: IDispatch; var URL: OleVariant);
466 procedure RoundNamePopupMenuPopup(Sender: TObject);
467 procedure FormShow(Sender: TObject);
468 procedure BrowserTabToolBarResize(Sender: TObject);
469 procedure FavoriteMenuClick(Sender: TObject);
470 procedure MainCoolBarResize(Sender: TObject);
471 procedure AddressToolBarResize(Sender: TObject);
472 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
474 procedure BrowserEnter(Sender: TObject);
475 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
476 procedure PreviewTimerTimer(Sender: TObject);
477 procedure MessageHideButtonClick(Sender: TObject);
478 procedure HistoryAllClearToolButtonClick(Sender: TObject);
479 procedure MainCoolBarBandInfo(Sender: TObject;
480 var BandInfo: PReBarBandInfoA);
481 procedure MainCoolBarChevronClick(Sender: TObject;
482 RebarChevron: PNMRebarChevron);
483 procedure ListCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure ListCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure BrowserCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure BrowserCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
492 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
493 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
494 procedure SelectComboBoxChange(Sender: TObject);
495 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
497 procedure SelectComboBoxExit(Sender: TObject);
498 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
499 Shift: TShiftState; X, Y: Integer);
500 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
501 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
502 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
503 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
504 procedure StatusBarResize(Sender: TObject);
505 procedure SelectComboBoxEnter(Sender: TObject);
506 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
508 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
509 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
511 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
513 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
514 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
515 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
516 Shift: TShiftState; X, Y: Integer);
517 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
518 State: TDragState; var Accept: Boolean);
519 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
521 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
522 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
523 var Handled: Boolean);
524 procedure BrowserTabPopupMenuPopup(Sender: TObject);
525 procedure BrowserTabResize(Sender: TObject);
526 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
528 procedure FavoriteTreeViewMouseDown(Sender: TObject;
529 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
530 procedure MessagePanelResize(Sender: TObject);
532 procedure SelectTimerTimer(Sender: TObject);
533 procedure ListViewColumnRightClick(Sender: TObject;
534 Column: TListColumn; Point: TPoint);
535 procedure ListViewCustomDrawItem(Sender: TCustomListView;
536 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
537 procedure FormActivate(Sender: TObject);
538 procedure BrowserPanelResize(Sender: TObject);
539 procedure MenuToolBarResize(Sender: TObject);
540 procedure ListToolBarResize(Sender: TObject);
541 procedure BrowserToolBarResize(Sender: TObject);
542 procedure KokoPopupMenuPopup(Sender: TObject);
543 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
545 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
546 var AllowEdit: Boolean);
547 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
548 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
549 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
550 var Handled: Boolean);
551 procedure GikoApplicationEventsDeactivate(Sender: TObject);
552 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
553 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
554 Shift: TShiftState; X, Y: Integer);
555 procedure GetResURLMenuClick(Sender: TObject);
556 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
557 var Handled: Boolean);
560 FEnabledCloseButton: Boolean;
561 FClickNode: TTreeNode;
563 FPreviewBrowser: TPreviewBrowser;
565 FBrowserSizeHeight: Integer;
566 FBrowserSizeWidth: Integer;
567 FTabHintIndex: Integer;
568 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
569 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
570 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
571 FActiveList: TObject;
572 FActiveContent: TBrowserRecord; //
574 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
575 FTreeType: TGikoTreeType;
579 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
580 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
581 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
582 IsDraggingSelectComboBox : Boolean;
583 DraggingSelectComboBoxPosition : TPoint;
584 FSearchDialog: TSearchDialog;
585 FDropSpaceNode: TTreeNode;
586 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
587 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
588 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
589 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
590 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¦
591 FOddColor : TColor; ///<
\82»
\82Ì
\90F
592 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
593 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
594 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
595 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
596 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
597 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
599 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
601 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
602 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
603 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ñ
604 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
605 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 FResPopupBrowser: TResPopupBrowser;
607 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
608 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
609 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
610 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
611 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
613 procedure ListDoubleClick(Shift: TShiftState);
614 function Hook(var Message: TMessage): Boolean;
615 procedure AddRoundNameMenu(MenuItem: TMenuItem);
616 procedure SetMenuFont;
617 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
618 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
619 procedure FavoriteClick(Sender: TObject); overload;
620 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
621 function OnDocumentContextMenu(Sender: TObject): WordBool;
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;
683 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
684 procedure AddMenuSameBoardThread;
685 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
686 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
687 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
688 procedure CreateResPopupBrowser;
689 //! D&D
\82ð
\8eó
\82¯
\8eæ
\82é
690 procedure WMDropFiles(var Msg: TWMDropFiles); Message WM_DropFiles;
691 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
692 function isValidFile(FileName: String) : boolean;
694 procedure CreateParams(var Params: TCreateParams); override;
695 procedure WndProc(var Message: TMessage); override;
696 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
697 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
698 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
702 LastRoundTime: TDateTime;
703 BrowserNullTab: TBrowserRecord;
704 FControlThread: TThreadControl;
705 FIconData : TNotifyIconData;
706 procedure MoveToURL(const inURL: string);
707 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
709 function GetHttpState: Boolean;
710 procedure SetEnabledCloseButton(Enabled: Boolean);
711 function GetTreeNode(Data: TObject): TTreeNode;
712 procedure ListViewAllSelect;
713 property ListStyle: TViewStyle read FListStyle write FListStyle;
714 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
715 property ViewType: TGikoViewType read FViewType write FViewType;
716 property NameCookie: string read FNameCookie write FNameCookie;
717 property MailCookie: string read FMailCookie write FMailCookie;
718 property ClickNode: TTreeNode read FClickNode write FClickNode;
719 property TreeType: TGikoTreeType read FTreeType write FTreeType;
720 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
721 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
722 property SelectResWord : string read FSelectResWord write FSelectResWord;
723 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
724 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
725 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
726 property ToolBarSettingSender : TToolBarSettingSenderType
727 read FToolBarSettingSender write FToolBarSettingSender;
728 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
729 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
730 property WorkCount: Integer read FWorkCount write FWorkCount;
731 procedure SetContent(inThread: TBrowserRecord);
732 function GetActiveContent(popup :Boolean = false): TThreadItem;
733 function GetActiveList: TObject;
735 procedure SetListViewType(AViewType: TGikoViewType); overload;
736 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
737 procedure PlaySound(SoundEventName: string);
738 procedure ShowBBSTree( inBBS : TBBS );
739 procedure ShowBBSTreeOld( inBBS : TBBS );
740 procedure ShowHistoryTree;
741 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
742 procedure SetBrowserTabState;
743 procedure SetToolBarPopup;
744 procedure ShowFavoriteAddDialog( Item : TObject );
745 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
746 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
747 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
748 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
749 property OddColor : TColor read FOddColor write FOddColor;
750 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
751 procedure OnPlugInMenuItem( Sender : TObject );
752 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
753 /// 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Å
754 procedure ActiveListColumnSave;
755 procedure SetActiveList(Obj: TObject);
756 property ActiveList: TObject read GetActiveList write SetActiveList;
757 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
758 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
759 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
760 procedure IndividualAbonID(Atype : Integer);
761 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
762 procedure IndividualAbon(Atag, Atype : Integer);
763 //
\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Ý
764 procedure RepaintAllTabsBrowser();
765 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
766 procedure SetLinkBar;
767 procedure FavoriteBrowseFolder( node: TTreeNode );
768 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
769 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
770 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
771 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
772 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
773 procedure DeleteHistory( threadItem: TThreadItem );
774 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
775 procedure DeleteTab(ThreadItem: TThreadItem); overload;
776 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
777 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
778 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
779 procedure DeleteTab(index, selectIndex: Integer); overload;
780 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
781 procedure BrowserMovement(const AName: string); overload;
782 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
783 procedure BrowserMovement(scroll: Integer); overload;
784 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
785 function GetMainForm(): TComponent;
786 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
787 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
788 procedure OnGestureStart(Sender: TObject);
789 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
790 procedure OnGestureMove(Sender: TObject);
791 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
792 procedure OnGestureEnd(Sender: TObject);
793 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
794 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
795 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
796 procedure SelectListItem(List: TList);
797 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
798 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
800 procedure ModifySelectList;
802 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
804 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
806 procedure SetSelectRoundName(Sender: TObject);
808 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
810 function WebBrowserClick(Sender: TObject): WordBool;
811 //!
\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é
812 procedure SetSelectComboBox();
814 //!
\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
815 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
816 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
817 procedure StoredTaskTray;
819 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
822 TFavoriteMenuItem = class(TMenuItem)
826 property Data: Pointer read FData write FData;
829 TBBSMenuItem = class(TMenuItem)
833 property Data: Pointer read FData write FData;
836 TLinkToolButton = class(TToolButton)
840 property Data: Pointer read FData write FData;
849 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
850 YofUtils, ToolBarUtil, ToolBarSetting,
851 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
852 FavoriteArrange, AddressHistory, Gesture,
853 About, Option, Round, Splash, Sort, ListSelect, Imm,
854 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
855 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
856 InputAssistDataModule, Types, ReplaceDataModule;
859 BLANK_HTML: string = 'about:blank';
860 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
862 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
863 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
864 HTML_FILE_NAME = 'temp_preview.html';
865 //
\83\81\83b
\83Z
\81[
\83WID
866 USER_TREECLICK = WM_USER + 2000;
867 USER_RESIZED = WM_USER + 2001;
868 USER_MINIMIZED = WM_USER + 2002;
869 USER_SETLINKBAR = WM_USER + 2003;
870 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
871 USER_TASKTRAY = WM_USER + 2010;
874 procedure TGikoForm.CreateParams(var Params: TCreateParams);
877 if FormStyle in [fsNormal, fsStayOnTop] then begin
878 if BorderStyle in [bsSingle, bsSizeable] then begin
879 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
880 Params.WndParent := 0;
885 procedure TGikoForm.FormCreate(Sender: TObject);
887 TVS_NOTOOLTIPS = $0080;
893 wp: TWindowPlacement;
897 Writeln('============================================================');
898 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
900 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
901 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¢');
902 Writeln('============================================================');
905 Sort.SetSortDate(Now());
907 FTreeType := gttNone;
908 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
910 Application.HookMainWindow(Hook);
911 FIsIgnoreResize := rtResizing;
912 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
913 //(
\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¢)
914 //
\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
915 GetGroupIndex(GikoDM.GikoFormActionList);
916 FSearchDialog := nil;
917 FResPopupBrowser := nil;
918 CreateBrowsers(BROWSER_COUNT);
921 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
924 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
925 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
927 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
928 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
930 EnabledCloseButton := True;
932 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
933 ListView.ViewStyle := GikoSys.Setting.ListStyle;
935 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
937 AnimePanel.Left := 0;
939 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
941 //
\83L
\83\83\83r
\83l
\83b
\83g
942 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
944 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
945 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
946 GikoDM.MsgBarVisibleActionExecute(nil);
947 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
949 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
950 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
951 GikoDM.StatusBarVisibleActionExecute(nil);
953 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
954 TreeView.Items.BeginUpdate;
955 FavoriteTreeView.Items.BeginUpdate;
956 ListView.Items.BeginUpdate;
958 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
959 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
960 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
961 TreeView.Color := GikoSys.Setting.CabinetBackColor;
962 FavoriteTreeView.Font.Assign(TreeView.Font);
963 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
965 ListView.Font.Name := GikoSys.Setting.ListFontName;
966 ListView.Font.Size := GikoSys.Setting.ListFontSize;
967 ListView.Font.Color := GikoSys.Setting.ListFontColor;
968 ListView.Font.Style := [];
969 if GikoSys.Setting.ListFontBold then
970 ListView.Font.Style := [fsbold];
971 if GikoSys.Setting.ListFontItalic then
972 ListView.Font.Style := ListView.Font.Style + [fsitalic];
974 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
975 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
976 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
977 FOddColor := GikoSys.Setting.OddColor;
980 TreeView.Items.EndUpdate;
981 FavoriteTreeView.Items.EndUpdate;
982 ListView.Items.EndUpdate;
984 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
985 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
987 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
988 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
990 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
991 FResRangeMenuSelect := GikoSys.ResRange;
992 case GikoSys.ResRange of
995 GikoDM.AllResAction.Execute;
999 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1000 GikoDM.SelectResAction.Checked := True;
1003 case FResRangeMenuSelect of
1004 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1005 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1006 100: GikoDM.OnlyAHundredResAction.Checked := True;
1010 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1011 case GikoSys.Setting.ThreadRange of
1014 GikoDM.AllItemAction.Checked := True;
1019 GikoDM.LogItemAction.Checked := True;
1024 GikoDM.NewItemAction.Checked := True;
1029 GikoDM.LiveItemAction.Checked := True;
1030 ViewType := gvtLive;
1034 GikoDM.ArchiveItemAction.Checked := True;
1035 ViewType := gvtArch;
1040 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1041 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1042 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1043 BrowserTab.Font.Style := [];
1044 if GikoSys.Setting.BrowserTabFontBold then
1045 BrowserTab.Font.Style := [fsBold];
1046 if GikoSys.Setting.BrowserTabFontItalic then
1047 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1048 BrowserTab.DoubleBuffered := True;
1049 FDragWFirst := false;
1050 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1052 //
\83u
\83\89\83E
\83U
\83^
\83u
1053 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1055 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1056 GikoDM.BrowserTabTopAction.Checked := True;
1058 GikoDM.BrowserTabBottomAction.Checked := True;
1061 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1062 GikoDM.BrowserTabTabStyleAction.Checked := True;
1063 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1064 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1066 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1069 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1070 ProgressBar.Parent := StatusBar;
1071 ProgressBar.Top := 2;
1072 ProgressBar.Left := 0;
1073 ProgressBar.Width := StatusBar.Panels[0].Width;
1074 ProgressBar.Height := StatusBar.Height - 2;
1075 ProgressBar.Position := 0;
1077 //
\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Æ)
1078 InitializeBoardPlugIns;
1080 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1081 GikoSys.ListBoardFile;
1082 //
\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É
1084 //
\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è
1085 if (SplashWindow <> nil) then begin
1086 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1090 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1091 for i := Length(BBSs) - 1 downto 0 do begin
1092 if not BBSs[i].IsBoardFileRead then
1093 GikoSys.ReadBoardFile(BBSs[i]);
1095 if SplashWindow <> nil then begin
1096 SplashWindow.ProgressBar.StepBy(20);
1097 SplashWindow.Update;
1101 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1102 RoundList := TRoundList.Create;
1103 RoundList.LoadRoundBoardFile;
1104 RoundList.LoadRoundThreadFile;
1106 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1107 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1108 Style := Style or TVS_NOTOOLTIPS;
1109 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1111 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1112 TreeView.Align := alClient;
1113 FavoriteTreeView.Align := alClient;
1114 FavoriteTreeView.Visible := False;
1116 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1119 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1120 wp.length := sizeof(wp);
1121 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1122 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1123 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1124 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1125 wp.showCmd := SW_HIDE;
1126 SetWindowPlacement(Handle, @wp);
1129 if GikoSys.Setting.WindowMax then
1130 WindowState := wsMaximized;
1132 //
\83M
\83R
\83A
\83j
\83\81
1134 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1135 if FileExists(FileName) then
1136 Animate.FileName := FileName;
1144 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1145 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1146 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1149 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1150 FHistoryList := THistoryList.Create;
1152 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1153 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1154 TreeView, FTreeType);
1156 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1157 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1158 FavoriteDM.ReadFavorite;
1160 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1161 GikoDM.ArrangeAction.Execute;
1163 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1164 case GikoSys.Setting.ListWidthState of
1166 ViewPanel.Width := 1;
1167 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1168 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1171 ViewPanel.Width := GikoSys.Setting.ListWidth;
1172 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1173 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1176 ViewPanel.Width := GikoSys.Setting.ListWidth;
1177 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1178 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1182 case GikoSys.Setting.ListHeightState of
1184 ViewPanel.Height := 1;
1185 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1186 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1189 ViewPanel.Height := GikoSys.Setting.ListHeight;
1190 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1191 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1194 ViewPanel.Height := GikoSys.Setting.ListHeight;
1195 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1196 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1201 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1202 CreateControlThread();
1204 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1205 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1207 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1210 BrowserBoardNameLabel.Caption := '';
1211 BrowserNameLabel.Caption := '';
1214 FTabHintIndex := -1;
1216 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1217 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1218 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1220 MakeDefaultINIFile();
1221 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1222 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1223 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1224 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1227 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1228 SetSelectComboBox();
1230 //
\83A
\83h
\83\8c\83X
\83o
\81[
1231 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1233 //
\83\8a\83\93\83N
\83o
\81[
1235 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1237 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1238 if not FileExists(GikoSys.GetBoardFileName) then begin
1239 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
1240 + '
\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
1241 + '
\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';
1242 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1243 GikoDM.NewBoardAction.Execute;
1246 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1247 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1249 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1250 // FLastRoundTime := 0;
1252 ListView.OnData := TListViewUtils.ListViewData;
1254 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1255 CabinetVisible( False );
1256 if GikoSys.Setting.CabinetVisible then begin
1257 i := CabinetSelectPopupMenu.Items.Count - 1;
1258 if GikoSys.Setting.CabinetIndex = i - 1 then
1259 GikoDM.CabinetHistoryAction.Execute
1260 else if GikoSys.Setting.CabinetIndex = i then
1261 GikoDM.CabinetFavoriteAction.Execute
1263 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1264 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1265 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1266 FIsIgnoreResize := rtResizing;
1267 GikoDM.CabinetBBSAction.Execute;
1270 ShowBBSTreeOld( BBSs[ 0 ] );
1271 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1274 //
\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
1275 for i := 1 to ParamCount do begin
1276 MoveToURL(ParamStr(i));
1279 GikoDM.RepaintStatusBar;
1280 StatusBarResize(Sender);
1282 dummy1.Caption := ItemReservPMenu.Caption;
1283 dummy1.Hint := ItemReservPMenu.Hint;
1285 {$IFDEF SPAM_FILTER_ENABLED}
1286 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1287 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1290 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1291 MouseGesture := TMouseGesture.Create;
1292 GikoSys.Setting.Gestures.LoadGesture(
1293 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1294 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1295 MouseGesture.OnGestureStart := OnGestureStart;
1296 MouseGesture.OnGestureMove := OnGestureMove;
1297 MouseGesture.OnGestureEnd := OnGestureEnd;
1298 if GikoSys.Setting.GestureEnabled then
1299 MouseGesture.SetHook( Handle );
1301 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1302 GikoSys.SetGikoMessage;
1304 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1305 if GikoSys.Setting.AutoLogin then
1306 GikoDM.LoginAction.Execute;
1308 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1310 //
\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è
1311 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1312 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1314 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1315 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1317 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1318 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1319 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1320 DragAcceptFiles(Self.Handle, True);
1323 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1324 procedure TGikoForm.SaveCoolBarSettings;
1327 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1329 SaveMainCoolBarSettings;
1330 SaveBoardCoolBarSettings;
1331 SaveBrowserCoolBarSettings;
1334 procedure TGikoForm.SaveMainCoolBarSettings;
1339 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1340 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1341 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1342 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1343 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1344 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1347 procedure TGikoForm.SaveBoardCoolBarSettings;
1352 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1353 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1354 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1355 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1356 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1357 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1360 procedure TGikoForm.SaveBrowserCoolBarSettings;
1365 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1366 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1367 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1368 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1369 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1370 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1373 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1374 procedure TGikoForm.LoadCoolBarSettings;
1380 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1381 MainCoolBar.Bands.BeginUpdate;
1383 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1384 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1385 CoolSet := GikoSys.Setting.MainCoolSet[i];
1386 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1387 FIsIgnoreResize := rtNone;
1388 SaveCoolBarSettings;
1391 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1392 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1393 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1396 MainCoolBar.Bands.EndUpdate;
1399 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1400 ListCoolBar.Bands.BeginUpdate;
1402 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1403 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1404 CoolSet := GikoSys.Setting.ListCoolSet[i];
1405 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1406 FIsIgnoreResize := rtNone;
1407 SaveCoolBarSettings;
1410 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1411 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1412 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1415 ListCoolBar.Bands.EndUpdate;
1418 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1419 BrowserCoolBar.Bands.BeginUpdate;
1421 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1422 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1423 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1424 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1425 FIsIgnoreResize := rtNone;
1426 SaveCoolBarSettings;
1429 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1430 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1431 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1434 BrowserCoolBar.Bands.EndUpdate;
1439 procedure TGikoForm.FormShow(Sender: TObject);
1443 if FStartUp then begin
1444 ShowWindow(Application.Handle, SW_HIDE);
1446 //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½
1447 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1448 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1449 GikoDM.StdToolBarVisibleActionExecute( nil );
1450 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1451 GikoDM.AddressBarVisibleActionExecute( nil );
1452 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1453 GikoDM.LinkBarVisibleActionExecute( nil );
1454 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1455 GikoDM.ListToolBarVisibleActionExecute( nil );
1456 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1457 GikoDM.ListNameBarVisibleActionExecute( nil );
1458 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1459 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1460 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1461 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1463 // CoolBar
\95\9c\8c³
1464 LoadCoolBarSettings;
1466 //
\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é
1467 // ResetBandInfo( ListCoolBar, ListToolBar );
1468 FIsIgnoreResize := rtNone;
1470 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1471 if GikoSys.Setting.TabAutoLoadSave then begin
1472 GikoDM.TabsOpenAction.Tag := 1;
1473 GikoDM.TabsOpenAction.Execute;
1474 GikoDM.TabsOpenAction.Tag := 0;
1475 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1476 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1477 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1478 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1479 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1480 Application.ProcessMessages;
1483 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1484 if (item <> nil) and (item.IsLogFile) then begin
1485 OpenThreadItem(item, item.URL);
1487 GikoSys.Setting.LastCloseTabURL := '';
1491 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1492 SetGroupIndex(GikoDM.GikoFormActionList);
1498 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1500 // if GikoForm.WindowState <> wsMinimized then
1501 // SaveCoolBarSettings;
1503 if ( GikoSys.Setting.ShowDialogForEnd ) and
1504 (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
1509 GikoSys.Setting.LastCloseTabURL := '';
1510 if GikoSys.Setting.TabAutoLoadSave then begin
1511 GikoDM.TabsSaveAction.Execute;
1512 if (GetActiveContent <> nil) and
1513 (GetActiveContent.IsLogFile) then begin
1514 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1518 if (SearchDialog <> nil) then begin
1519 if (SearchDialog.Visible) then begin
1522 SearchDialog.Release;
1525 SearchDialog := nil;
1529 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1530 GikoDM.CloseAllEditorAction.Execute;
1532 Application.UnhookMainWindow(Hook);
1533 Application.Terminate;
1536 procedure TGikoForm.FormDestroy(Sender: TObject);
1539 // CoolSet: TCoolSet;
1540 wp : TWindowPlacement;
1543 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1545 MouseGesture.UnHook;
1549 ActiveListColumnSave;
1553 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1554 wp.length := sizeof(wp);
1555 GetWindowPlacement(Handle, @wp);
1556 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1557 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1558 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1559 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1560 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1562 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1563 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1564 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1565 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1566 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1567 if GikoDM.ArrangeAction.Checked then
1568 GikoSys.Setting.ListOrientation := gloVertical
1570 GikoSys.Setting.ListOrientation := gloHorizontal;
1571 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1576 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1577 if not GikoSys.Setting.ResRangeHold then
1578 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1581 if WindowState <> wsNormal then
1582 WindowState := wsNormal;
1583 SaveCoolBarSettings;
1585 GikoSys.Setting.WriteWindowSettingFile;
1586 GikoSys.Setting.WriteNameMailSettingFile;
1589 //
\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è
1590 //
\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¢
1592 //
\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
1594 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1596 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1597 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1599 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1601 //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é
1602 FavoriteDM.WriteFavorite;
1606 LockWindowUpdate(Self.Handle);
1608 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1609 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1610 GikoSys.Setting.ShowDialogForAllTabClose := false;
1611 GikoDM.AllTabCloseAction.Execute;
1612 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1616 for i := FBrowsers.Count - 1 downto 0 do begin
1617 TWebBrowser(FBrowsers[i]).Free;
1620 FBrowsers.Capacity := 0;
1625 if BrowserNullTab <> nil then begin
1626 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1627 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1629 BrowserNullTab.Free;
1635 TreeView.Items.BeginUpdate;
1636 TreeView.Items.GetFirstNode.Free;
1637 TreeView.Items.Clear;
1638 TreeView.Items.EndUpdate;
1642 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1644 //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
1645 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1649 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1651 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1663 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1665 RoundList.SaveRoundFile;
1679 FControlThread.Terminate;
1680 FControlThread.WaitFor;
1684 FControlThread.Free;
1686 //
\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é
1687 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1688 GikoForm.PlugInMenu.items[i].Free;
1690 GikoForm.PlugInMenu.Clear;
1693 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1694 // 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Å
1695 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1696 for i := Length(BoardGroups) - 1 downto 0 do begin
1697 //BoardGroups[i].Clear;
1698 BoardGroups[i].Free;
1702 for i := Length( BBSs ) - 1 downto 0 do begin
1703 if BBSs[ i ] <> nil then
1711 if FEvent <> nil then
1714 // TODO
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\82Ì
\94j
\8aü
1716 if FResPopupBrowser <> nil then begin
1717 TOleControl(FResPopupBrowser).Parent := nil;
1718 FResPopupBrowser.Free;
1724 if FPreviewBrowser <> nil then begin
1725 FPreviewBrowser.Free;
1726 FPreviewBrowser := nil;
1730 LockWindowUpdate(0);
1733 //
\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
1734 procedure TGikoForm.SetBBSMenu;
1737 item : TBBSMenuItem;
1740 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1741 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1743 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1744 CabinetSelectPopupMenu.Items[ i ].Free;
1745 CabinetMenu.Items[ i ].Free;
1746 BBSSelectPopupMenu.Items[ i ].Free;
1752 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1753 for i := Length( BBSs ) - 1 downto 0 do begin
1755 item := TBBSMenuItem.Create( PopupMenu );
1756 item.Caption := BBSs[ i ].Title;
1757 item.Data := BBSs[ i ];
1758 item.OnClick := BBSMenuItemOnClick;
1759 CabinetSelectPopupMenu.Items.Insert( 0, item );
1760 item := TBBSMenuItem.Create( PopupMenu );
1761 item.Caption := BBSs[ i ].Title;
1762 item.Data := BBSs[ i ];
1763 item.OnClick := BBSMenuItemOnClick;
1764 CabinetMenu.Insert( 0, item );
1765 item := TBBSMenuItem.Create( PopupMenu );
1766 item.Caption := BBSs[ i ].Title;
1767 item.Data := BBSs[ i ];
1768 item.OnClick := BBSMenuItemOnClick;
1769 BBSSelectPopupMenu.Items.Insert( 0, Item );
1776 procedure TGikoForm.ReloadBBS;
1781 LockWindowUpdate(Self.Handle);
1783 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1784 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1785 GikoSys.Setting.ShowDialogForAllTabClose := false;
1786 GikoDM.AllTabCloseAction.Execute;
1787 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1788 SetContent(BrowserNullTab);
1789 //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
1790 TreeView.Items.Clear;
1792 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1794 RoundList.SaveRoundFile;
1797 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1803 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1805 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1810 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1812 FavoriteDM.WriteFavorite;
1817 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1818 for i := Length(BoardGroups) - 1 downto 0 do begin
1820 BoardGroups[i].Free;
1826 for i := Length( BBSs ) - 1 downto 0 do begin
1827 if BBSs[ i ] <> nil then
1836 FTreeType := gttNone;
1838 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1840 //
\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Æ)
1841 InitializeBoardPlugIns;
1843 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1845 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1846 for i := Length(BBSs) - 1 downto 0 do begin
1847 if not BBSs[i].IsBoardFileRead then
1848 GikoSys.ReadBoardFile(BBSs[i]);
1851 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1854 ShowBBSTree( BBSs[ 0 ] );
1856 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1857 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1858 TreeView, FTreeType);
1860 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1861 FavoriteDM.ReadFavorite;
1865 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1866 RoundList.LoadRoundBoardFile;
1867 RoundList.LoadRoundThreadFile;
1869 LockWindowUpdate(0);
1873 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1874 (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©)
1875 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1877 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1885 threadItem : TThreadItem;
1887 Protocol, Host, Path, Document, Port, Bookmark: string;
1892 ActiveFileName: string;
1897 cResPopup: TResPopupBrowser;
1899 //
\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ª
1900 // 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è)
1901 if Pos('about:..', Text) = 1 then
1902 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1905 if not( TObject(Sender) is TWebBrowser )then
1909 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1910 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1911 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1918 if PreviewTimer.Enabled then
1919 PreviewTimer.Enabled := False;
1920 Application.CancelHint;
1922 if GetActiveContent <> nil then
1923 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1925 ActiveFileName := '';
1927 FActiveContent := nil;
1930 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1931 if (StatusBar.Panels[1].Text = Text2) then begin
1932 if Text2 = '' then begin
1933 if FResPopupBrowser <> nil then begin
1934 if not(Sender is TResPopupBrowser) then
1935 FResPopupBrowser.Clear
1937 TResPopupBrowser(Sender).ChildClear;
1943 StatusBar.Panels[1].Text := Text2;
1946 if FPreviewBrowser <> nil then
1947 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1949 if FResPopupBrowser <> nil then begin
1950 if not(Sender is TResPopupBrowser) then begin
1951 if (FResPopupBrowser.Visible) then begin
1952 FResPopupBrowser.Clear;
1955 TResPopupBrowser(Sender).ChildClear;
1960 if not(Sender is TResPopupBrowser) then
1961 if not GikoSys.Setting.UnActivePopup then
1962 if not GikoForm.Active then
1967 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1968 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1971 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1972 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1973 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1974 if FPreviewBrowser = nil then begin
1975 FPreviewBrowser := TPreviewBrowser.Create(Self);
1976 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1977 TOleControl(FPreviewBrowser).Parent := nil;
1979 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
1980 FPreviewURL := Text2;
1981 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
1982 PreviewTimer.Enabled := True;
1983 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
1984 if Pos('mailto:', Text2) = 1 then begin
1985 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
1986 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
1988 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
1989 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
1990 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
1991 if (Assigned(e)) then begin
1992 CreateResPopupBrowser;
1993 cResPopup := FResPopupBrowser.CreateNewBrowser;
1994 tmp2 := ZenToHan(e.Get_outerText);
1995 if (GikoSys.IsNumeric(tmp2)) then begin
1996 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
1997 wkIntSt := StrToInt64(tmp2);
1998 wkIntTo := StrToInt64(tmp2);
1999 cResPopup.PopupType := gptThread;
2000 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2002 cResPopup.PopupType := gptRaw;
2003 cResPopup.Title := s;
2007 threadItem := GetActiveContent(true);
2008 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2009 PathRec := Gikosys.Parse2chURL2(URL);
2010 if (PathRec.FNoParam) then begin
2014 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2016 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2018 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2020 URL := GikoSys.GetBrowsableThreadURL( URL );
2021 wkIntSt := PathRec.FSt;
2022 wkIntTo := PathRec.FTo;
2024 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2027 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2029 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2031 end else if wkIntSt > wkIntTo then begin
2036 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2041 threadItem := BBSsFindThreadFromURL( URL );
2043 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2044 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2045 if board <> nil then begin
2046 if not board.IsThreadDatRead then
2047 GikoSys.ReadSubjectFile( board );
2048 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2052 if threadItem <> nil then begin
2053 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2054 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2055 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2059 CreateResPopupBrowser;
2060 cResPopup := FResPopupBrowser.CreateNewBrowser;
2061 cResPopup.PopupType := gptThread;
2062 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2066 if (cResPopup <> nil) then begin
2067 if cResPopup.PopupType = gptRaw then begin
2068 if cResPopup.Title <> '' then begin
2069 cResPopup.TitlePopup;
2072 if cResPopup.RawDocument <> '' then begin
2074 end else if cResPopup.Title <> '' then begin
2075 cResPopup.TitlePopup;
2082 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2086 FEnabledCloseButton := Enabled;
2087 SysMenu := GetSystemMenu(Handle, False);
2089 if Enabled then begin
2090 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2092 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2095 DrawMenuBar(Handle);
2098 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2099 var AllowChange: Boolean);
2101 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2102 // if FTreeType = gtt2ch then
2103 // FSortIndex := -1;
2106 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2107 Shift: TShiftState);
2111 if GetActiveList is TBoard then begin
2113 VK_BACK:; // UpFolderButtonClick(Sender);
2114 VK_SPACE: ListDoubleClick(Shift);
2115 VK_RETURN: ListClick;
2118 if ListView.Selected <> nil then begin
2119 pos.X := ListView.Column[ 0 ].Width;
2120 pos.Y := ListView.Selected.Top;
2122 pos.X := ListView.Left;
2123 pos.Y := ListView.Top;
2125 Windows.ClientToScreen( ListView.Handle, pos );
2126 ListPopupMenu.Popup( pos.X, pos.Y );
2129 end else begin // TBBS, TCategory
2131 VK_BACK:; // UpFolderButtonClick(Sender);
2132 VK_SPACE: ListClick;
2133 VK_RETURN: ListDoubleClick(Shift);
2136 if ListView.Selected <> nil then begin
2137 pos.X := ListView.Column[ 0 ].Width;
2138 pos.Y := ListView.Selected.Top;
2140 pos.X := ListView.Left;
2141 pos.Y := ListView.Top;
2143 Windows.ClientToScreen( ListView.Handle, pos );
2144 ListPopupMenu.Popup( pos.X, pos.Y );
2150 function TGikoForm.GetHttpState: Boolean;
2152 Result := FHttpState;
2155 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2156 Column: TListColumn);
2160 vSortIndex : Integer;
2161 vSortOrder : Boolean;
2163 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2164 if TObject( FActiveList ) is TBBS then begin
2165 orderList := GikoSys.Setting.BBSColumnOrder;
2166 vSortIndex := GikoSys.Setting.BBSSortIndex;
2167 vSortOrder := GikoSys.Setting.BBSSortOrder;
2168 end else if TObject( FActiveList ) is TCategory then begin
2169 orderList := GikoSys.Setting.CategoryColumnOrder;
2170 vSortIndex := GikoSys.Setting.CategorySortIndex;
2171 vSortOrder := GikoSys.Setting.CategorySortOrder;
2172 end else if TObject( FActiveList ) is TBoard then begin
2173 orderList := GikoSys.Setting.BoardColumnOrder;
2174 vSortIndex := GikoSys.Setting.BoardSortIndex;
2175 vSortOrder := GikoSys.Setting.BoardSortOrder;
2179 id := Integer( orderList[ idx ] );
2182 if vSortIndex = id then
2183 vSortOrder := not vSortOrder
2185 vSortOrder := id = 0;
2188 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2191 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2192 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2196 DefaultDraw := True;
2198 DefaultDraw := False;
2199 if (cdsSelected in State) or (cdsHot in State) then begin
2200 Sender.Canvas.Brush.Color := clHighlight;
2201 Sender.Canvas.Font.Color := clHighlightText;
2203 Sender.Canvas.Brush.Color := clBtnFace;
2204 Sender.Canvas.Font.Color := clBtnText;
2206 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2207 Sender.Canvas.FillRect(ARect);
2208 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2211 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2216 Nodes := TreeView.Items;
2218 for i := 0 to Nodes.Count - 1 do begin
2219 if Nodes.Item[i].Data = Data then begin
2220 Result := Nodes.Item[i];
2227 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2228 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2229 Headers: OleVariant; var Cancel: WordBool);
2234 kMenuName: string = 'menu:';
2239 if Pos(kMenuName, URL) <> 0 then begin
2240 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2242 if not GikoSys.IsNumeric(sNo) then Exit;
2246 KokoPopupMenu.PopupComponent := nil;
2247 if (Sender is TComponent) then
2248 KokoPopupMenu.PopupComponent := TComponent(Sender);
2249 KokoPopupMenu.Tag := StrToInt(sNo);
2250 KokoPopupMenu.Popup(p.x, p.y);
2251 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2252 Cancel := not GikoSys.Setting.OpenMailer;
2257 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2258 const ARect: TRect; var DefaultDraw: Boolean);
2262 IsBoardNode: Boolean;
2268 Category: TCategory;
2272 DefaultDraw := True;
2274 if FTreeType = gttHistory then Exit;
2276 TreeView.Canvas.Font.Color := clBlue;
2277 IsBoardNode := False;
2278 for i := 0 to TreeView.Items.Count - 1 do begin
2280 if not TreeView.Items[i].IsVisible then
2283 if TObject(TreeView.Items[i].Data) is TCategory then begin
2284 if TreeView.Items[i].Expanded then
2287 IsBoardNode := False;
2288 Category := TCategory(TreeView.Items[i].Data);
2289 for j := 0 to Category.Count - 1 do begin
2290 Board := Category.Items[j];
2291 if Board <> nil then begin
2292 if Board.UnRead > 0 then begin
2300 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2301 IsBoardNode := True;
2302 Board := TBoard(TreeView.Items[i].Data);
2304 Cnt := Board.UnRead;
2310 Bitmap := TBitmap.Create;
2312 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2313 Bitmap.Canvas.Font.Style := [fsBold];
2314 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2319 NodeRect := TreeView.Items[i].DisplayRect(True);
2322 CntText := '(' + IntToStr(Cnt) + ')'
2323 else if Cnt = 1 then
2327 TextWidth := TreeView.Canvas.TextWidth(CntText);
2329 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2331 NodeRect.Left + NodeWidth + TextWidth + 8,
2333 DrawText(TreeView.Canvas.Handle,
2337 DT_SINGLELINE or DT_VCENTER);
2339 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2342 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2343 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2346 Category: TCategory;
2349 DefaultDraw := True;
2351 if FTreeType = gttHistory then Exit;
2353 TreeView.Canvas.Font.Style := [];
2354 if Node <> nil then begin
2355 if TObject(Node.Data) is TCategory then begin
2356 Category := TCategory(Node.Data);
2357 for i := 0 to Category.Count - 1 do begin
2358 Board := Category.Items[i];
2359 if Board <> nil then begin
2360 if Board.UnRead > 0 then begin
2361 TreeView.Canvas.Font.Style := [fsBold];
2366 end else if TObject(Node.Data) is TBoard then begin
2367 Board := TBoard(Node.Data);
2368 if Board.UnRead > 0 then
2369 TreeView.Canvas.Font.Style := [fsBold];
2374 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2376 TreeView.Invalidate;
2378 if TObject(Node.Data) is TBBS then begin
2379 TBBS(Node.Data).NodeExpand := True;
2380 end else if TObject(Node.Data) is TCategory then begin
2381 TCategory(Node.Data).NodeExpand := True;
2382 end else if TObject(Node.Data) is TBoard then begin
2383 TBoard(Node.Data).NodeExpand := True;
2387 procedure TGikoForm.ListViewAllSelect;
2392 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2394 AddMessageList(Msg, nil, Icon);
2396 // *************************************************************************
2397 //!
\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
2398 // *************************************************************************
2399 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2403 boardPlugIn : TBoardPlugIn;
2408 if Item.DownType = gdtBoard then
2409 ATitle := Item.Board.Title
2411 ATitle := Item.ThreadItem.Title;
2413 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2415 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2417 if Item.DownType = gdtBoard then begin
2420 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2421 if GetActiveList = Item.Board then begin
2423 //
\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é
2424 if (GikoSys.Setting.AutoSortThreadList) then begin
2425 GikoSys.Setting.BoardSortIndex := 0;
2426 GikoSys.Setting.BoardSortOrder := True;
2428 Sort.SetSortDate(Now());
2429 SetActiveList(Item.Board);
2431 Item.Board.Modified := True;
2432 Item.Board.IsThreadDatRead := True;
2435 end else if Item.DownType = gdtThread then begin
2438 Item.ThreadItem.NewArrival := True;
2439 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2440 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2441 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2442 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2443 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2444 Item.ThreadItem.Title := Res.FTitle;
2445 ATitle := Item.ThreadItem.Title;
2446 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2447 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2448 ATitle := Res.FTitle;
2450 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2451 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2452 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2456 if GikoSys.Setting.BrowserTabVisible then begin
2457 if GetActiveContent = Item.ThreadItem then
2458 InsertBrowserTab(Item.ThreadItem)
2459 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2460 InsertBrowserTab(Item.ThreadItem, True)
2462 InsertBrowserTab(Item.ThreadItem, False);
2465 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2466 InsertBrowserTab(Item.ThreadItem);
2469 Application.ProcessMessages;
2471 if Item.State = gdsComplete then begin
2473 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2477 PlaySound('NewDiff');
2478 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2483 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2484 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2485 Item.ThreadItem.Round := False;
2486 //Item.ThreadItem.RoundName := '';
2487 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);
2490 //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
2491 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2492 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2493 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2494 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2495 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2496 case GikoForm.ViewType of
2497 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2498 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2499 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2500 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2501 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2502 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2505 RefreshListView(Item.ThreadItem);
2508 end else if Item.State = gdsNotModify then begin
2510 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2511 //SetContent(Item.ThreadItem);
2512 InsertBrowserTab(Item.ThreadItem);
2514 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2515 PlaySound('NoChange');
2516 Screen.Cursor := crDefault;
2517 end else if Item.State = gdsAbort then begin
2519 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2520 end else if Item.State = gdsError then begin
2525 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2526 // if Item.ResponseCode = 302 then
2527 // 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);
2533 if FWorkCount < 0 then FWorkCount := 0;
2534 if FWorkCount = 0 then begin
2536 Animate.Active := False;
2538 Screen.Cursor := crDefault;
2545 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2547 // SetProgressValue(Number, 0, AWorkCountMax);
2548 // ProgressBar.Visible := True;
2549 ProgressBar.Position := 0;
2550 ProgressBar.Max := AWorkCountMax;
2551 FDownloadTitle := AWorkTitle;
2552 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2553 FDownloadMax := AWorkCountMax;
2556 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2558 ProgressBar.Position := 0;
2559 if FDownloadMax <> 0 then
2560 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2563 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2565 ProgressBar.Position := AWorkCount;
2566 // SetProgressValue(Number, AWorkCount);
2567 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2570 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2572 ListItem: TListItem;
2574 MessageListView.Items.BeginUpdate;
2576 ListItem := MessageListView.Items.Add;
2577 ListItem.Caption := ACaption;
2578 ListItem.Data := AObject;
2579 ListItem.MakeVisible(False);
2581 gmiOK: ListItem.ImageIndex := 0;
2582 gmiSAD: ListItem.ImageIndex := 1;
2583 gmiNG: ListItem.ImageIndex := 2;
2584 gmiWhat: ListItem.ImageIndex := 3;
2587 MessageListView.Items.EndUpdate;
2591 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2592 procedure TGikoForm.ReleaseOldestBrowser;
2596 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2597 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2598 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2599 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2605 function TGikoForm.InsertBrowserTab(
2606 ThreadItem : TThreadItem;
2607 ActiveTab : Boolean = True
2610 i, j, idx : Integer;
2611 favItem : TFavoriteThreadItem;
2612 newBrowser : TBrowserRecord;
2617 if Threaditem = nil then Exit;
2619 if ThreadItem.IsLogFile then begin
2620 //
\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é
2621 //
\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é
2622 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2623 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2624 j := FBrowsers.IndexOf(FActiveContent.Browser);
2625 if j = BROWSER_COUNT - 1 then
2626 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2628 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2629 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2632 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2633 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2634 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2635 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2636 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2637 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2638 ReleaseOldestBrowser;
2639 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2640 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2641 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2643 if ActiveTab then begin
2644 BrowserTab.TabIndex := i;
2645 BrowserTab.OnChange(nil);
2652 idx := BrowserTab.TabIndex;
2653 newBrowser := TBrowserRecord.Create;
2654 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2655 ReleaseOldestBrowser;
2656 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2657 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2658 newBrowser.thread := ThreadItem;
2659 newBrowser.Repaint := true;
2661 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2662 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2663 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2664 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2668 if ActiveTab then begin
2669 BrowserTab.TabIndex := 0;
2671 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2672 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2673 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2674 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2678 if ActiveTab then begin
2679 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2680 BrowserTab.TabIndex := 0
2682 BrowserTab.TabIndex := i;
2685 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2687 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2688 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2689 TWebBrowser(FBrowsers[1]) then begin
2694 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2697 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2698 if (ins < 0) then begin
2701 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2702 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2703 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2704 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2706 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2711 if ActiveTab then begin
2712 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2713 BrowserTab.TabIndex := 0
2715 BrowserTab.TabIndex := ins;
2718 Result := newBrowser;
2719 if(ActiveTab) or (idx = -1) then begin
2720 BrowserTab.OnChange(nil);
2723 if BrowserNullTab = nil then begin
2724 BrowserNullTab := TBrowserRecord.Create;
2725 BrowserNullTab.Browser := Browser;
2727 // if BrowserNullTab.thread <> ThreadItem then begin
2728 // BrowserNullTab.Movement := '';
2730 BrowserNullTab.thread := ThreadItem;
2731 Result := BrowserNullTab;
2732 BrowserTab.TabIndex := -1;
2733 SetContent(BrowserNullTab);
2736 if GikoSys.Setting.URLDisplay then
2737 AddressComboBox.Text := ThreadItem.URL;
2741 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2749 ThreadItem: TThreadItem;
2750 Thread: TBrowserRecord;
2751 ThreadTitle, ThreadPTitle: string;
2752 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2755 idx := BrowserTab.TabIndex;
2756 if (not FStartUp) and
2757 (FActiveContent <> nil) and
2758 (FActiveContent.Thread <> Thread.Thread) and
2759 (FActiveContent.Browser <> nil) and
2760 (Assigned(FActiveContent.Browser.Document)) then begin
2763 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2766 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2771 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2772 Thread.Browser.Navigate(BLANK_HTML);
2773 BrowserBoardNameLabel.Caption := '';
2774 ItemBoardImage.Picture := nil;
2775 BrowserNameLabel.Caption := '';
2776 ItemImage.Picture := nil;
2777 BrowserNullTab.Thread := nil;
2778 //TOleControl(BrowserNullTab.Browser).Visible := true;
2779 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2780 FActiveContent := nil;
2782 end else if Thread.Browser = nil then begin
2783 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2784 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2785 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2786 ReleaseOldestBrowser;
2787 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2788 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2791 ThreadTitle := Thread.Thread.Title;
2792 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2793 //ThreadScrollTop := Thread.Thread.ScrollTop;
2794 ThreadIsLog := Thread.Thread.IsLogFile;
2795 ThreadItem := Thread.Thread;
2796 ThreadNewArraical := Thread.Thread.NewArrival;
2797 //ThreadUnRead := Thread.Thread.UnRead;
2798 BBSID := ThreadItem.ParentBoard.BBSID;
2799 FileName := ThreadItem.FileName;
2801 if GetCapture = ListView.Handle then
2804 Screen.Cursor := crHourGlass;
2808 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2809 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2810 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2812 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2813 if (not Assigned(Thread.Browser.Document)) then begin
2814 Thread.Browser.Navigate('about:blank');
2816 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2817 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2818 Application.ProcessMessages;
2819 if idx <> BrowserTab.TabIndex then begin
2824 if (Thread <> nil) and (ThreadItem <>nil) then begin
2825 BrowserBoardNameLabel.Caption := ThreadPTitle;
2826 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2827 BrowserNameLabel.Caption := ThreadTitle;
2828 ItemImage.Picture := nil;
2830 if ThreadNewArraical then
2831 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2833 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2835 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2837 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2838 BrowserNameLabel.Left := ItemImage.Left + 20;
2841 //ActiveContent
\81@
\82Ì
\8dX
\90V
2842 FActiveContent := Thread;
2844 if not ThreadIsLog then begin
2845 Self.Caption := GikoDataModule.CAPTION_NAME ;
2846 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2847 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2849 Thread.Browser.BringToFront;
2850 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2851 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2853 doc.charset := 'Shift_JIS';
2860 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2861 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2862 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2863 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2864 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2865 //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«
2866 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2867 if Thread.Repaint then begin
2868 Thread.Repaint := false;
2870 Thread.Browser.OnStatusTextChange := nil;
2871 LockWindowUpdate(Thread.Browser.ParentWindow);
2872 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2873 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2874 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2878 RefreshListView(ThreadItem);
2880 Screen.Cursor := crDefault;
2884 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2887 if FActiveContent <> nil then begin
2888 Result := FActiveContent.Thread;
2890 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2891 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2892 Result := FResPopupBrowser.CurrentBrowser.Thread;
2902 procedure TGikoForm.SetActiveList(Obj: TObject);
2906 // if FActiveList <> Obj then begin
2909 if ListView.Selected <> nil then
2910 idx := ListView.Selected.Index
2916 ListView.Items.Count := 0;
2917 ListView.Items.Clear;
2918 ListView.Selected := nil;
2919 // ListView.Columns.Clear;
2920 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2921 and (FActiveContent.Thread.IsLogFile) then begin
2923 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2925 on E: Exception do begin
2926 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2927 //
\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é
2928 ReleaseBrowser(FActiveContent);
2929 FActiveContent.Thread := nil;
2930 Self.Caption := GikoDataModule.CAPTION_NAME;
2934 Self.Caption := GikoDataModule.CAPTION_NAME;
2935 //Application.Title := CAPTION_NAME;
2937 // ActiveListColumnSave;
2939 Screen.Cursor := crHourGlass;
2941 if Obj is TBBS then begin
2942 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2943 end else if Obj is TCategory then begin
2944 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2945 end else if Obj is TBoard then begin
2946 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2949 Screen.Cursor := crDefault;
2952 if idx >= 0 then begin
2953 if idx >= ListView.Items.Count then
2954 idx := ListView.Items.Count - 1;
2955 ListView.ItemIndex := idx;
2956 ListView.ItemFocused := ListView.Items.Item[ idx ];
2962 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
2963 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
2964 function TGikoForm.GetActiveList: TObject;
2966 Result := FActiveList;
2969 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
2971 SetListViewType(AViewType, '', False);
2974 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
2979 for i := Length( BBSs ) - 1 downto 0 do begin
2980 BBSs[i].SelectText := SelectText;
2981 BBSs[i].KubetsuChk := KubetsuChk;
2983 ViewType := AViewType;
2984 if ActiveList is TBoard then begin
2985 Board := TBoard(ActiveList);
2987 //gvtAll: ListView.Items.Count := Board.Count;
2988 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
2989 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
2990 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
2991 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
2992 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
2996 SetActiveList(Board);
3000 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3001 const ARect: TRect; var DefaultDraw: Boolean);
3007 if ListView.Items.Count = 0 then begin
3008 DefaultDraw := true;
3009 ListView.Canvas.Brush.Color := ListView.Color;
3010 ListView.Canvas.FillRect(ARect);
3014 ListView.Canvas.Font.Color := clWindowText;
3015 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3018 ListView.Canvas.Font.Color := clBlue;
3019 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';
3022 ListView.Canvas.Font.Color := clGreen;
3023 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3026 ListView.Canvas.Font.Color := clFuchsia;
3027 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';
3030 ListView.Canvas.Font.Color := clMaroon;
3031 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3034 ListView.Canvas.Font.Color := clNavy;
3035 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';
3036 if GetActiveList is TBoard then
3037 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3045 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3046 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3047 ListView.Canvas.TextOut(p.X, p.Y, s);
3049 DefaultDraw := True;
3053 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3055 Item: TDownloadItem;
3057 if not Board.IsThreadDatRead then
3058 GikoSys.ReadSubjectFile(Board);
3059 Item := TDownloadItem.Create;
3061 Item.Board := Board;
3062 Item.DownType := gdtBoard;
3063 Item.ForceDownload := ForceDownload;
3064 FControlThread.AddItem(Item);
3065 if FWorkCount = 0 then begin
3067 Animate.Active := True;
3070 Screen.Cursor := crAppStart;
3078 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3080 Item: TDownloadItem;
3082 Item := TDownloadItem.Create;
3084 Item.ThreadItem := ThreadItem;
3085 Item.DownType := gdtThread;
3086 Item.ForceDownload := ForceDownload;
3087 FControlThread.AddItem(Item);
3088 if FWorkCount = 0 then begin
3090 Animate.Active := True;
3093 Screen.Cursor := crAppStart;
3101 procedure TGikoForm.PlaySound(SoundEventName: string);
3105 if not GikoSys.Setting.Mute then begin
3106 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3107 if FileExists(FileName) then begin
3108 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3109 sndPlaySound(nil, SND_SYNC);
3110 Application.ProcessMessages;
3112 sndPlaySound(PChar(FileName), SND_ASYNC);
3118 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3119 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3121 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3124 procedure TGikoForm.ShowBBSTreeOld(
3132 FavoriteTreeView.Visible := False;
3133 FavoriteToolBar.Hide;
3134 TreeView.Visible := True;
3136 b := CabinetSelectPopupMenu.Items.Count - 1;
3137 for i := 0 to b do begin
3138 item := CabinetSelectPopupMenu.Items[ i ];
3139 if item is TBBSMenuItem then begin
3140 if TBBSMenuItem( item ).Data = inBBS then begin
3141 item.Checked := True;
3142 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3143 CabinetMenu.Items[ i ].Checked := True;
3144 GikoSys.Setting.CabinetIndex := i;
3148 item.Checked := False;
3149 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3150 CabinetMenu.Items[ i ].Checked := False;
3152 CabinetSelectToolButton.Caption := inBBS.Title;
3154 GikoDM.CabinetHistoryAction.Checked := False;
3155 GikoDM.CabinetFavoriteAction.Checked := False;
3157 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3158 FTreeType := gtt2ch;
3159 HistoryToolBar.Hide;
3160 FActiveBBS := inBBS;
3161 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3162 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3163 //?c???[??g?b?v?????I????
3164 if GetActiveList = nil then
3165 TreeView.Selected := TreeView.Items[0]
3167 for i := 0 to TreeView.Items.Count - 1 do begin
3168 if TreeView.Items[i].Data = GetActiveList then begin
3169 TreeView.Selected := TreeView.Items[i];
3173 TreeView.Selected := TreeView.Items[0]
3181 procedure TGikoForm.ShowBBSTree(
3190 FavoriteTreeView.Visible := False;
3191 FavoriteToolBar.Hide;
3192 TreeView.Visible := True;
3194 b := CabinetSelectPopupMenu.Items.Count - 1;
3195 for i := 0 to b do begin
3196 item := CabinetSelectPopupMenu.Items[ i ];
3197 if item is TBBSMenuItem then begin
3198 if TBBSMenuItem( item ).Data = inBBS then begin
3199 item.Checked := True;
3200 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3201 CabinetMenu.Items[ i ].Checked := True;
3202 GikoSys.Setting.CabinetIndex := i;
3206 item.Checked := False;
3207 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3208 CabinetMenu.Items[ i ].Checked := False;
3210 CabinetSelectToolButton.Caption := inBBS.Title;
3212 GikoDM.CabinetHistoryAction.Checked := False;
3213 GikoDM.CabinetFavoriteAction.Checked := False;
3215 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3216 or (not (CabinetPanel.Visible)) then begin
3217 FTreeType := gtt2ch;
3218 HistoryToolBar.Hide;
3219 FActiveBBS := inBBS;
3220 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3221 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3222 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3223 if GetActiveList = nil then begin
3225 TreeClick( TreeView.Items[0] );
3229 for i := 0 to TreeView.Items.Count - 1 do begin
3230 if TreeView.Items[i].Data = GetActiveList then begin
3231 TreeClick( TreeView.Items[i] );
3235 TreeClick( TreeView.Items[0] );
3243 procedure TGikoForm.ShowHistoryTree;
3248 if CabinetPanel.Visible then begin
3249 if FTreeType = gttHistory then begin
3250 CabinetVisible( False );
3251 GikoDM.CabinetHistoryAction.Checked := False;
3253 GikoDM.CabinetHistoryAction.Checked := True;
3256 CabinetVisible( True );
3257 GikoDM.CabinetHistoryAction.Checked := True;
3260 // BBS...BBS, History, Favorite
3261 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3263 FavoriteTreeView.Visible := False;
3264 TreeView.Visible := True;
3266 GikoDM.CabinetBBSAction.Checked := False;
3267 GikoDM.CabinetFavoriteAction.Checked := False;
3269 if FTreeType <> gttHistory then begin
3270 b := CabinetSelectPopupMenu.Items.Count - 1;
3271 for i := 0 to b do begin
3272 item := CabinetSelectPopupMenu.Items[ i ];
3273 if item is TBBSMenuItem then begin
3274 item.Checked := False;
3275 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3276 CabinetMenu.Items[ i ].Checked := False;
3280 FTreeType := gttHistory;
3281 HistoryToolBar.Show;
3282 FavoriteToolBar.Hide;
3283 FHistoryList.SetTreeNode( TreeView );
3284 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3288 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3290 ChangeEvent: TTVChangedEvent;
3291 ChangingEvent: TTVChangingEvent;
3295 if Item is TCategory then
3296 bbs := TCategory( Item ).ParenTBBS
3297 else if Item is TBoard then
3298 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3302 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3303 if Item <> FActiveList then begin
3305 ChangingEvent := nil;
3307 if not CallEvent then begin
3308 ChangeEvent := TreeView.OnChange;
3309 ChangingEvent := TreeView.OnChanging;
3312 if not CallEvent then begin
3313 TreeView.OnChange := nil;
3314 TreeView.OnChanging := nil;
3316 //Application.ProcessMessages;
3317 for i := 0 to TreeView.Items.Count - 1 do begin
3318 if TreeView.Items[i].Data = Item then begin
3319 TreeView.Items[i].Selected := True;
3321 TreeClick(TreeView.Items[i]);
3325 //Application.ProcessMessages;
3327 if not CallEvent then begin
3328 TreeView.OnChange := ChangeEvent;
3329 TreeView.OnChanging := ChangingEvent;
3334 if Item <> FActiveList then begin
3335 ActiveListColumnSave;
3336 if (Item is TBBS) or (Item is TCategory) then begin
3337 ListView.Columns.Clear;
3338 SetActiveList( Item );
3339 end else if Item is TBoard then begin
3340 if not TBoard( Item ).IsThreadDatRead then begin
3341 Screen.Cursor := crHourGlass;
3343 if not TBoard( Item ).IsThreadDatRead then
3344 GikoSys.ReadSubjectFile(TBoard( Item ));
3346 Screen.Cursor := crDefault;
3349 Sort.SetSortDate(Now());
3350 SetActiveList( Item );
3355 if Item is TBoard then begin // not TCategory
3356 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3357 if GikoSys.Setting.ListWidthState = glsMax then begin
3358 GikoDM.BrowserMinAction.Execute;
3359 if GikoForm.Visible then
3363 if GikoSys.Setting.ListHeightState = glsMax then begin
3364 GikoDM.BrowserMinAction.Execute;
3365 if GikoForm.Visible then
3372 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3373 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3375 listItem : TListItem;
3376 threadItem : TThreadItem;
3383 if not (GetActiveList is TBoard) then Exit;
3384 listItem := ListView.GetItemAt( X, Y );
3385 if listItem = nil then Exit;
3386 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3388 threadItem := TThreadItem(ListItem.Data);
3389 InsertBrowserTab(threadItem, False);
3390 if threadItem.IsLogFile then
3391 ListView.UpdateItems(listItem.Index, listItem.Index);
3395 //
\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Å
3396 if (ssDouble in Shift) then
3397 ListDoubleClick(Shift)
3405 Windows.ClientToScreen( ListView.Handle, pos );
3406 ListPopupMenu.Popup( pos.X, pos.Y );
3412 procedure TGikoForm.ListClick;
3414 ListItem: TListItem;
3415 ThreadItem: TThreadItem;
3417 if ListView.SelCount <> 1 then Exit;
3418 ListItem := ListView.Selected;
3419 if ListItem = nil then Exit;
3420 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3422 ThreadItem := TThreadItem(ListItem.Data);
3423 if ThreadItem.IsLogFile then begin
3424 InsertBrowserTab(ThreadItem);
3425 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3427 InsertBrowserTab(ThreadItem);
3430 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3431 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3432 if GikoSys.Setting.ListWidthState = glsMin then begin
3433 GikoDM.BrowserMaxAndFocusAction.Execute;
3436 if GikoSys.Setting.ListHeightState = glsMin then begin
3437 GikoDM.BrowserMaxAndFocusAction.Execute;
3443 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3445 ThreadItem: TThreadItem;
3448 shiftDown := (ssShift in Shift);
3450 if ListView.Selected = nil then Exit;
3452 if TObject(ListView.Selected.Data) is TCategory then begin
3453 SelectTreeNode(ListView.Selected.Data, True);
3454 end else if TObject(ListView.Selected.Data) is TBoard then begin
3455 SelectTreeNode(ListView.Selected.Data, True)
3456 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3457 Application.ProcessMessages;
3458 ThreadItem := TThreadItem(ListView.Selected.Data);
3459 DownloadContent(ThreadItem, shiftDown);
3461 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3462 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3463 if GikoSys.Setting.ListWidthState = glsMin then begin
3464 GikoDM.BrowserMaxAction.Execute;
3465 GikoDM.SetFocusForBrowserAction.Execute;
3468 if GikoSys.Setting.ListHeightState = glsMin then begin
3469 GikoDM.BrowserMaxAction.Execute;
3470 GikoDM.SetFocusForBrowserAction.Execute;
3477 procedure TGikoForm.BrowserMovement(const AName: string);
3479 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3480 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3481 and (FActiveContent <> nil) then begin
3482 FActiveContent.Move(AName);
3485 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3486 procedure TGikoForm.BrowserMovement(scroll: Integer);
3488 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3489 and (FActiveContent <> nil) then begin
3490 FActiveContent.Move(scroll);
3493 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3495 if TObject(Node.Data) is TBBS then begin
3496 TBBS(Node.Data).NodeExpand := False;
3497 end else if TObject(Node.Data) is TCategory then begin
3498 TCategory(Node.Data).NodeExpand := False;
3499 end else if TObject(Node.Data) is TBoard then begin
3500 TBoard(Node.Data).NodeExpand := False;
3502 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3503 TreeClick(TreeView.Selected);
3507 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3509 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3511 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3513 TreeSplitter.Visible := isVisible;
3514 CabinetPanel.Visible := isVisible;
3515 GikoDM.CabinetVisibleAction.Checked := isVisible;
3518 procedure TGikoForm.SelectListItem(List: TList);
3520 TmpListItem: TListItem;
3524 TmpListItem := ListView.Selected;
3525 while TmpListItem <> nil do begin
3526 List.Add(TmpListItem.Data);
3527 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3532 procedure TGikoForm.FormResize(Sender: TObject);
3535 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3536 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3538 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3539 if GikoSys.Setting.ListWidthState = glsMin then begin
3540 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3541 ViewPanel.Width := ThreadMainPanel.Width - 80;
3544 if GikoSys.Setting.ListHeightState = glsMin then begin
3545 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3546 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3550 FIsIgnoreResize := rtResizing;
3551 PostMessage( Handle, USER_RESIZED, 0, 0 );
3556 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3560 FTabHintIndex := -1;
3561 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3562 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3563 DeleteTab(i, BrowserTab.TabIndex);
3568 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3572 FTabHintIndex := -1;
3573 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3574 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3575 DeleteTab(i, BrowserTab.TabIndex);
3580 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3586 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3587 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3588 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3591 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3593 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3594 FActiveContent := nil;
3595 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3596 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3598 FBrowsers.Move(j, BROWSER_COUNT - 1);
3600 BrowserTab.Tabs.BeginUpdate;
3602 GikoSys.Setting.LastCloseTabURL :=
3603 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.URL;
3604 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3605 if ( BrowserTab.Tabs.Count - 1 = index ) and
3606 ( BrowserTab.TabRect(index).Left
3607 <= BrowserTab.DisplayRect.Left ) then begin
3608 BrowserTab.ScrollTabs(-1);
3610 BrowserTab.Tabs.Delete(index);
3611 if selectIndex > index then begin
3612 BrowserTab.TabIndex := selectIndex - 1;
3614 if BrowserTab.Tabs.Count -1 >= selectIndex then
3615 BrowserTab.TabIndex := selectIndex
3617 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3620 BrowserTab.Tabs.EndUpdate;
3622 if BrowserTab.Tabs.Count = 0 then begin
3623 BrowserNullTab.Thread := nil;
3625 if(BrowserTab.TabIndex <> -1) and
3626 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3627 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3628 ReleaseOldestBrowser;
3630 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3631 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3632 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3633 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3636 if( FActiveContent = nil) then
3637 BrowserTab.OnChange(nil);
3639 function TGikoForm.Hook(var Message: TMessage): Boolean;
3641 //
\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Ì
3642 //
\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ð
3646 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3648 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3652 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3654 bBoard, bCategory : Boolean;
3656 bBoard := (GetActiveList is TBoard);
3657 bCategory := (GetActiveList is TCategory);
3658 ItemRoundPMenu.Visible := bBoard;
3659 ItemReservPMenu.Visible := bBoard;
3660 LPMSep01.Visible := bBoard;
3661 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3662 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3663 LPMSep02.Visible := bCategory or bBoard;
3664 KidokuPMenu.Visible := bBoard;
3665 MidokuPMenu.Visible := bBoard;
3666 UrlCopyPMenu.Visible := bCategory or bBoard;
3667 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3668 AllSelectPMenu.Visible := bCategory or bBoard;
3669 LPMSep05.Visible := bCategory or bBoard;
3670 DeletePMenu.Visible := bBoard;
3671 LPMSep06.Visible := bCategory or bBoard;
3672 BoardFavoriteAddMenu.Visible := bCategory;
3673 ThreadFavoriteAddMenu.Visible := bBoard;
3674 SaveThreadFile.Visible := bBoard;
3675 AddRoundNameMenu(ItemReservPMenu);
3676 AddRoundNameMenu(ListReservPMenu);
3679 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3681 FClickNode := TreeView.Selected;
3682 if FClickNode = nil then begin
3683 TreeSelectThreadPupupMenu.Visible := False;
3684 TreeSelectBoardPupupMenu.Visible := False;
3685 TPMSep01.Visible := False;
3686 TreeSelectURLPupupMenu.Visible := False;
3687 TreeSelectNamePupupMenu.Visible := False;
3688 TreeSelectNameURLPupupMenu.Visible := False;
3689 TreeSelectFavoriteAddPupupMenu.Visible := False;
3690 TreeSelectLogDeleteSeparator.Visible := False;
3691 TreeSelectLogDeletePopupMenu.Visible := False;
3692 end else if TObject(FClickNode.Data) is TBoard then begin
3693 TreeSelectThreadPupupMenu.Visible := False;
3694 TreeSelectBoardPupupMenu.Visible := True;
3695 TPMSep01.Visible := True;
3696 TreeSelectURLPupupMenu.Visible := True;
3697 TreeSelectNamePupupMenu.Visible := True;
3698 TreeSelectNameURLPupupMenu.Visible := True;
3699 TreeSelectFavoriteAddPupupMenu.Visible := True;
3700 TreeSelectLogDeleteSeparator.Visible := False;
3701 TreeSelectLogDeletePopupMenu.Visible := False;
3702 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3703 TreeSelectThreadPupupMenu.Visible := False;
3704 TreeSelectBoardPupupMenu.Visible := True;
3705 TPMSep01.Visible := True;
3706 TreeSelectURLPupupMenu.Visible := True;
3707 TreeSelectNamePupupMenu.Visible := True;
3708 TreeSelectNameURLPupupMenu.Visible := True;
3709 TreeSelectFavoriteAddPupupMenu.Visible := True;
3710 TreeSelectLogDeleteSeparator.Visible := False;
3711 TreeSelectLogDeletePopupMenu.Visible := False;
3712 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3713 TreeSelectThreadPupupMenu.Visible := True;
3714 TreeSelectBoardPupupMenu.Visible := False;
3715 TPMSep01.Visible := True;
3716 TreeSelectURLPupupMenu.Visible := True;
3717 TreeSelectNamePupupMenu.Visible := True;
3718 TreeSelectNameURLPupupMenu.Visible := True;
3719 TreeSelectFavoriteAddPupupMenu.Visible := True;
3720 TreeSelectLogDeleteSeparator.Visible := True;
3721 TreeSelectLogDeletePopupMenu.Visible := True;
3722 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3723 TreeSelectThreadPupupMenu.Visible := True;
3724 TreeSelectBoardPupupMenu.Visible := False;
3725 TPMSep01.Visible := True;
3726 TreeSelectURLPupupMenu.Visible := True;
3727 TreeSelectNamePupupMenu.Visible := True;
3728 TreeSelectNameURLPupupMenu.Visible := True;
3729 TreeSelectFavoriteAddPupupMenu.Visible := True;
3730 TreeSelectLogDeleteSeparator.Visible := True;
3731 TreeSelectLogDeletePopupMenu.Visible := True;
3732 end else if (TObject(FClickNode.Data) is TCategory) then begin
3733 TreeSelectThreadPupupMenu.Visible := False;
3734 TreeSelectBoardPupupMenu.Visible := False;
3735 TPMSep01.Visible := False;
3736 TreeSelectURLPupupMenu.Visible := False;
3737 TreeSelectNamePupupMenu.Visible := True;
3738 TreeSelectNameURLPupupMenu.Visible := False;
3739 TreeSelectFavoriteAddPupupMenu.Visible := False;
3740 TreeSelectLogDeleteSeparator.Visible := False;
3741 TreeSelectLogDeletePopupMenu.Visible := False;
3742 end else if FClickNode.IsFirstNode then begin
3743 TreeSelectThreadPupupMenu.Visible := False;
3744 TreeSelectBoardPupupMenu.Visible := False;
3745 TPMSep01.Visible := False;
3746 TreeSelectURLPupupMenu.Visible := False;
3747 TreeSelectNamePupupMenu.Visible := True;
3748 TreeSelectNameURLPupupMenu.Visible := False;
3749 TreeSelectFavoriteAddPupupMenu.Visible := False;
3750 TreeSelectLogDeleteSeparator.Visible := False;
3751 TreeSelectLogDeletePopupMenu.Visible := False;
3753 TreeSelectThreadPupupMenu.Visible := False;
3754 TreeSelectBoardPupupMenu.Visible := False;
3755 TPMSep01.Visible := False;
3756 TreeSelectURLPupupMenu.Visible := False;
3757 TreeSelectNamePupupMenu.Visible := False;
3758 TreeSelectNameURLPupupMenu.Visible := False;
3759 TreeSelectFavoriteAddPupupMenu.Visible := False;
3760 TreeSelectLogDeleteSeparator.Visible := False;
3761 TreeSelectLogDeletePopupMenu.Visible := False;
3765 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3766 var ppDisp: IDispatch; var Cancel: WordBool);
3775 threadItem: TThreadItem;
3776 aElement : IHTMLElement;
3779 Writeln(IntToStr(Integer(ppDisp)));
3782 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3783 if ( aElement <> nil) then begin
3784 Text := aElement.Get_outerText;
3785 Html := aElement.Get_outerHTML;
3786 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3787 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3788 if GikoSys.Setting.ResAnchorJamp then begin
3790 Text := ZenToHan(Trim(Text));
3792 if(AnsiPos('>>', Text) = 1) then begin
3793 //Text := Copy(Text, 3, Length(Text) - 2);
3796 //Text := Copy(Text, 2, Length(Text) - 1);
3800 if AnsiPos('-', Text) <> 0 then begin
3801 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3802 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3803 wkIntTo := StrToIntDef(Text, 0);
3804 if wkIntTo < wkIntSt then
3807 wkIntSt := StrToIntDef(Text, 0);
3810 if wkIntSt <> 0 then begin
3811 FActiveContent.IDAnchorPopup('');
3812 MoveHisotryManager.pushItem(FActiveContent);
3813 if (Sender is TResPopupBrowser) then begin
3814 TResPopupBrowser(Sender).ChildClear;
3816 GetActiveContent(true),
3817 GetActiveContent(true).URL + '&st=' +
3818 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3820 BrowserMovement(IntToStr(wkIntSt));
3825 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3827 URL := GikoSys.GetHRefText(Html);
3828 URL := GikoSys.HTMLDecode(URL);
3829 if AnsiPos('BE:', URL) = 1 then begin
3830 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3831 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3832 threadItem := FActiveContent.Thread;
3833 if threadItem = nil then Exit;
3834 URL := BE_PHP_URL + BNum + '&u=d'
3835 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3838 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3839 ( AnsiPos('ftp://', URL) = 1) then begin
3840 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3841 if GikoSys.Setting.LinkAddAddressBar then begin
3842 idx := AddressComboBox.Items.IndexOf(URL);
3843 if idx = -1 then begin
3844 AddressComboBox.Items.Insert(0, URL);
3845 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3846 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3848 AddressComboBox.Items.Delete(idx);
3849 AddressComboBox.Items.Insert(0, URL);
3852 if (Sender is TResPopupBrowser) then begin
3853 TResPopupBrowser(Sender).ChildClear
3856 MoveHisotryManager.pushItem(FActiveContent);
3864 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3866 if Mouse.Capture <> 0 then
3868 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3869 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3870 FBrowserSizeWidth := ViewPanel.Width;
3872 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3873 FBrowserSizeHeight := ViewPanel.Height;
3875 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3876 if ViewPanel.Width < 2 then begin
3877 ViewPanel.Width := 1;
3878 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3879 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3880 GikoSys.Setting.ListWidthState := glsMax;
3881 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3882 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3883 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3884 GikoSys.Setting.ListWidthState := glsMin;
3886 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3887 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3888 GikoSys.Setting.ListWidthState := glsNormal;
3891 if ViewPanel.Height < 2 then begin
3892 ViewPanel.Height := 1;
3893 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3894 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3895 GikoSys.Setting.ListHeightState := glsMax;
3896 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3897 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3898 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3899 GikoSys.Setting.ListHeightState := glsMin;
3901 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3902 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3903 GikoSys.Setting.ListHeightState := glsNormal;
3906 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3907 FBrowserSizeHeight := ViewPanel.Height
3908 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3909 FBrowserSizeWidth := ViewPanel.Width;}
3912 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3917 BrowserTab.Tabs.BeginUpdate;
3919 if not BrowserTab.Dragging then begin
3920 FTabHintIndex := -1;
3921 BrowserTab.Hint := '';
3922 idx := BrowserTab.TabIndex;
3923 if idx = -1 then begin
3924 SetContent(BrowserNullTab);
3926 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3927 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3928 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3930 FBrowsers.Move(j ,0);
3932 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3933 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3934 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3935 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3937 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3938 ReleaseOldestBrowser;
3940 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3941 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3942 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3944 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3945 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3946 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3948 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3949 AddressComboBox.Text := GetActiveContent.URL;
3951 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3952 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
3955 GikoDM.SetFocusForBrowserAction.Execute;
3959 BrowserTab.Tabs.EndUpdate;
3964 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
3965 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3971 if Button = mbMiddle then begin
3972 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
3975 p := BrowserTab.ScreenToClient(p);
3976 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
3978 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3979 end else if Button = mbLeft then begin
3980 FDragWFirst := true;
3981 FMouseDownPos.X := X;
3982 FMouseDownPos.Y := Y;
3987 procedure TGikoForm.SetBrowserTabState;
3989 CoolBand: TCoolBand;
3991 BrowserBottomPanel.AutoSize := False;
3992 if GikoSys.Setting.BrowserTabVisible then begin
3994 BrowserTab.Tabs.BeginUpdate;
3996 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
3997 BrowserTab.Style := tsTabs;
3998 if GikoSys.Setting.BrowserTabPosition = gtpTop then
3999 BrowserTab.TabPosition := tpTop
4001 BrowserTab.TabPosition := tpBottom;
4002 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4003 BrowserTab.TabPosition := tpTop;
4004 BrowserTab.Style := tsButtons;
4006 BrowserTab.TabPosition := tpTop;
4007 BrowserTab.Style := tsFlatButtons
4010 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4011 BrowserTab.Parent := BrowserTabToolBar;
4012 BrowserBottomPanel.Hide;
4013 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4014 if CoolBand <> nil then
4015 CoolBand.Visible := True;
4017 BrowserTab.Parent := BrowserBottomPanel;
4018 BrowserTab.Top := 0;
4019 BrowserTab.Left := 0;
4020 BrowserBottomPanel.Show;
4021 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4022 if CoolBand <> nil then
4023 CoolBand.Visible := False;
4026 BrowserTab.Tabs.EndUpdate;
4030 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4031 if CoolBand <> nil then
4032 CoolBand.Visible := False;
4033 BrowserBottomPanel.Visible := False;
4034 GikoDM.AllTabCloseAction.Execute;
4038 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4039 Y: Integer; State: TDragState; var Accept: Boolean);
4043 idx := BrowserTab.IndexOfTabAt(X, Y);
4044 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4047 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4052 FDragWFirst := False;
4053 idx := BrowserTab.IndexOfTabAt(X, Y);
4055 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4058 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4059 Shift: TShiftState; X, Y: Integer);
4062 ThreadItem: TThreadItem;
4065 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4067 if ( ssLeft in Shift ) then begin
4068 if (FDragWFirst) then begin
4069 BrowserTab.EndDrag(false);
4070 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4073 BrowserTab.EndDrag(false);
4074 FDragWFirst := false;
4077 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4078 Application.CancelHint;
4079 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4080 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4081 BrowserTab.Hint := ThreadItem.Title;
4082 Application.ShowHint := True;
4084 BrowserTab.Hint := '';
4085 Application.ShowHint := True;
4087 FTabHintIndex := TabIdx;
4092 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4093 const pDisp: IDispatch; var URL: OleVariant);
4095 FDispHtmlDocument: DispHTMLDocument;
4096 BrowserRecord :TBrowserRecord;
4099 threadItem : TThreadItem;
4101 if TObject(Sender) is TWebBrowser then begin
4102 BrowserRecord := nil;
4103 if TWebBrowser(Sender) <> Browser then begin
4104 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4105 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4106 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4110 if BrowserRecord <> nil then begin
4111 if BrowserRecord.Event <> nil then
4112 BrowserRecord.Event.Free;
4113 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4114 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4115 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4116 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4119 if GetActiveContent <> nil then begin
4120 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4121 if FEvent <> nil then
4123 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4124 FEvent.OnContextMenu := OnDocumentContextMenu;
4125 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4127 if FEvent <> nil then begin
4135 if (BrowserRecord <> nil) and
4136 Assigned( BrowserRecord.Thread ) then begin
4137 threadItem := BrowserRecord.Thread;
4139 if (threadItem.JumpAddress > 0) then begin
4140 if threadItem.UnRead then begin
4141 threadItem.UnRead := False;
4143 RefreshListView(threadItem);
4145 //
\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®
4146 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4147 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4148 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4149 threadItem.JumpAddress := 0;
4151 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4154 end else if threadItem.UnRead then begin
4155 threadItem.UnRead := False;
4157 BrowserRecord.Move('new');
4158 RefreshListView(threadItem);
4159 end else if threadItem.ScrollTop <> 0 then begin
4161 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4162 doc.Body.ScrollTop := threadItem.ScrollTop;
4165 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4170 LockWindowUpdate(0);
4173 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4175 AddRoundNameMenu(RoundNamePopupMenu.Items);
4178 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4184 Item := TMenuItem.Create(Self);
4185 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4186 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4188 Item := TMenuItem.Create(Self);
4189 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4190 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4192 Item := TMenuItem.Create(Self);
4193 Item.Caption := '-';
4195 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4196 Item := TMenuItem.Create(Self);
4197 Item.Caption := RoundList.RoundNameList[i];
4198 Item.OnClick := SetSelectRoundName;
4203 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4205 threadItem : TThreadItem;
4207 if ParentName <> 'dummy1' then begin
4208 SetSelectItemRound(RoundFlag, RoundName);
4210 threadItem := GetActiveContent;
4211 if threadItem <> nil then begin
4212 threadItem.RoundName := RoundName;
4214 RoundList.RoundNameList.Add(RoundName);
4215 threadItem.Round := RoundFlag;
4220 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4225 List := TList.Create;
4227 SelectListItem(List);
4228 for i := 0 to List.Count - 1 do begin
4229 if TObject(List[i]) is TBoard then begin
4230 TBoard(List[i]).RoundName := RoundName;
4232 RoundList.RoundNameList.Add(RoundName);
4233 TBoard(List[i]).Round := RoundFlag;
4234 end else if TObject(List[i]) is TThreadItem then begin
4235 if TThreadItem(List[i]).IsLogFile then begin
4236 TThreadItem(List[i]).RoundName := RoundName;
4238 RoundList.RoundNameList.Add(RoundName);
4239 TThreadItem(List[i]).Round := RoundFlag;
4248 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4250 MenuItem: TMenuItem;
4252 if Sender is TMenuItem then begin
4253 MenuItem := TMenuItem(Sender);
4254 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4259 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4264 if CoolBar = nil then
4266 for i := 0 to CoolBar.Bands.Count - 1 do begin
4267 if CoolBar.Bands[i].Control = Control then begin
4268 Result := CoolBar.Bands[i];
4274 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4276 if BrowserTab.Parent = BrowserTabToolBar then
4277 BrowserTab.Width := BrowserTabToolBar.Width;
4280 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4285 procedure TGikoForm.SetMenuFont;
4287 // GikoSys.MenuFont(MenuToolBar.Font);
4288 // MenuToolBar.Buttons[0].AutoSize := False;
4289 // MenuToolBar.Buttons[0].AutoSize := True;
4290 // MenuToolBar.Font.Color := clMenuText;
4291 GikoSys.MenuFont(MainCoolBar.Font);
4292 MenuToolBar.Buttons[0].AutoSize := False;
4293 MenuToolBar.Buttons[0].AutoSize := True;
4294 MainCoolBar.AutoSize := False;
4295 MainCoolBar.AutoSize := True;
4297 GikoSys.MenuFont(ListCoolBar.Font);
4298 GikoSys.MenuFont(BrowserCoolBar.Font);
4299 // MenuToolBar.Font.Color := clMenuText;
4302 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4306 if FavoriteDM.Modified then begin
4309 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4310 NewMenu := TMenuItem.Create(MainMenu);
4311 NewMenu.Action := GikoDM.FavoriteAddAction;
4312 FavoriteMenu.Add(NewMenu);
4313 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4314 NewMenu := TMenuItem.Create(FavoriteMenu);
4315 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4316 FavoriteMenu.Add(NewMenu);
4317 //
\83Z
\83p
\83\8c\81[
\83^
4318 FavoriteMenu.InsertNewLineAfter(NewMenu);
4319 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4320 FavoriteDM.Modified := false;
4324 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4327 NewMenu: array of TMenuItem;
4329 SetLength(NewMenu, Node.Count);
4330 Node := Node.getFirstChild;
4332 while ( Node <> nil ) do begin
4333 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4334 NewMenu[i].AutoHotkeys := maAutomatic;
4335 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4336 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4338 if TObject(Node.Data) is TFavoriteFolder then begin
4339 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4340 CreateFavMenu(Node, NewMenu[i]);
4341 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4342 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4343 NewMenu[i].OnClick := FavoriteClick;
4344 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4345 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4346 NewMenu[i].OnClick := FavoriteClick;
4349 Node := Node.getNextSibling;
4351 MenuItem.Add(NewMenu);
4354 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4356 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';
4357 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4359 Dlg : TFavoriteAddDialog;
4365 if Item is TFavoriteBoardItem then
4366 Item := TFavoriteBoardItem( Item ).Item
4367 else if Item is TFavoriteThreadItem then
4368 Item := TFavoriteThreadItem( Item ).Item;
4370 Node := FavoriteTreeView.Items.GetFirstNode;
4371 if Item is TBoard then begin
4372 ItemURL := TBoard( Item ).URL;
4373 while Node <> nil do begin
4375 if TObject( Data ) is TFavoriteBoardItem then begin
4376 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4377 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4382 Node := Node.GetNext;
4384 Dlg := TFavoriteAddDialog.Create(Self);
4386 Dlg.SetBoard( TBoard( Item ) );
4391 end else if Item is TThreadItem then begin
4392 ItemURL := TThreadItem( Item ).URL;
4393 while Node <> nil do begin
4395 if TObject( Data ) is TFavoriteThreadItem then begin
4396 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4397 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4402 Node := Node.GetNext;
4404 Dlg := TFavoriteAddDialog.Create(Self);
4406 Dlg.SetThreadItem( TThreadItem( Item ) );
4416 procedure TGikoForm.FavoriteClick(Sender: TObject);
4418 FavoriteClick( Sender, True );
4421 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4424 ThreadItem: TThreadItem;
4425 FavBoard: TFavoriteBoardItem;
4426 FavThread: TFavoriteThreadItem;
4430 if Sender is TFavoriteMenuItem then
4431 Item := TFavoriteMenuItem(Sender).Data
4432 else if Sender is TLinkToolButton then
4433 Item := TLinkToolButton(Sender).Data
4434 else if Sender is TTreeNode then
4435 Item := TTreeNode( Sender ).Data
4439 if TObject(Item) is TFavoriteBoardItem then begin
4440 FavBoard := TFavoriteBoardItem(Item);
4441 Board := FavBoard.Item;
4442 if Board <> nil then begin
4443 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4444 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4445 SelectTreeNode(Board, True);
4447 end else if TObject(Item) is TFavoriteThreadItem then begin
4448 FavThread := TFavoriteThreadItem(Item);
4449 ThreadItem := FavThread.Item;
4450 if ThreadItem = nil then
4453 InsertBrowserTab(ThreadItem, ActiveTab);
4455 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4456 if GikoSys.Setting.ListWidthState = glsMin then begin
4457 GikoDM.BrowserMaxAndFocusAction.Execute;
4460 if GikoSys.Setting.ListHeightState = glsMin then begin
4461 GikoDM.BrowserMaxAndFocusAction.Execute;
4467 procedure TGikoForm.BBSMenuItemOnClick(
4472 if Sender is TBBSMenuItem then
4473 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4477 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4479 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4482 //!
\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é)
4483 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4485 stRes, edRes : Int64;
4486 browserRec : TBrowserRecord;
4487 threadNumber : String;
4492 Thread.JumpAddress := 0;
4493 //
\83^
\83u
\82ð
\90¶
\90¬
4494 browserRec := InsertBrowserTab(Thread);
4495 if (browserRec <> nil) then begin
4496 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4497 threadNumber := ChangeFileExt(Thread.FileName, '');
4498 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4499 //
\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
4500 if (StrToInt64(threadNumber) = stRes) then begin
4501 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4502 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4506 if ( stRes > 0 ) then begin
4507 Thread.JumpAddress := stRes;
4509 //
\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é
4510 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4511 DownloadContent(Thread);
4512 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4513 browserRec.Move(IntToStr(stRes));
4514 Thread.JumpAddress := 0;
4516 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4517 Thread.ScrollTop := doc.Body.ScrollTop;
4524 procedure TGikoForm.MoveToURL(const inURL: string);
4526 protocol, host, path, document, port, bookmark : string;
4527 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4529 BBSID, BBSKey: string;
4530 {tmpBoard,} Board: TBoard;
4531 ThreadItem: TThreadItem;
4534 tmpThread : TThreadItem;
4535 shiftDown : Boolean;
4539 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4540 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4543 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4544 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4545 if shiftDown then begin
4546 GikoSys.OpenBrowser(inURL, gbtUserApp);
4548 end else if ctrlDown then begin
4549 GikoSys.OpenBrowser(inURL, gbtIE);
4553 //=====
\83v
\83\89\83O
\83C
\83\93
4556 bi := Length(BoardGroups) - 1;
4557 for i := 1 to bi do begin
4558 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4559 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4562 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4563 Board := BBSsFindBoardFromURL( boardURL );
4566 if Board = nil then begin
4568 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4569 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4572 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4573 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4574 ShowBBSTree( BBSs[ 1 ] );
4577 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4578 if not Board.IsThreadDatRead then begin
4579 GikoSys.ReadSubjectFile( Board );
4583 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4584 if ThreadItem = nil then begin
4585 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4586 ThreadItem := tmpThread;
4587 Board.Insert( 0, ThreadItem );
4588 if ActiveList is TBoard then begin
4589 if TBoard(ActiveList) = Board then
4590 ListView.Items.Count := ListView.Items.Count + 1;
4595 OpenThreadItem(ThreadItem, inURL);
4602 Board := BBSsFindBoardFromURL(
4603 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4605 if Board <> nil then begin
4606 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4607 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4608 SelectTreeNode( Board, True );
4616 // 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¢
4620 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4621 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4622 Board := BBSsFindBoardFromURL( boardURL );
4623 if Board = nil then begin
4624 //
\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
4625 GikoSys.OpenBrowser(inURL, gbtUserApp);
4628 //
\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é
4630 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4631 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4632 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4633 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4634 GikoSys.OpenBrowser(inURL, gbtUserApp);
4639 if not Board.IsThreadDatRead then
4640 GikoSys.ReadSubjectFile(Board);
4641 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4642 ThreadItem := Board.FindThreadFromURL( URL );
4643 //
\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)
4644 if ThreadItem = nil then begin
4645 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4648 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4649 if ThreadItem = nil then begin
4650 ThreadItem := TThreadItem.Create( nil, Board, URL );
4651 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4652 Board.Insert(0, ThreadItem);
4653 if ActiveList is TBoard then begin
4654 if TBoard(ActiveList) = Board then
4655 ListView.Items.Count := ListView.Items.Count + 1;
4658 //
\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é
4659 if (not ThreadItem.IsLogFile) then begin
4660 if AnsiPos(Host, Board.URL) = 0 then
4661 ThreadItem.DownloadHost := Host
4663 ThreadItem.DownloadHost := '';
4665 OpenThreadItem(ThreadItem, inURL);
4669 Board := BBSsFindBoardFromURL( inURL );
4670 if Board = nil then begin
4671 GikoSys.OpenBrowser(inURL, gbtAuto);
4673 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4674 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4675 SelectTreeNode( Board, True );
4680 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4682 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4683 CoolBarResized( Sender, MainCoolBar );
4686 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4687 Shift: TShiftState);
4689 if Key = VK_RETURN then
4690 GikoDM.MoveToAction.Execute;
4693 procedure TGikoForm.BrowserEnter(Sender: TObject);
4695 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4698 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4700 CDS:PCopyDataStruct;
4704 CDS := Message.CopyDataStruct;
4705 GetMem(PC, CDS^.cbData);
4707 lstrcpy(PC,CDS^.lpData);
4708 SetString(sURL, PC,lstrlen(PC));
4713 Message.Result := 1;
4716 procedure TGikoForm.WndProc(var Message: TMessage);
4718 senderBrowser : TWebBrowser;
4724 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4727 if Message.WParam = SC_MINIMIZE then begin
4729 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4732 TreeClick( TreeView.Selected );
4737 if (GikoSys.Setting.StoredTaskTray) then begin
4744 USER_DOCUMENTCOMPLETE:
4745 if (Message.WParam <> 0) and
4746 (TObject(Message.WParam) is TWebBrowser) then begin
4747 senderBrowser := TWebBrowser( Message.WParam );
4748 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4757 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4762 //
\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Í
4763 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4764 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4765 if Msg.CharCode in [VK_BACK] then begin
4766 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4767 if Msg.KeyData > 0 then begin
4770 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4774 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4775 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4778 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4781 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4782 if Msg.CharCode in [VK_BACK] then begin
4783 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4784 if Msg.KeyData > 0 then begin
4787 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4790 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4793 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4797 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4801 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4806 PreviewTimer.Enabled := False;
4810 ARect := FPreviewBrowser.GetWindowRect(p);
4812 FPreviewBrowser.PreviewImage(FPreviewURL);
4814 if ARect.Bottom > Screen.DesktopHeight then begin
4815 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4817 if (ARect.Right > Screen.DesktopWidth) then begin
4818 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4820 if (ARect.Left < Screen.DesktopLeft) then begin
4821 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4823 if (ARect.Top < Screen.DesktopTop) then begin
4824 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4827 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4828 ARect.Left, ARect.Top,
4829 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4830 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4832 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4833 FPreviewBrowserRect := ARect;
4836 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4840 if PreviewTimer.Enabled then
4841 PreviewTimer.Enabled := False;
4843 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4844 FResPopupBrowser.Clear;
4847 if (FPreviewBrowser <> nil)
4848 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4849 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4850 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4851 Pos := Mouse.CursorPos;
4852 Pos.X := Pos.X + Left;
4853 Pos.Y := Pos.Y + Top;
4854 if (FPreviewBrowserRect.Left > Pos.X) or
4855 (FPreviewBrowserRect.Right < Pos.X) or
4856 (FPreviewBrowserRect.Top > Pos.Y) or
4857 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4858 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4862 Message.Result := 1;
4865 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4867 GikoDM.MsgBarCloseAction.Execute;
4870 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4872 Doc: IHtmlDocument2;
4873 Range: IHTMLTxtRange;
4876 ThreadItem: TThreadItem;
4879 FactiveContent.IDAnchorPopup('');
4880 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4881 if Assigned(Doc) then begin
4882 Range := Doc.selection.createRange as IHTMLTxtRange;
4883 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4884 s := ZenToHan(Trim(s));
4885 if GikoSys.IsNumeric(s) then begin
4886 Num := StrToInt64(s);
4887 ThreadItem := GetActiveContent(true);
4888 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
4889 and (Num > 0)then begin
4890 CreateResPopupBrowser;
4891 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
4892 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
4893 FResPopupBrowser.Popup;
4903 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4905 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4906 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4908 if FTreeType = gttHistory then begin
4909 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4910 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4913 TreeView.Items.Clear;
4917 procedure TGikoForm.SetLinkBar;
4921 ToolButton: TLinkToolButton;
4922 MenuItem: TMenuItem;
4923 oldIgnoreResize : TResizeType;
4925 oldIgnoreResize := FIsIgnoreResize;
4926 FIsIgnoreResize := rtResizing;
4927 MainCoolBar.Bands.BeginUpdate;
4929 LinkBarPopupMenu.Items.Clear;
4930 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4931 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4932 LinkToolBar.Buttons[i].Free;
4933 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4934 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4935 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4936 ToolButton := TLinkToolButton.Create(LinkToolBar);
4937 // ToolButton.Parent := LinkToolBar;
4938 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4939 MenuItem := TMenuItem.Create(Self);
4940 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4941 LinkBarPopupMenu.Items.Add(MenuItem);
4942 ToolButton.MenuItem := MenuItem;
4943 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4944 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4945 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4946 ToolButton.OnClick := FavoriteClick;
4947 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4948 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4949 ToolButton.OnClick := FavoriteClick;
4951 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4952 ToolButton.Left := 10000;
4953 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
4954 ToolButton.AutoSize := True;
4955 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
4956 ToolButton.OnDragOver := FavoriteDragOver;
4957 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
4958 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
4959 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
4960 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
4961 //ToolButton.DragMode := dmAutomatic;
4962 ToolButton.DragMode := dmManual;
4963 ToolButton.PopupMenu := FavoriteTreePopupMenu;
4965 LinkToolBar.InsertControl(ToolButton);
4970 { if LinkToolBar.ButtonCount = 0 then begin
4971 ToolButton := TLinkToolButton.Create(LinkToolBar);
4972 ToolButton.Style := tbsButton;
4973 ToolButton.ImageIndex := -1;
4974 ToolButton.Caption := '';
4975 LinkToolBar.InsertControl(ToolButton);
4978 MainCoolBar.Bands.EndUpdate;
4979 LoadCoolBarSettings;
4980 FIsIgnoreResize := oldIgnoreResize;
4984 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
4992 if Sender = FavoriteTreeView then begin
4993 Node := FavoriteTreeView.GetNodeAt(X, Y);
4998 bound := Node.DisplayRect( False );
4999 height := bound.Bottom - bound.Top;
5000 if (bound.Top + height / 2) <= Y then
5001 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5006 if Node.IsFirstNode then
5011 if FDropSpaceNode <> nil then
5012 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5015 if Change then begin
5016 if FDropSpaceNode <> nil then
5017 FDropSpaceNode.Free;
5019 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5020 FDropSpaceNode.MoveTo( Node, naInsert );
5021 FDropSpaceNode.ImageIndex := -1;
5022 FDropSpaceNode.SelectedIndex := -1;
5026 if Source = FavoriteTreeView then begin
5027 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5032 end else if Source = BrowserTab then
5034 else if Source = ListView then
5036 else if Source is TLinkToolButton then
5038 else if Source = TreeView then
5044 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5047 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5050 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5052 // FDragging := true;
5055 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5057 SenderNode: TTreeNode;
5058 LinkToolButton: TLinkToolButton;
5061 LinkToolButton := TLinkToolButton( Sender );
5062 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5063 SenderNode.Selected := False;
5064 FavoriteDragDrop( SenderNode, Source );
5070 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5072 favButton : TLinkToolButton;
5073 favThreadItem : TFavoriteThreadItem;
5079 if Sender is TLinkToolButton then begin
5080 favButton := TLinkToolButton( Sender );
5081 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5082 favThreadItem := TFavoriteThreadItem( favButton.Data );
5083 if favThreadItem.Item <> nil then
5084 InsertBrowserTab( favThreadItem.Item, False );
5092 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5096 TToolButton( Sender ).DragMode := dmManual;
5097 if ssLeft in Shift then begin
5098 // 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)
5099 if FDragTime = 0 then begin
5100 FDragTime := GetTickCount();
5102 Now := GetTickCount();
5103 if (Now - FDragTime) > 500 then begin
5104 if FDragButton <> TToolButton( Sender ) then begin
5106 FDragButton := TToolButton( Sender );
5107 TToolButton(Sender).BeginDrag(false ,5);
5110 {$IF Defined(debug)}
5111 ShowMessage('Error');
5122 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5127 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5132 for i := 0 to ToolBar.ButtonCount - 1 do
5133 if ToolBar.Buttons[i].Visible then
5134 Result := Result + ToolBar.Buttons[i].Width;
5137 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5139 Control : TWinControl;
5142 Control := FindControl(BandInfo^.hwndChild);
5143 if Control = nil then
5146 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5147 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5148 idx := MainCoolBar.Bands[ i ].ID;
5152 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5153 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5154 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5155 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5156 BandInfo^.cxMinChild := 0;
5157 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5158 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5159 end else if Control = LinkToolBar then begin
5160 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5161 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5162 BandInfo^.cxMinChild := 0;
5163 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5164 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5165 end else begin // AddressToolBar
5166 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5167 BandInfo^.cxMinChild := 0;
5168 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5172 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5178 ChevronPopupMenu.Items.Clear;
5180 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5181 if MainCoolBar.Bands[ i ].Visible then begin
5182 if Idx = Int64(RebarChevron^.uBand) then begin
5189 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5190 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5192 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5193 ToolBarChevronMenu(StdToolBar);
5194 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5198 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5199 ChevronPopupMenu.Popup(p.x, p.y);
5203 procedure TGikoForm.MenuBarChevronMenu;
5204 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5210 for i := 0 to MenuItem.Count - 1 do begin
5212 if MenuItem[i] is TFavoriteMenuItem then begin
5213 Item := TFavoriteMenuItem.Create(Self);
5214 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5216 Item := TMenuItem.Create(Self);
5217 Item.Caption := MenuItem[i].Caption;
5218 Item.Action := MenuItem[i].Action;
5219 Item.ImageIndex := MenuItem[i].ImageIndex;
5220 Item.OnClick := MenuItem[i].OnClick;
5221 PopupItem.Add(Item);
5222 if MenuItem[i].Count > 0 then
5223 SetSubMenu(MenuItem[i], Item);
5232 ChevronPopupMenu.Items.Clear;
5233 ChevronPopupMenu.Images := MainMenu.Images;
5234 bw := GetWidthAllToolButton(MenuToolBar);
5235 if MenuToolBar.Width < bw then begin
5237 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5238 w := w + MenuToolBar.Buttons[i].Width;
5239 if MenuToolBar.Width <= w then begin
5240 Item := TMenuItem.Create(Self);
5241 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5242 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5243 ChevronPopupMenu.Items.Add(Item);
5244 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5250 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5251 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5256 if Assigned(PopupMenu.OnPopup) then
5257 PopupMenu.OnPopup(nil);
5258 for i := 0 to PopupMenu.Items.Count - 1 do begin
5260 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5261 Item := TFavoriteMenuItem.Create(Self);
5262 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5264 Item := TMenuItem.Create(Self);
5265 Item.Caption := PopupMenu.Items[i].Caption;
5266 Item.Action := PopupMenu.Items[i].Action;
5267 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5268 Item.OnClick := PopupMenu.Items[i].OnClick;
5269 PopupItem.Add(Item);
5278 ChevronPopupMenu.Items.Clear;
5279 ChevronPopupMenu.Images := ToolBar.HotImages;
5280 bw := GetWidthAllToolButton(ToolBar);
5281 if ToolBar.Width < bw then begin
5283 for i := 0 to ToolBar.ButtonCount - 1 do begin
5284 if ToolBar.Buttons[i].Visible then
5285 w := w + ToolBar.Buttons[i].Width;
5286 if ToolBar.Width <= w then begin
5287 if ToolBar.Buttons[i].Tag = 0 then begin
5288 Item := TMenuItem.Create(Self);
5289 if ToolBar.Buttons[i].Style = tbsSeparator then
5292 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5293 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5296 Item.Caption := ToolBar.Buttons[i].Caption;
5297 Item.Action := ToolBar.Buttons[i].Action;
5299 //Item.Visible := True;
5301 ChevronPopupMenu.Items.Add(Item);
5302 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5304 Item.OnClick := nil;
5305 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5313 procedure TGikoForm.LinkBarChevronMenu;
5318 Item: TFavoriteMenuItem;
5320 Button: TLinkToolButton;
5322 ChevronPopupMenu.Items.Clear;
5323 ChevronPopupMenu.Images := LinkToolBar.Images;
5324 bw := GetWidthAllToolButton(LinkToolBar);
5325 if LinkToolBar.Width < bw then begin
5327 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5328 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5329 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5330 w := w + LinkToolBar.Buttons[j].Width;
5331 if LinkToolBar.Width <= w then begin
5332 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5333 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5334 Item := TFavoriteMenuItem.Create(Self);
5335 if TObject(Button.Data) is TFavoriteFolder then begin
5336 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5337 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5338 Item.OnClick := FavoriteClick;
5339 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5340 Item.OnClick := FavoriteClick;
5342 Item.Data := Button.Data;
5343 Item.Caption := LinkToolBar.Buttons[j].Caption;
5344 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5345 ChevronPopupMenu.Items.Add(Item);
5356 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5357 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5358 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5360 \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É
5361 \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
5363 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5365 bandInfo : tagREBARBANDINFOA;
5366 pBandInfo : PReBarBandInfoA;
5373 pBandInfo := @bandInfo;
5374 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5375 bandInfo.cbSize := sizeof( bandInfo );
5376 bandInfo.hwndChild := h;
5377 bandInfo.cyMinChild := bar.Height;
5378 bar.OnBandInfo( nil, pBandInfo );
5379 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5381 for i := bar.Bands.Count - 1 downto 0 do begin
5382 if bar.Bands[ i ].Control.Handle = h then begin
5388 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5392 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5394 Control: TWinControl;
5397 Control := FindControl(BandInfo^.hwndChild);
5398 if Control = nil then
5401 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5402 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5403 idx := ListCoolBar.Bands[ i ].ID;
5407 if Control = ListToolBar then begin
5408 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5409 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5410 BandInfo^.cxMinChild := 0;
5411 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5412 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5414 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5415 BandInfo^.cxMinChild := 0;
5416 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5420 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5425 ChevronPopupMenu.Items.Clear;
5426 Idx := RebarChevron^.uBand;
5427 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5428 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5429 ToolBarChevronMenu(ListToolBar);
5432 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5433 ChevronPopupMenu.Popup(p.x, p.y);
5437 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5439 Control: TWinControl;
5442 Control := FindControl(BandInfo^.hwndChild);
5443 if Control = nil then
5446 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5447 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5448 idx := BrowserCoolBar.Bands[ i ].ID;
5452 if Control = BrowserToolBar then begin
5453 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5454 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5455 BandInfo^.cxMinChild := 0;
5456 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5457 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5459 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5460 BandInfo^.cxMinChild := 0;
5461 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5465 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5470 ChevronPopupMenu.Items.Clear;
5471 Idx := RebarChevron^.uBand;
5472 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5473 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5474 ToolBarChevronMenu(BrowserToolBar)
5477 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5478 ChevronPopupMenu.Popup(p.x, p.y);
5482 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5484 if Column^.iImage = -1 then begin
5485 Column^.mask := Column^.mask or LVCF_FMT;
5487 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5488 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5492 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5497 for i := bar.ButtonCount - 1 downto 0 do begin
5498 if bar.Buttons[ i ].Action = action then begin
5499 Result := bar.Buttons[ i ];
5505 procedure TGikoForm.SetToolBarPopup;
5508 aIEButton : TToolButton;
5509 aCabinetBBSButton : TToolButton;
5510 aResRangeButton : TToolButton;
5511 aThreadRangeButton: TToolButton;
5513 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5515 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5516 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5517 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5518 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5519 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5521 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5522 if aIEButton <> nil then
5523 aIEButton.DropdownMenu := BrowserPopupMenu;
5524 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5525 if aCabinetBBSButton <> nil then
5526 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5527 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5528 if aResRangeButton <> nil then
5529 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5530 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5531 if aThreadRangeButton <> nil then
5532 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5535 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5536 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5540 // browserPos : TPoint;
5544 Wnd := WindowFromPoint(Mouse.CursorPos);
5546 if WheelDelta > 0 then
5551 if (Wnd = BrowserTab.Handle) or
5552 (Wnd = BrowserTab.Parent.Handle) then begin
5553 BrowserTab.ScrollTabs(Delta);
5555 if FIsHandledWheel then begin
5556 FIsHandledWheel := False;
5559 FIsHandledWheel := True;
5560 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5561 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5563 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5571 procedure TGikoForm.SetSelectWord( const text : string );
5573 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5574 ClearThreadRengeAction;
5576 if Length( text ) = 0 then
5578 GikoDM.AllItemAction.Checked := True;
5579 SetListViewType( gvtAll )
5581 SetListViewType( gvtUser, text, false );
5585 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5588 SetSelectWord( SelectComboBox.Text );
5592 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5593 Shift: TShiftState);
5601 if Key = VK_Return then
5604 end else if Key = 229 then begin
5605 if GikoSys.Setting.UseUndecided then begin
5606 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5607 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5608 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5609 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5610 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5611 SetLength(Str, Len);
5612 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5613 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5614 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5616 Str := SelectComboBox.Text + Str;
5618 if (Length(Str) > 0) then begin
5622 end else if Length( SelectComboBox.Text ) = 0 then
5624 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5625 *
\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
5626 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5629 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5630 ClearThreadRengeAction;
5634 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5635 procedure TGikoForm.ClearThreadRengeAction;
5637 //
\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é
5638 if GikoDM.AllItemAction.Checked then
5639 GikoDM.AllItemAction.Checked := False;
5640 if GikoDM.LogItemAction.Checked then
5641 GikoDM.LogItemAction.Checked := False;
5642 if GikoDM.NewItemAction.Checked then
5643 GikoDM.NewItemaction.Checked := False;
5644 if GikoDM.LiveItemAction.Checked then
5645 GikoDM.LiveItemAction.Checked := False;
5646 if GikoDM.ArchiveItemAction.Checked then
5647 GikoDM.ArchiveItemAction.Checked := False;
5651 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5656 if Length( SelectComboBox.Text ) = 0 then
5658 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5659 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5664 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5665 procedure TGikoForm.ModifySelectList;
5672 if not SelectComboBoxPanel.Visible then
5675 if Length( SelectComboBox.Text ) > 0 then
5677 oldText := SelectComboBox.Text;
5678 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5680 GikoSys.Setting.SelectTextList.Delete( idx );
5681 idx := SelectComboBox.Items.IndexOf( oldText );
5683 SelectComboBox.Items.Delete( idx );
5684 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5685 SelectComboBox.Items.Insert( 0, oldText );
5686 SelectComboBox.Text := oldText;
5694 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5695 Shift: TShiftState; X, Y: Integer);
5700 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5703 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5704 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5705 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5707 If w <= 50 Then Begin
5708 //
\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
5709 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5710 pos.X := pos.X + (50 - w);
5712 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5716 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5717 //If SelectComboBox.Width <> w Then Begin
5718 If SelectComboBoxPanel.Width <> w Then Begin
5719 SelectComboBoxPanel.Width := w;
5720 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5721 GikoSys.Setting.SelectComboBoxWidth := w;
5722 DraggingSelectComboBoxPosition := pos;
5724 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5725 ResetBandInfo( ListCoolBar, ListToolBar );
5731 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5732 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5736 IsDraggingSelectComboBox := True;
5739 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5743 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5744 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5746 IsDraggingSelectComboBox := False;
5750 procedure TGikoForm.StatusBarResize(Sender: TObject);
5752 StatusBar.Panels[1].Width := StatusBar.Width -
5753 StatusBar.Panels[0].Width -
5754 StatusBar.Panels[THREADSIZE_PANEL].Width -
5755 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5757 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5760 if (Length( SelectComboBox.Text ) = 0) or
5761 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5763 SelectComboBox.Text := '';
5764 SelectComboBox.Color := clWindow;
5769 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5772 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5775 if TObject(SenderNode.Data) is TFavoriteFolder then
5776 SourceNode.MoveTo(SenderNode, naAddChild)
5778 SourceNode.MoveTo(SenderNode, naInsert);
5782 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5786 FavoBoardItem: TFavoriteBoardItem;
5787 FavoThreadItem: TFavoriteThreadItem;
5789 ThreadItem: TThreadItem;
5792 if (SenderNode = nil) or (Source = nil) then
5795 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5796 FavNode := SenderNode.Parent
5798 FavNode := SenderNode;
5802 if Source is TBoard then begin
5803 Board := TBoard( Source );
5804 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5805 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5806 Node.ImageIndex := 15;
5807 Node.SelectedIndex := 15;
5808 end else if Source is TFavoriteBoardItem then begin
5809 FavoBoardItem := TFavoriteBoardItem( Source );
5810 Board := FavoBoardItem.Item;
5811 if Board <> nil then
5812 if not Board.IsThreadDatRead then
5813 GikoSys.ReadSubjectFile(Board);
5814 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5815 Node.ImageIndex := 15;
5816 Node.SelectedIndex := 15;
5817 end else if Source is TThreadItem then begin
5818 ThreadItem := TThreadItem( Source );
5819 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5820 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5821 Node.ImageIndex := 16;
5822 Node.SelectedIndex := 16;
5823 end else if Source is TBrowserRecord then begin
5824 ThreadItem := TBrowserRecord( Source ).Thread;
5825 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5826 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5827 Node.ImageIndex := 16;
5828 Node.SelectedIndex := 16;
5829 end else if Source is TFavoriteThreadItem then begin
5830 FavoThreadItem := TFavoriteThreadItem( Source );
5831 ThreadItem := FavoThreadItem.Item;
5832 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5833 Node.ImageIndex := 16;
5834 Node.SelectedIndex := 16;
5837 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5839 FavoriteMoveTo( SenderNode, Node );
5843 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5846 SourceNode: TTreeNode;
5847 LinkToolButton: TLinkToolButton;
5850 if SenderNode = nil then
5853 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5854 if FDropSpaceNode <> nil then
5855 SenderNode := FDropSpaceNode;
5857 if Source = FavoriteTreeView then begin
5858 SourceNode := FavoriteTreeView.Selected;
5859 FavoriteMoveTo( SenderNode, SourceNode );
5860 end else if Source is TLinkToolButton then begin
5861 LinkToolButton := TLinkToolButton( Source );
5862 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5863 FavoriteMoveTo( SenderNode, SourceNode );
5864 end else if Source = BrowserTab then begin
5865 idx := BrowserTab.TabIndex;
5866 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5867 end else if Source = ListView then begin
5868 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5869 end else if Source = TreeView then begin
5870 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5874 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5877 SenderNode: TTreeNode;
5880 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5881 if SenderNode <> nil then begin
5882 FavoriteDragDrop( SenderNode, Source );
5885 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5886 if FDropSpaceNode <> nil then begin
5888 FDropSpaceNode.Delete;
5890 FDropSpaceNode := nil;
5893 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5894 FavoriteDM.Modified := true;
5900 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5901 Node: TTreeNode; var S: String);
5903 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5904 FavoriteDM.Modified := true;
5906 FavoriteTreeView.ReadOnly := True;
5911 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5912 Shift: TShiftState);
5914 if not TTreeView(Sender).IsEditing then begin
5918 FClickNode := FavoriteTreeView.Selected;
5919 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5923 FClickNode := FavoriteTreeView.Selected;
5924 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5928 FavoriteClick( FavoriteTreeView.Selected );
5929 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5933 FClickNode := FavoriteTreeView.Selected;
5934 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5938 //
\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·
5939 if Key = VK_ESCAPE then begin
5940 if (TTreeView(Sender).Selected <> nil) then begin
5941 TTreeView(Sender).Selected.Text := FOrigenCaption;
5943 TTreeView(Sender).Selected.Focused := False;
5949 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5952 LinkToolButton: TLinkToolButton;
5955 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
5957 FClickNode := FavoriteTreeView.Selected;
5959 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
5961 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
5962 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5963 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5964 FClickNode := FavoriteTreeView.Items[i];
5968 for i := 0 to FClickNode.Count - 1 do begin
5969 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
5970 FClickNode := FClickNode.Item[i];
5977 if FClickNode = nil then begin
5978 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
5979 FavoriteTreeDeletePopupMenu.Visible := False;
5980 FavoriteTreeRenamePopupMenu.Visible := False;
5981 FavoriteTreeNewFolderPopupMenu.Visible := False;
5982 FavoriteTreeURLCopyPopupMenu.Visible := False;
5983 FavoriteTreeNameCopyPopupMenu.Visible := False;
5984 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5985 FavoriteTreeReloadPopupMenu.Visible := False;
5986 FavoriteTreeLogDeletePopupMenu.Visible := False;
5987 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
5988 end else if FClickNode.IsFirstNode then begin
5989 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
5990 FavoriteTreeDeletePopupMenu.Visible := False;
5991 FavoriteTreeRenamePopupMenu.Visible := False;
5992 FavoriteTreeNewFolderPopupMenu.Visible := True;
5993 FavoriteTreeURLCopyPopupMenu.Visible := False;
5994 FavoriteTreeNameCopyPopupMenu.Visible := False;
5995 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
5996 FavoriteTreeReloadPopupMenu.Visible := False;
5997 FavoriteTreeLogDeletePopupMenu.Visible := False;
5998 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
5999 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6000 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6001 FavoriteTreeDeletePopupMenu.Visible := True;
6002 FavoriteTreeRenamePopupMenu.Visible := False;
6003 FavoriteTreeNewFolderPopupMenu.Visible := True;
6004 FavoriteTreeURLCopyPopupMenu.Visible := False;
6005 FavoriteTreeNameCopyPopupMenu.Visible := False;
6006 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6007 FavoriteTreeReloadPopupMenu.Visible := False;
6008 FavoriteTreeLogDeletePopupMenu.Visible := False;
6009 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6010 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6011 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6012 FavoriteTreeDeletePopupMenu.Visible := True;
6013 FavoriteTreeRenamePopupMenu.Visible := True;
6014 FavoriteTreeNewFolderPopupMenu.Visible := True;
6015 FavoriteTreeURLCopyPopupMenu.Visible := False;
6016 FavoriteTreeNameCopyPopupMenu.Visible := True;
6017 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6018 FavoriteTreeReloadPopupMenu.Visible := False;
6019 FavoriteTreeLogDeletePopupMenu.Visible := False;
6020 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6021 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6022 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6023 FavoriteTreeDeletePopupMenu.Visible := True;
6024 FavoriteTreeRenamePopupMenu.Visible := True;
6025 FavoriteTreeNewFolderPopupMenu.Visible := True;
6026 FavoriteTreeURLCopyPopupMenu.Visible := True;
6027 FavoriteTreeNameCopyPopupMenu.Visible := True;
6028 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6029 FavoriteTreeReloadPopupMenu.Visible := True;
6030 FavoriteTreeLogDeletePopupMenu.Visible := True;
6031 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6032 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6033 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6034 FavoriteTreeDeletePopupMenu.Visible := True;
6035 FavoriteTreeRenamePopupMenu.Visible := True;
6036 FavoriteTreeNewFolderPopupMenu.Visible := True;
6037 FavoriteTreeURLCopyPopupMenu.Visible := True;
6038 FavoriteTreeNameCopyPopupMenu.Visible := True;
6039 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6040 FavoriteTreeReloadPopupMenu.Visible := True;
6041 FavoriteTreeLogDeletePopupMenu.Visible := False;
6042 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6044 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6045 FavoriteTreeDeletePopupMenu.Visible := False;
6046 FavoriteTreeRenamePopupMenu.Visible := False;
6047 FavoriteTreeNewFolderPopupMenu.Visible := False;
6048 FavoriteTreeURLCopyPopupMenu.Visible := False;
6049 FavoriteTreeNameCopyPopupMenu.Visible := False;
6050 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6051 FavoriteTreeReloadPopupMenu.Visible := False;
6052 FavoriteTreeLogDeletePopupMenu.Visible := False;
6053 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6058 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6063 if not (TObject(node.Data) is TFavoriteFolder) then
6066 for i := 0 to node.Count - 1 do
6068 if TObject(node.Item[i].Data) is TFavoriteFolder then
6069 FavoriteBrowseFolder( node.Item[i] )
6070 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6071 FavoriteClick( node.Item[i], False );
6075 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6081 for i := 0 to Node.Count - 1 do begin
6082 if Node.Item[i].Data = FindPointer then begin
6083 Result := Node.Item[i];
6085 end else if Node.Item[i].Count > 0 then begin
6086 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6087 if Found <> nil then begin
6098 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6102 SenderNode: TTreeNode;
6106 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6107 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6108 SenderNode := FavoriteTreeView.Items[i];
6112 SenderNode.Selected := False;
6114 FavoriteDragDrop( SenderNode, Source );
6119 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6120 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6122 if FDragWFirst = true then
6123 FDragWFirst := false;
6125 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6126 if GikoSys.Setting.ListWidthState = glsMin then begin
6127 GikoDM.BrowserMaxAndFocusAction.Execute;
6130 if GikoSys.Setting.ListHeightState = glsMin then begin
6131 GikoDM.BrowserMaxAndFocusAction.Execute;
6136 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6137 Y: Integer; State: TDragState; var Accept: Boolean);
6140 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6144 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6148 if FDropSpaceNode <> nil then begin
6150 FDropSpaceNode.Delete;
6152 FDropSpaceNode := nil;
6154 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6155 FavoriteDM.Modified := true;
6161 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6163 if FListViewBackGroundColor <> value then begin
6164 FListViewBackGroundColor := value;
6165 ListView.Color := FListViewBackGroundColor;
6168 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6170 threadItem : TThreadItem;
6174 if FClickNode = nil then Exit;
6176 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6178 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6179 if threadItem = nil then
6181 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6183 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6185 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6186 if boardItem = nil then
6188 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6194 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6195 MousePos: TPoint; var Handled: Boolean);
6199 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6200 if BrowserTab.TabIndex <> idx then begin
6201 BrowserTab.TabIndex := idx;
6202 BrowserTab.OnChange(nil);
6206 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6208 ThreadItem: TThreadItem;
6214 boardPlugIn : TBoardPlugIn;
6216 if Number = 0 then Exit;
6217 ThreadItem := GetActiveContent(True);
6219 if ThreadItem <> nil then begin
6220 //if ThreadItem.IsBoardPlugInAvailable then begin
6221 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6222 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6223 //boardPlugIn := ThreadItem.BoardPlugIn;
6224 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6226 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6227 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6228 //
\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
6229 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6231 FileName := ThreadItem.FilePath;
6232 tmp := GikoSys.ReadThreadFile(FileName, Number);
6234 if tmp <> '' then begin
6235 THTMLCreate.DivideStrLine(tmp, @Res);
6237 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6238 if ReplaceTag then begin
6239 Header := CustomStringReplace(Header, '</b>', '',true);
6240 Header := CustomStringReplace(Header, '<b>', '',true);
6241 Header := CustomStringReplace(Header, '<br>', '',true);
6242 Header := DeleteFontTag(Header);
6244 //if ThreadItem.IsBoardPlugInAvailable then begin
6245 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6246 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6247 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6249 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6250 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6251 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6252 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6255 Body := CustomStringReplace(Body, '</a>', '',true);
6257 Body := HTMLCreater.DeleteLink(Body);
6258 if ReplaceTag then begin
6259 Body := CustomStringReplace(Body, '<', '<');
6260 Body := CustomStringReplace(Body, '>', '>');
6261 Body := CustomStringReplace(Body, '"', '"');
6262 Body := CustomStringReplace(Body, '&', '&');
6263 //Body := CustomStringReplace(Body, ' ', ' ');
6266 Header := Header + Body;
6268 Clipboard.SetTextBuf( PChar(Header) );
6274 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6276 AddRoundNameMenu(dummy1);
6277 AddMenuSameBoardThread;
6279 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83\81\83j
\83\85\81[
\83A
\83C
\83e
\83\80\82É
\92Ç
\89Á
6280 procedure TGikoForm.AddMenuSameBoardThread;
6285 SameBoardThreadItem.Clear;
6286 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6287 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6288 if (FActiveContent.Thread.ParentBoard =
6289 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6290 //
\8e©
\95ª
\82Í
\8aO
\82·
6291 if FActiveContent.Thread <>
6292 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6293 Item := TMenuItem.Create(Self);
6294 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6295 Item.OnClick := SameBoardThreadSubItemOnClick;
6296 SameBoardThreadItem.Add(Item);
6300 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6301 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6303 //!
\83A
\83N
\83e
\83B
\83u
\82È
\83^
\83u
\82Æ
\93¯
\82¶
\94Â
\82Ì
\8aJ
\82¢
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6304 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6307 MenuItem: TMenuItem;
6309 if Sender is TMenuItem then begin
6312 MenuItem := TMenuItem(Sender);
6313 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6314 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6315 if (FActiveContent.Thread.ParentBoard =
6316 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6317 if FActiveContent.Thread <>
6318 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6319 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6320 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6332 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6334 FavoriteDM.URLReplace(oldURLs, newURLs);
6337 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6339 RoundList.URLReplace(oldURLs, newURLs);
6342 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6344 Filename = 'tab.sav';
6345 bFilename = '~tab.sav';
6351 oldBoardName: string;
6353 newBoardName: string;
6354 TabList: TStringList;
6357 if oldURLs.Count <> newURLs.Count then begin
6360 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6361 TabList := TStringList.Create;
6363 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6365 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6366 //
\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
6367 for i := 0 to oldURLs.Count - 1 do begin
6368 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6369 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6370 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6371 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6372 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6373 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6375 for j := 0 to TabList.Count - 1 do begin
6376 tempString := TabList[j];
6377 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6378 tempString := StringReplace(tempString, oldHost, newHost,[]);
6379 TabList[j] := tempString;
6383 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6385 if FileExists( GikoSys.GetAppDir + Filename) then begin
6386 if FileExists( GikoSys.GetAppDir + bFilename) then
6387 DeleteFile(GikoSys.GetAppDir + bFilename);
6389 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6390 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6393 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6401 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6402 procedure TGikoForm.OnMinimize;
6404 if FActiveContent <> nil then begin
6405 FIsMinimize := mtMinimizing;
6406 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6410 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6411 procedure TGikoForm.OnMinimized;
6413 FIsMinimize := mtMinimized;
6417 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6419 CoolBarResized( Sender, BrowserCoolBar );
6422 // *************************************************************************
6423 // ExternalBoardPlugInMain
6424 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6425 // *************************************************************************
6426 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6429 boardPlugIn : TBoardPlugIn;
6432 if not (Sender is TMenuItem) then
6435 item := TMenuItem( Sender );
6436 if not Assigned( Pointer( item.Tag ) ) then
6439 //
\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·
6440 boardPlugIn := TBoardPlugIn( item.Tag );
6441 boardPlugIn.PlugInMenu( item.Handle );
6444 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6445 procedure TGikoForm.TreeClick( Node : TTreeNode );
6451 if FTreeType = gttHistory then begin
6453 if TObject( Node.Data ) is TFavoriteThreadItem then
6454 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6455 FavoriteClick( Node );
6458 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6459 if ActiveList = Node.Data then
6462 ActiveListColumnSave;
6464 if TObject(Node.Data) is TBBS then begin
6465 SetActiveList(Node.data);
6466 end else if TObject(Node.Data) is TCategory then begin
6467 SetActiveList(Node.data);
6468 end else if TObject(Node.Data) is TBoard then begin
6469 if not TBoard(Node.Data).IsThreadDatRead then begin
6470 Screen.Cursor := crHourGlass;
6472 if not TBoard(Node.Data).IsThreadDatRead then
6473 GikoSys.ReadSubjectFile(Node.Data);
6475 Screen.Cursor := crDefault;
6478 Sort.SetSortDate(Now());
6479 SetActiveList(Node.data);
6482 if TObject( Node.Data ) is TBoard then begin // not TCategory
6483 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6484 if GikoSys.Setting.ListWidthState = glsMax then begin
6485 GikoDM.BrowserMinAction.Execute;
6486 if GikoForm.Visible then
6490 if GikoSys.Setting.ListHeightState = glsMax then begin
6491 GikoDM.BrowserMinAction.Execute;
6492 if GikoForm.Visible then
6500 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6501 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6504 ThreadItem : TThreadItem;
6505 shiftDown : Boolean;
6508 if Node = nil then Exit;
6510 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6512 if FTreeType = gtt2ch then begin
6513 if not (TObject(Node.Data) is TBoard) then Exit;
6514 Board := TBoard(Node.Data);
6515 DownloadList(Board, shiftDown);
6516 end else if FTreeType = gttHistory then begin
6517 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6518 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6519 DownloadContent(ThreadItem, shiftDown);
6523 // *************************************************************************
6524 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6525 // *************************************************************************
6526 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6527 Shift: TShiftState);
6529 if Key = VK_BACK then begin
6530 // UpFolderButtonClick(Sender);
6531 end else if Key = VK_SPACE then begin
6532 TreeDoubleClick( TreeView.Selected );
6533 end else if Key = VK_RETURN then begin
6534 TreeClick( TreeView.Selected );
6535 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6536 if (TreeView.Selected <> nil) then begin
6537 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6541 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6542 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6543 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6545 favItem : TTreeNode;
6546 favThreadItem : TFavoriteThreadItem;
6552 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6553 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6554 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6555 rect := FavoriteTreeView.Selected.DisplayRect(true);
6556 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6557 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6558 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6559 if ssDouble in Shift then begin
6560 FClickNode := FavoriteTreeView.Selected;
6561 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6565 TObject(FavoriteTreeView.Selected));
6572 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6573 if favItem = nil then Exit;
6575 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6576 favThreadItem := TFavoriteThreadItem( favItem.Data );
6577 if favThreadItem.Item <> nil then
6578 InsertBrowserTab( favThreadItem.Item, False );
6585 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6588 if FIsIgnoreResize <> rtNone then
6591 if GikoSys.Setting.ListOrientation = gloVertical then begin
6592 if GikoSys.Setting.ListHeightState = glsMin then begin
6593 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6594 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6600 procedure TGikoForm.OnResized;
6605 FOldFormWidth := Width;
6606 FIsIgnoreResize := rtNone;
6611 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6612 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6617 //
\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)
6618 if FActiveContent <> nil then begin
6619 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6620 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6622 FIsMinimize := mtNone;
6627 // *************************************************************************
6628 //!
\82¨
\8bC
\82É
\93ü
\82è
\83c
\83\8a\81[
\82Ì
\83}
\83E
\83X
\83A
\83b
\83v
\83C
\83x
\83\93\83g
6629 // *************************************************************************
6630 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6637 stlist : TStringList;
6641 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6645 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6646 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6647 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6650 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6651 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6652 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6653 if (Assigned(e)) then begin
6654 if (e.className = 'date') or (e.id = 'date') then begin
6656 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6657 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6658 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6659 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6662 stlist := TStringList.Create;
6664 stList.DelimitedText := AID;
6666 for i := 0 to stList.Count - 1 do
6667 if Length(WideString(stList[i])) = 8 then begin
6668 if GikoSys.NotDateorTimeString(stList[i]) then begin
6677 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6679 if count > LIMIT then begin
6680 if (GikoUtil.MsgBox(Handle,
6681 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6682 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6683 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6687 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6688 FActiveContent.IDAnchorPopup(body);
6697 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6698 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6700 SelectTimer.Interval := 0;
6701 if not (ListView.Selected = nil) then
6702 if( FActiveContent = nil) or
6703 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6708 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6709 procedure TGikoForm.ActiveListColumnSave;
6711 ActivListObj : TObject;
6712 i, id, idx : Integer;
6713 BBSOrder : TGikoBBSColumnList;
6714 CategoryOrder : TGikoCategoryColumnList;
6715 BoardOrder : TGikoBoardColumnList;
6718 ActivListObj := ActiveList;
6719 if ActivListObj is TBBS then begin
6720 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6721 BBSOrder := TGikoBBSColumnList.Create;
6723 for i := 0 to ListView.Columns.Count - 1 do begin
6724 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6725 idx := ListView.Column[ i ].Tag;
6726 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6727 BBSOrder.Add( TGikoBBSColumnID( id ) );
6728 //
\95\9d\82Ì
\95Û
\91¶
6729 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6731 for i := 0 to ListView.Columns.Count - 1 do
6732 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6733 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6737 end else if ActivListObj is TCategory then begin
6738 //=====
\94Â
\83\8a\83X
\83g =====
6739 CategoryOrder := TGikoCategoryColumnList.Create;
6741 for i := 0 to ListView.Columns.Count - 1 do begin
6742 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6743 idx := ListView.Column[ i ].Tag;
6744 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6745 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6746 //
\95\9d\82Ì
\95Û
\91¶
6747 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6749 for i := 0 to ListView.Columns.Count - 1 do
6750 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6751 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6755 end else if ActivListObj is TBoard then begin
6756 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6757 BoardOrder := TGikoBoardColumnList.Create;
6759 for i := 0 to ListView.Columns.Count - 1 do begin
6760 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6761 idx := ListView.Column[ i ].Tag;
6762 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6763 BoardOrder.Add( TGikoBoardColumnID( id ) );
6764 //
\95\9d\82Ì
\95Û
\91¶
6765 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6767 for i := 0 to ListView.Columns.Count - 1 do
6768 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6769 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6777 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6778 Column: TListColumn; Point: TPoint);
6784 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6785 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6786 ListColumnPopupMenu.Items.Items[ i ].Free;
6788 //
\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¢)
6789 if TObject( FActiveList ) is TBBS then begin
6791 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6792 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6793 item := TMenuItem.Create( ListColumnPopupMenu );
6794 item.Caption := GikoBBSColumnCaption[ i ];
6796 item.OnClick := ListColumnPopupMenuOnClick;
6797 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6798 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6799 item.Checked := True;
6803 ListColumnPopupMenu.Items.Add( item );
6806 end else if TObject( FActiveList ) is TCategory then begin
6808 //=====
\94Â
\83\8a\83X
\83g =====
6809 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6810 item := TMenuItem.Create( ListColumnPopupMenu );
6811 item.Caption := GikoCategoryColumnCaption[ i ];
6813 item.OnClick := ListColumnPopupMenuOnClick;
6814 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6815 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6816 item.Checked := True;
6820 ListColumnPopupMenu.Items.Add( item );
6823 end else if TObject( FActiveList ) is TBoard then begin
6825 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6826 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6827 item := TMenuItem.Create( ListColumnPopupMenu );
6828 item.Caption := GikoBoardColumnCaption[ i ];
6830 item.OnClick := ListColumnPopupMenuOnClick;
6831 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6832 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6833 item.Checked := True;
6837 ListColumnPopupMenu.Items.Add( item );
6842 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6843 Point := ListView.ClientToScreen( Point );
6844 if ListColumnPopupMenu.Items.Count > 0 then
6845 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6849 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6850 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6857 if not (Sender is TMenuItem) then
6860 ActiveListColumnSave;
6861 item := TMenuItem( Sender );
6863 if TObject( FActiveList ) is TBBS then
6864 orderList := GikoSys.Setting.BBSColumnOrder
6865 else if TObject( FActiveList ) is TCategory then
6866 orderList := GikoSys.Setting.CategoryColumnOrder
6867 else if TObject( FActiveList ) is TBoard then
6868 orderList := GikoSys.Setting.BoardColumnOrder
6872 if item.Checked then begin
6873 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6874 for i := orderList.Count - 1 downto 0 do begin
6875 if Integer( orderList[ i ] ) = item.Tag then begin
6876 orderList.Delete( i );
6881 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6882 orderList.Add( Pointer( item.Tag ) );
6885 SetActiveList( FActiveList );
6889 procedure TGikoForm.OnGestureStart(Sender: TObject);
6894 procedure TGikoForm.OnGestureMove(Sender: TObject);
6901 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6903 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6904 s := MouseGesture.GetGestureStr;
6906 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6907 if Action <> nil then
6908 ActStr := '
\81i' + Action.Caption + '
\81j';
6909 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6910 StatusBar.Panels[1].Text := s;
6913 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6918 s := MouseGesture.GetGestureStr;
6920 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6921 if Action <> nil then
6923 StatusBar.Panels[1].Text := '';
6926 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6927 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6929 ThreadItem: TThreadItem;
6931 DefaultDraw := true;
6932 if TObject(Item.Data) is TThreadItem then begin
6933 ThreadItem := TThreadItem(Item.Data);
6934 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6935 ListView.Canvas.Brush.Color := FOddColor;
6936 //
\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
6937 if (GikoSys.Setting.UnFocusedBold) and
6938 (Item.Selected) and (not ListView.Focused) then begin
6939 ListView.Canvas.Font.Style := [fsBold];
6942 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6945 if ThreadItem.UnRead then
6946 ListView.Canvas.Font.Style := [fsBold];
6951 procedure TGikoForm.FormActivate(Sender: TObject);
6953 if GikoSys.Setting.GestureEnabled then begin
6954 GikoSys.Setting.Gestures.ClearGesture;
6955 GikoSys.Setting.Gestures.LoadGesture(
6956 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
6957 MouseGesture.UnHook;
6958 MouseGesture.OnGestureStart := OnGestureStart;
6959 MouseGesture.OnGestureMove := OnGestureMove;
6960 MouseGesture.OnGestureEnd := OnGestureEnd;
6961 MouseGesture.SetHook(Handle);
6963 //MouseGesture.UnHook;
6964 MouseGesture.OnGestureStart := nil;
6965 MouseGesture.OnGestureMove := nil;
6966 MouseGesture.OnGestureEnd := nil;
6970 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
6972 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
6973 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
6977 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
6982 affectedBand : TCoolBand;
6985 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
6986 FIsIgnoreResize := rtResizing;
6987 PostMessage( Handle, USER_RESIZED, 0, 0 );
6989 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
6990 if CoolBar = MainCoolBar then begin
6991 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
6992 CoolSet.FCoolID := CoolBar.Bands[i].ID;
6993 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
6994 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
6995 GikoSys.Setting.MainCoolSet[i] := CoolSet;
6997 end else if CoolBar = ListCoolBar then begin
6998 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
6999 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7000 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7001 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7002 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7004 end else if CoolBar = BrowserCoolBar then begin
7005 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7006 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7007 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7008 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7009 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7012 if not (Sender is TToolBar) or (CoolBar = nil) then
7014 toolbar := TToolBar( Sender );
7015 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7016 affectedBand := nil;
7017 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7018 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7019 band := CoolBar.Bands[ i ];
7020 if band.Break or (i = 0) then begin
7021 if i + 1 < CoolBar.Bands.Count then
7022 if not CoolBar.Bands[ i + 1 ].Break then
7023 affectedBand := CoolBar.Bands[ i + 1 ];
7026 affectedBand := CoolBar.Bands[ i - 1 ];
7031 //
\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·
7032 if CoolBar = MainCoolBar then begin
7033 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7034 coolSet.FCoolWidth := toolbar.Width + 25;
7035 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7036 if affectedBand <> nil then begin
7037 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7038 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7039 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7041 end else if CoolBar = ListCoolBar then begin
7042 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7043 coolSet.FCoolWidth := toolbar.Width + 25;
7044 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7045 if affectedBand <> nil then begin
7046 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7047 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7048 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7050 end else if CoolBar = BrowserCoolBar then begin
7051 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7052 coolSet.FCoolWidth := toolbar.Width + 25;
7053 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7054 if affectedBand <> nil then begin
7055 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7056 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7057 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7064 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7066 CoolBarResized( Sender, MainCoolBar );
7069 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7071 CoolBarResized( Sender, ListCoolBar );
7074 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7076 CoolBarResized( Sender, BrowserCoolBar );
7079 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7080 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7082 ThreadItem : TThreadItem;
7083 ReadList : TStringList;
7084 wordCount : TWordCount;
7086 ThreadItem := GetActiveContent(True);
7087 ReadList := TStringList.Create;
7088 wordCount := TWordCount.Create;
7090 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7091 {$IFDEF SPAM_FILTER_ENABLED}
7092 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7093 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7094 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7095 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7096 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7098 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7099 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7104 FActiveContent.Repaint := true;
7105 if ThreadItem <> nil then
7106 InsertBrowserTab( ThreadItem, True );
7109 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7110 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7112 ThreadItem : TThreadItem;
7115 ReadList : TStringList;
7116 wordCount : TWordCount;
7118 No := KokoPopupMenu.Tag;
7119 if No = 0 then Exit;
7120 ThreadItem := GetActiveContent(True);
7121 if ThreadItem = nil then Exit;
7122 body := TStringList.Create;
7124 GikoSys.GetSameIDRes(No, ThreadItem, body);
7126 ReadList := TStringList.Create;
7127 wordCount := TWordCount.Create;
7129 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7130 {$IFDEF SPAM_FILTER_ENABLED}
7131 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7132 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7134 for i := 0 to body.Count - 1 do begin
7135 {$IFDEF SPAM_FILTER_ENABLED}
7136 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7137 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7138 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7140 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7141 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7147 FActiveContent.Repaint := true;
7148 if ThreadItem <> nil then
7149 InsertBrowserTab( ThreadItem, True );
7156 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7158 firstElement: IHTMLElement;
7159 document: IHTMLDocument2;
7161 document := FActiveContent.Browser.Document as IHTMLDocument2;
7162 if Assigned(document) then
7163 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7164 if Assigned(firstElement) then
7165 if firstElement.style.visibility <> 'hidden' then
7166 firstElement.style.visibility := 'hidden';
7169 procedure TGikoForm.RepaintAllTabsBrowser();
7172 ThreadItem: TThreadItem;
7174 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7175 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7177 ThreadItem := GetActiveContent;
7178 if ThreadItem <> nil then
7179 InsertBrowserTab( ThreadItem, True );
7183 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7184 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7185 Shift: TShiftState);
7187 //
\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Ì
7188 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7189 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7190 SelectTimer.Interval := 0;
7191 if not (GikoSys.Setting.BrowserTabVisible) then begin
7192 if (GetActiveList is TBoard) then begin
7193 //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
7194 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7195 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7196 (Key = VK_UP) or (Key = VK_DOWN)) then
7197 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7201 // *************************************************************************
7202 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7203 // *************************************************************************
7204 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7205 Node: TTreeNode; var AllowEdit: Boolean);
7207 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7208 FOrigenCaption := Node.Text;
7210 // *************************************************************************
7211 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7212 // *************************************************************************
7213 function TGikoForm.GetMainForm(): TComponent;
7215 Result := Application.MainForm;
7217 // *************************************************************************
7218 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7219 // *************************************************************************
7220 function TGikoForm.GetScreenCursor(): TCursor;
7222 Result := Screen.Cursor;
7224 // *************************************************************************
7225 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7226 // *************************************************************************
7227 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7229 if (Screen.Cursor <> Cursor) then
7230 Screen.Cursor := Cursor;
7232 // *************************************************************************
7233 //!
\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
7234 // *************************************************************************
7235 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7237 //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Ì
7238 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7239 if GikoDM.CabinetVisibleAction.Enabled then begin
7240 GikoDM.CabinetVisibleAction.Execute;
7243 // *************************************************************************
7244 //!
\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
7245 // *************************************************************************
7246 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7248 if GikoDM.FavoriteArrangeAction.Enabled then begin
7249 GikoDM.FavoriteArrangeAction.Execute;
7252 // *************************************************************************
7253 //!
\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
7254 // *************************************************************************
7255 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7256 var Handled: Boolean);
7260 //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ß
7261 if Self.Active then begin
7263 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7264 WM_KEYFIRST..WM_KEYLAST :
7266 //
\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ç
7267 if (Msg.message <> WM_KEYUP)
7268 and (Msg.message <> WM_CHAR)
7269 and (Msg.message <> WM_SYSKEYUP) then begin
7270 wmMsg.Msg := Msg.message;
7271 wmMsg.CharCode := Word(Msg.wParam);
7272 wmMsg.KeyData := Msg.lParam;
7273 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7274 Self.OnShortCut(wmMsg, Handled);
7280 // *************************************************************************
7281 //!
\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
7282 // *************************************************************************
7283 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7285 Application.ProcessMessages;
7286 if not Application.Terminated then begin
7287 if PreviewTimer.Enabled then
7288 PreviewTimer.Enabled := False;
7289 //
\83t
\83H
\81[
\83J
\83X
\82ª
\91¼
\82Ì
\83A
\83v
\83\8a\82É
\95Ï
\82í
\82Á
\82½
\82Æ
\82«
\82É
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e
7290 if (FResPopupBrowser <> nil) then
7291 FResPopupBrowser.Clear;
7293 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7294 if FPreviewBrowser <> nil then
7295 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7299 // *************************************************************************
7300 //!
\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
7301 // *************************************************************************
7302 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7307 if (Sender <> nil) then begin
7308 s := ' [' + Sender.ClassName + ']' + #13#10;
7310 s := ' [ Sender is nil ] ' + #13#10;
7313 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7315 // *************************************************************************
7316 //!
\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¬
7317 // *************************************************************************
7318 procedure TGikoForm.CreateControlThread();
7320 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7321 FControlThread := TThreadControl.Create(True);
7322 FControlThread.MaxThreadCount := 1;
7323 FControlThread.Resume;
7324 FControlThread.OnDownloadEnd := DownloadEnd;
7325 FControlThread.OnDownloadMsg := DownloadMsg;
7326 FControlThread.OnWork := Work;
7327 FControlThread.OnWorkBegin := WorkBegin;
7328 FControlThread.OnWorkEnd := WorkEnd;
7330 // *************************************************************************
7331 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7332 // *************************************************************************
7333 procedure TGikoForm.CreateBrowsers(count: Integer);
7336 newBrowser: TWebBrowser;
7338 BrowserNullTab := TBrowserRecord.Create;
7339 BrowserNullTab.Browser := Browser;
7340 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7342 FBrowsers := TList.Create;
7343 for i := 0 to count -1 do begin
7344 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7345 newBrowser := FBrowsers[FBrowsers.Count - 1];
7346 TOleControl(newBrowser).Parent := BrowserPanel;
7347 TOleControl(newBrowser).Align := alNone;
7348 TOleControl(newBrowser).Left := 0;
7349 TOleControl(newBrowser).Top := 0;
7350 newBrowser.RegisterAsDropTarget := False;
7351 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7352 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7353 newBrowser.OnEnter := BrowserEnter;
7354 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7355 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7356 newBrowser.Navigate(BLANK_HTML);
7357 ShowWindow(newBrowser.Handle, SW_HIDE);
7359 BrowserNullTab.Browser.BringToFront;
7360 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7362 //
\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Ì
7363 //
\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Å
7364 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7365 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7366 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7367 Application.ProcessMessages;
7370 // *************************************************************************
7371 //!
\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é
7372 // *************************************************************************
7373 procedure TGikoForm.SetSelectComboBox();
7375 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7378 ToolButton: TToolButton;
7380 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7381 SelectComboBoxPanel.Visible := False;
7383 for i := ListToolBar.ControlCount - 1 downto 0 do
7385 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7387 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7388 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7389 SelectComboBoxPanel.Parent := ListToolBar;
7390 SelectComboBoxPanel.Visible := True;
7392 SelectComboBox.Left := 0;
7393 SelectComboBox.Top := 0;
7394 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7395 SelectComboBox.Width := SelectComboBoxPanel.Width -
7396 SelectComboBoxSplitter.Width;
7398 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7399 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7400 if ToolButton = nil then begin
7401 ToolButton := TToolButton.Create(ListToolBar);
7402 ToolButton.Name := DUMMYCOMPNAME;
7404 ToolButton.Style := tbsSeparator;
7405 ToolButton.Width := 0;
7406 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7407 ListToolBar.InsertControl(ToolButton);
7408 ToolButton.Visible := False;
7410 //
\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·
7411 if (i + 1) < ListToolBar.ControlCount then
7412 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7413 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7414 ListToolBar.Controls[ i + 1 ].Visible := False;
7417 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7418 ListToolBar.Controls[ i ].Visible := False;
7426 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7427 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7428 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7435 if (TreeView.Selected <> nil) and
7436 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7437 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7438 rect := TreeView.Selected.DisplayRect(true);
7439 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7440 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7441 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7442 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7443 if ssDouble in Shift then begin
7444 TreeDoubleClick( TreeView.Selected );
7446 TreeClick(TreeView.Selected);
7453 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7454 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7458 if ActionList <> nil then begin
7459 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7461 for i := 0 to ActionList.ActionCount - 1 do begin
7463 FActionListGroupIndexes[i] :=
7464 TCustomAction(ActionList.Actions[i]).GroupIndex;
7465 TCustomAction(ActionList.Actions[i]).GroupIndex
7468 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7474 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7475 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7479 if ActionList <> nil then begin
7480 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7481 for i := 0 to ActionList.ActionCount - 1 do begin
7483 TCustomAction(ActionList.Actions[i]).GroupIndex
7484 := FActionListGroupIndexes[i];
7486 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7492 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7493 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7497 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7498 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7500 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7501 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7506 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7507 MousePos: TPoint; var Handled: Boolean);
7510 coolBar: TGikoCoolBar;
7513 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7514 coolBar := TGikoCoolBar(Sender);
7515 if (coolBar = MainCoolBar) then begin
7516 FToolBarSettingSender := tssMain;
7517 end else if (coolBar = ListCoolBar) then begin
7518 FToolBarSettingSender := tssList;
7519 end else if (coolBar = BrowserCoolBar) then begin
7520 FToolBarSettingSender := tssBrowser;
7522 FToolBarSettingSender := tssNone;
7524 pos := coolBar.ClientToScreen( MousePos );
7525 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7530 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7532 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7533 if (Msg.wParam = WM_LBUTTONUP) then begin
7537 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7538 procedure TGikoForm.StoredTaskTray;
7541 if (FIconData.uID = 0) then begin
7542 FIconData.cbSize := SizeOf(TNotifyIconData);
7543 FIconData.uID := Self.Handle;
7544 FIconData.Wnd := Handle;
7545 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7546 FIconData.uCallbackMessage := USER_TASKTRAY;
7547 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7548 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7549 Shell_NotifyIcon(NIM_ADD, @FIconData);
7550 ShowEditors(SW_HIDE);
7551 ShowWindow(Self.Handle, SW_HIDE);
7556 //!
\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¦
7557 procedure TGikoForm.UnStoredTaskTray;
7561 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7562 SetForegroundWindow(Application.Handle);
7567 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7568 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7569 ShowWindow(Self.Handle, SW_RESTORE);
7571 ShowWindow(Self.Handle, SW_SHOW);
7573 ShowEditors(SW_SHOW);
7574 GikoDM.StoredTaskTrayAction.Tag := 0;
7578 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7579 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7581 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7585 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7586 for i := 0 to Screen.CustomFormCount - 1 do begin
7587 if TObject(Screen.CustomForms[i]) is TEditorForm then
7588 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7592 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7593 procedure TGikoForm.CreateResPopupBrowser;
7595 if (FResPopupBrowser = nil) then begin
7596 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7599 //!
\8aO
\82©
\82ç
\82ÌD&D
\8f\88\97\9d
7600 procedure TGikoForm.WMDropFiles(var Msg: TWMDropFiles);
7602 FileName: Array[0..MAX_PATH] of Char;
7606 datList: TStringList;
7608 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7609 if GetActiveList is TBoard then begin
7610 Board := TBoard(GetActiveList);
7611 if MsgBox(Handle, Board.Title
7612 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7613 //
\94Â
\82Ì
\8e\9e\82Í
\81A
\83\8d\83O
\83t
\83H
\83\8b\83_
\82É
\83R
\83s
\81[
\82µ
\82Ä
\82Í
\82®
\82ê
\83\8d\83O
\91Î
\89\9e\82Æ
\93¯
\82¶
\8f\88\97\9d\81H
7614 datList := TStringList.Create;
7616 Cnt := DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));
7617 for K := 0 to Cnt - 1 do begin
7618 DragQueryFile(Msg.Drop, K, FileName, SizeOf(FileName));
7619 {FileName
\82Édrop
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\96¼
\82ª
\93ü
\82Á
\82Ä
\82¢
\82é
\82Ì
\82Å
\81A
\82±
\82±
\82Å
\89½
\82ç
\82©
\82Ì
\8f\88\97\9d\82ð
\82·
\82é
\81B
\82½
\82Æ
\82¦
\82Î
\8e\9f\82Ì
\8ds}
7620 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7621 if (isValidFile(FileName)) then begin
7622 LogFolder := ExtractFilePath(Board.FilePath);
7623 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7624 GikoUtil.MsgBox(Handle, LogFolder + '
\82É' + ExtractFileName(FileName) + '
\82ª
\8aù
\82É
\91¶
\8dÝ
\82µ
\82Ü
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7626 if (not DirectoryExists(LogFolder)) then begin
7627 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7628 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7631 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7632 GikoUtil.MsgBox(Handle, FileName + '
\82Ì
\83R
\83s
\81[
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7634 datList.Add(ExtractFileName(FileName));
7639 DragFinish(Msg.Drop);
7640 if (datList.Count > 0) then begin
7641 GikoSys.AddOutofIndexDat(Board, datList, False);
7642 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7643 if GikoForm.TreeView.Visible then
7644 GikoForm.TreeView.Refresh;
7645 if GikoForm.ListView.Visible then
7646 GikoForm.ListView.Refresh;
7648 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7656 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7659 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7660 function TGikoForm.isValidFile(FileName: String) : boolean;
7667 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7668 if ( not FileExists(FileName) ) then begin
7670 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7671 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7673 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\8ag
\92£
\8eq
\82ª".dat"
\82Å
\82 \82è
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7675 //
\83\8d\83O
\83t
\83@
\83C
\83\8b\82Ì
\8ag
\92£
\8eq
\82ð
\82Í
\82¸
\82µ
\82½
\82à
\82Ì
\82ª
\83X
\83\8c\8dì
\90¬
\93ú
\8e\9e
7677 dt := GikoSys.GetCreateDateFromName(FileName);
7678 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7680 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7684 GikoUtil.MsgBox(Handle, ExtractFileName(FileName) + '
\82Ì
\83t
\83@
\83C
\83\8b\96¼
\82ª
\95s
\90³
\82Å
\82·
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);