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;
425 ResPopupClearTimer: TTimer;
426 procedure FormCreate(Sender: TObject);
427 procedure FormDestroy(Sender: TObject);
428 procedure BrowserStatusTextChange(Sender: TObject;
429 const Text: WideString);
430 procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
431 procedure TreeViewChanging(Sender: TObject; Node: TTreeNode;
432 var AllowChange: Boolean);
433 procedure ListViewKeyDown(Sender: TObject; var Key: Word;
435 procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
436 procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
437 Button: TToolButton; State: TCustomDrawState;
438 var DefaultDraw: Boolean);
439 procedure BrowserBeforeNavigate2(Sender: TObject;
440 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
441 Headers: OleVariant; var Cancel: WordBool);
442 procedure TreeViewCustomDraw(Sender: TCustomTreeView;
443 const ARect: TRect; var DefaultDraw: Boolean);
444 procedure TreeViewCustomDrawItem(Sender: TCustomTreeView;
445 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
446 procedure TreeViewExpanded(Sender: TObject; Node: TTreeNode);
447 procedure ListViewCustomDraw(Sender: TCustomListView;
448 const ARect: TRect; var DefaultDraw: Boolean);
449 procedure ListViewMouseDown(Sender: TObject; Button: TMouseButton;
450 Shift: TShiftState; X, Y: Integer);
451 procedure TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
452 procedure MessageListViewResize(Sender: TObject);
453 procedure CabinetVisible( isVisible : Boolean );
454 procedure FormResize(Sender: TObject);
455 procedure ListPopupMenuPopup(Sender: TObject);
456 procedure TreePopupMenuPopup(Sender: TObject);
457 procedure BrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch;
458 var Cancel: WordBool);
459 procedure ListSplitterMoved(Sender: TObject);
460 procedure BrowserTabChange(Sender: TObject);
461 procedure BrowserTabMouseDown(Sender: TObject; Button: TMouseButton;
462 Shift: TShiftState; X, Y: Integer);
463 procedure BrowserTabDragOver(Sender, Source: TObject; X, Y: Integer;
464 State: TDragState; var Accept: Boolean);
465 procedure BrowserTabDragDrop(Sender, Source: TObject; X, Y: Integer);
466 procedure BrowserTabMouseMove(Sender: TObject; Shift: TShiftState; X,
468 procedure BrowserDocumentComplete(Sender: TObject;
469 const pDisp: IDispatch; var URL: OleVariant);
470 procedure RoundNamePopupMenuPopup(Sender: TObject);
471 procedure FormShow(Sender: TObject);
472 procedure BrowserTabToolBarResize(Sender: TObject);
473 procedure FavoriteMenuClick(Sender: TObject);
474 procedure MainCoolBarResize(Sender: TObject);
475 procedure AddressToolBarResize(Sender: TObject);
476 procedure AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
478 procedure BrowserEnter(Sender: TObject);
479 procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
480 procedure PreviewTimerTimer(Sender: TObject);
481 procedure MessageHideButtonClick(Sender: TObject);
482 procedure HistoryAllClearToolButtonClick(Sender: TObject);
483 procedure MainCoolBarBandInfo(Sender: TObject;
484 var BandInfo: PReBarBandInfoA);
485 procedure MainCoolBarChevronClick(Sender: TObject;
486 RebarChevron: PNMRebarChevron);
487 procedure ListCoolBarBandInfo(Sender: TObject;
488 var BandInfo: PReBarBandInfoA);
489 procedure ListCoolBarChevronClick(Sender: TObject;
490 RebarChevron: PNMRebarChevron);
491 procedure BrowserCoolBarBandInfo(Sender: TObject;
492 var BandInfo: PReBarBandInfoA);
493 procedure BrowserCoolBarChevronClick(Sender: TObject;
494 RebarChevron: PNMRebarChevron);
495 procedure ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
496 procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
497 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
498 procedure SelectComboBoxChange(Sender: TObject);
499 procedure SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
501 procedure SelectComboBoxExit(Sender: TObject);
502 procedure SelectComboBoxSplitterMouseMove(Sender: TObject;
503 Shift: TShiftState; X, Y: Integer);
504 procedure SelectComboBoxSplitterMouseDown(Sender: TObject;
505 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
506 procedure SelectComboBoxSplitterMouseUp(Sender: TObject;
507 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
508 procedure StatusBarResize(Sender: TObject);
509 procedure SelectComboBoxEnter(Sender: TObject);
510 procedure FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
512 procedure FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
513 procedure FavoriteTreeViewEdited(Sender: TObject; Node: TTreeNode;
515 procedure FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
517 procedure FavoriteTreePopupMenuPopup(Sender: TObject);
518 procedure LinkToolBarDragDrop(Sender, Source: TObject; X, Y: Integer);
519 procedure BrowserTabMouseUp(Sender: TObject; Button: TMouseButton;
520 Shift: TShiftState; X, Y: Integer);
521 procedure LinkToolBarDragOver(Sender, Source: TObject; X, Y: Integer;
522 State: TDragState; var Accept: Boolean);
523 procedure FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
525 procedure FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
526 procedure BrowserTabContextPopup(Sender: TObject; MousePos: TPoint;
527 var Handled: Boolean);
528 procedure BrowserTabPopupMenuPopup(Sender: TObject);
529 procedure BrowserTabResize(Sender: TObject);
530 procedure TreeViewKeyDown(Sender: TObject; var Key: Word;
532 procedure FavoriteTreeViewMouseDown(Sender: TObject;
533 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
534 procedure MessagePanelResize(Sender: TObject);
536 procedure SelectTimerTimer(Sender: TObject);
537 procedure ListViewColumnRightClick(Sender: TObject;
538 Column: TListColumn; Point: TPoint);
539 procedure ListViewCustomDrawItem(Sender: TCustomListView;
540 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
541 procedure FormActivate(Sender: TObject);
542 procedure BrowserPanelResize(Sender: TObject);
543 procedure MenuToolBarResize(Sender: TObject);
544 procedure ListToolBarResize(Sender: TObject);
545 procedure BrowserToolBarResize(Sender: TObject);
546 procedure KokoPopupMenuPopup(Sender: TObject);
547 procedure ListViewKeyUp(Sender: TObject; var Key: Word;
549 procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
550 var AllowEdit: Boolean);
551 procedure CabinetCloseSpeedButtonClick(Sender: TObject);
552 procedure FavoriteArrangeToolButtonClick(Sender: TObject);
553 procedure GikoApplicationEventsMessage(var Msg: tagMSG;
554 var Handled: Boolean);
555 procedure GikoApplicationEventsDeactivate(Sender: TObject);
556 procedure GikoApplicationEventsException(Sender: TObject; E: Exception);
557 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
558 Shift: TShiftState; X, Y: Integer);
559 procedure GetResURLMenuClick(Sender: TObject);
560 procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
561 var Handled: Boolean);
562 procedure ResPopupClearTimerTimer(Sender: TObject);
565 FEnabledCloseButton: Boolean;
566 FClickNode: TTreeNode;
568 FPreviewBrowser: TPreviewBrowser;
570 FBrowserSizeHeight: Integer;
571 FBrowserSizeWidth: Integer;
572 FTabHintIndex: Integer;
573 FListStyle: TViewStyle; //
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93\83X
\83^
\83C
\83\8b
574 FItemNoVisible: Boolean; //
\83\8a\83X
\83g
\94Ô
\8d\86\95\
\8e¦
\83t
\83\89\83O
575 FViewType: TGikoViewType; //
\83\8a\83X
\83g
\83A
\83C
\83e
\83\80\95\
\8e¦
\83^
\83C
\83v
576 FActiveList: TObject;
577 FActiveContent: TBrowserRecord; //
579 FHistoryList: THistoryList; //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
580 FTreeType: TGikoTreeType;
584 FDownloadTitle: string; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\83^
\83C
\83g
\83\8b\96¼
585 FDownloadMax: Integer; //
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86\82Ì
\8dÅ
\91å
\83T
\83C
\83Y
586 FEvent: THTMLDocumentEventSink;//
\83u
\83\89\83E
\83U
\83h
\83L
\83\85\83\81\83\93\83g
\83C
\83x
\83\93\83g
587 IsDraggingSelectComboBox : Boolean;
588 DraggingSelectComboBoxPosition : TPoint;
589 FSearchDialog: TSearchDialog;
590 FDropSpaceNode: TTreeNode;
591 FDragTime : Cardinal; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
592 FDragButton : TToolButton; ///<
\83\8a\83\93\83N
\82ÌD&D
\97p
\82ÉDrag
\82µ
\82Ä
\82éButton
\95Û
\91¶
593 FDragWFirst : Boolean; ///< WebTab
\82ÌD&D
\97p
594 FListViewBackGroundColor : TColor; ///< ListView
\82ÌBackGroundColor
595 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¦
596 FOddColor : TColor; ///<
\82»
\82Ì
\90F
597 FSelectResWord : string; ///<
\83\8c\83X
\8di
\8d\9e\83\8f\81[
\83h
598 FIsIgnoreResize : TResizeType; ///<
\83\8a\83T
\83C
\83Y
\83C
\83x
\83\93\83g
\82ð
\96³
\8e\8b\82·
\82é
\82©
\82Ç
\82¤
\82©
599 FIsMinimize : TMinimizeType; ///<
\8dÅ
\8f¬
\89»
\82µ
\82Ä
\82¢
\82é
\8dÅ
\92\86\82©
600 FOldFormWidth : Integer; ///<
\92¼
\91O
\82Ì
\83E
\83B
\83\93\83h
\83E
\82Ì
\95\9d
601 FToolBarSettingSender : TToolBarSettingSenderType; ///<
\83c
\81[
\83\8b\83o
\81[
\90Ý
\92è
\82ð
\83N
\83\8a\83b
\83N
\82µ
\82½
\83N
\81[
\83\8b\83o
\81[
602 FMouseDownPos : TPoint; ///<
\83u
\83\89\83E
\83U
\83^
\83u
\82Å
\83}
\83E
\83X
\82ð
\89\9f\82µ
\82½
\82Æ
\82«
\82Ì
\8dÀ
\95W
604 FResRangeMenuSelect : Longint; ///< ResRangeButton
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\8d\80\96Ú (
\83t
\83H
\81[
\83}
\83b
\83g
\82Í ResRange
\8cÝ
\8a·)
606 FIsHandledWheel : Boolean; ///<
\8aù
\82É
\8eó
\82¯
\8eæ
\82Á
\82½ WM_MOUSEWHEEL
\82©
\82Ç
\82¤
\82©
607 DiffComp: Boolean; //Add by Genyakun
\83X
\83\8c\82ª
\8dX
\90V
\82³
\82ê
\82½
\82Æ
\82«
\82ÉTrue
\82É
\82È
\82é
608 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ñ
609 FPreviewBrowserRect: TRect; ///<
\83v
\83\8c\83r
\83\85\81[
\82Ì
\95\
\8e¦
\88Ê
\92u
\82ð
\8bL
\89¯
\82·
\82é
610 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ñ
611 FResPopupBrowser: TResPopupBrowser;
612 procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
613 procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
614 procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
615 procedure WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
616 procedure Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
618 procedure ListDoubleClick(Shift: TShiftState);
619 function Hook(var Message: TMessage): Boolean;
620 procedure AddRoundNameMenu(MenuItem: TMenuItem);
621 procedure SetMenuFont;
622 procedure CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
623 procedure FavoriteClick(Sender: TObject; ActiveTab: Boolean); overload;
624 procedure FavoriteClick(Sender: TObject); overload;
625 procedure FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
626 function OnDocumentContextMenu(Sender: TObject): WordBool;
627 function GetWidthAllToolButton(ToolBar: TToolBar): Integer;
628 procedure MenuBarChevronMenu;
629 procedure LinkBarChevronMenu;
630 procedure ToolBarChevronMenu(ToolBar: TToolBar);
631 procedure LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
632 procedure LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
633 procedure LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
634 procedure LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
635 procedure LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
636 function TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
637 procedure FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
638 procedure FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
639 procedure FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
641 procedure SetListViewBackGroundColor(value: TColor);
642 procedure BBSMenuItemOnClick( Sender : TObject );
643 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
644 procedure SaveCoolBarSettings;
645 procedure SaveMainCoolBarSettings;
646 procedure SaveBoardCoolBarSettings;
647 procedure SaveBrowserCoolBarSettings;
648 /// CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
649 procedure LoadCoolBarSettings;
650 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
651 procedure OnMinimize;
652 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½
653 procedure OnMinimized;
654 /// TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
655 procedure TreeClick( Node : TTreeNode );
656 /// TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
657 procedure TreeDoubleClick( Node : TTreeNode );
658 ///
\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
659 procedure SetBBSMenu;
660 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
661 procedure ListColumnPopupMenuOnClick( Sender : TObject );
662 //!
\8di
\82è
\8d\9e\82Ý
\95¶
\8e\9a\97ñ
\90Ý
\92è
663 procedure SetSelectWord( const text : string );
664 //
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
665 function GetScreenCursor(): TCursor;
666 //
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
667 procedure SetScreenCursor(Cursor : TCursor);
668 //!
\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¬
669 procedure CreateControlThread();
670 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
671 procedure CreateBrowsers(count: Integer);
672 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
673 procedure GetGroupIndex(ActionList: TActionList);
674 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
675 procedure SetGroupIndex(ActionList: TActionList);
676 //!
\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é)
677 procedure OpenThreadItem(Thread: TThreadItem; URL: String);
678 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
679 procedure RefreshListView(Thread: TThreadItem);
680 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
681 procedure ClearThreadRengeAction;
682 //!
\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¦
683 procedure UnStoredTaskTray;
684 //!
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
685 procedure ShowEditors(nCmdShow: Integer);
686 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
687 procedure ReleaseOldestBrowser;
688 //!
\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Á
689 procedure AddMenuSameBoardThread;
690 //!
\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
691 procedure SameBoardThreadSubItemOnClick(Sender: TObject);
692 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
693 procedure CreateResPopupBrowser;
694 //! D&D
\82ð
\8eó
\82¯
\8eæ
\82é
695 procedure WMDropFiles(var Msg: TWMDropFiles); Message WM_DropFiles;
696 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
697 function isValidFile(FileName: String) : boolean;
699 procedure CreateParams(var Params: TCreateParams); override;
700 procedure WndProc(var Message: TMessage); override;
701 procedure WMSetCursor(var Message: TWMSetCursor); message WM_SETCURSOR;
702 procedure WMSettingChange(var Message: TWMWinIniChange); message WM_SETTINGCHANGE;
703 procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
707 LastRoundTime: TDateTime;
708 BrowserNullTab: TBrowserRecord;
709 FControlThread: TThreadControl;
710 FIconData : TNotifyIconData;
711 procedure MoveToURL(const inURL: string);
712 function InsertBrowserTab(ThreadItem: TThreadItem; ActiveTab: Boolean = True) : TBrowserRecord;
714 function GetHttpState: Boolean;
715 procedure SetEnabledCloseButton(Enabled: Boolean);
716 function GetTreeNode(Data: TObject): TTreeNode;
717 procedure ListViewAllSelect;
718 property ListStyle: TViewStyle read FListStyle write FListStyle;
719 property ItemNoVisible: Boolean read FItemNoVisible write FItemNoVisible;
720 property ViewType: TGikoViewType read FViewType write FViewType;
721 property NameCookie: string read FNameCookie write FNameCookie;
722 property MailCookie: string read FMailCookie write FMailCookie;
723 property ClickNode: TTreeNode read FClickNode write FClickNode;
724 property TreeType: TGikoTreeType read FTreeType write FTreeType;
725 property ActiveContent: TBrowserRecord read FActiveContent write FActiveContent;
726 property ResRangeMenuSelect: Longint read FResRangeMenuSelect write FResRangeMenuSelect;
727 property SelectResWord : string read FSelectResWord write FSelectResWord;
728 property BrowserSizeWidth: Integer read FBrowserSizeWidth write FBrowserSizeWidth;
729 property BrowserSizeHeight: Integer read FBrowserSizeHeight write FBrowserSizeHeight;
730 property SearchDialog: TSearchDialog read FSearchDialog write FSearchDialog;
731 property ToolBarSettingSender : TToolBarSettingSenderType
732 read FToolBarSettingSender write FToolBarSettingSender;
733 property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
734 property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
735 property WorkCount: Integer read FWorkCount write FWorkCount;
736 procedure SetContent(inThread: TBrowserRecord);
737 function GetActiveContent(popup :Boolean = false): TThreadItem;
738 function GetActiveList: TObject;
740 procedure SetListViewType(AViewType: TGikoViewType); overload;
741 procedure SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean); overload;
742 procedure PlaySound(SoundEventName: string);
743 procedure ShowBBSTree( inBBS : TBBS );
744 procedure ShowBBSTreeOld( inBBS : TBBS );
745 procedure ShowHistoryTree;
746 procedure AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
747 procedure SetBrowserTabState;
748 procedure SetToolBarPopup;
749 procedure ShowFavoriteAddDialog( Item : TObject );
750 procedure FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
751 procedure RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
752 property ListViewBackGroundColor: TColor read FListViewBackGroundColor write SetListViewBackGroundColor;
753 property UseOddResOddColor : Boolean read FUseOddResOddColor write FUseOddResOddColor;
754 property OddColor : TColor read FOddColor write FOddColor;
755 function FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
756 procedure OnPlugInMenuItem( Sender : TObject );
757 procedure TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
758 /// 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Å
759 procedure ActiveListColumnSave;
760 procedure SetActiveList(Obj: TObject);
761 property ActiveList: TObject read GetActiveList write SetActiveList;
762 /// CoolBar
\82ª
\83T
\83C
\83Y
\95Ï
\8dX
\82³
\82ê
\82½
763 procedure CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
764 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
765 procedure IndividualAbonID(Atype : Integer);
766 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
767 procedure IndividualAbon(Atag, Atype : Integer);
768 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
769 procedure AddIDtoNGWord(invisible : boolean);
770 //
\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Ý
771 procedure RepaintAllTabsBrowser();
772 //
\83\8a\83\93\83N
\83o
\81[
\90Ý
\92è
773 procedure SetLinkBar;
774 procedure FavoriteBrowseFolder( node: TTreeNode );
775 //
\83X
\83\8c\83b
\83h
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
776 procedure DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
777 //
\94Â
\82Ì
\83_
\83E
\83\93\83\8d\81[
\83h
778 procedure DownloadList(Board: TBoard; ForceDownload: Boolean = False);
779 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
780 procedure DeleteHistory( threadItem: TThreadItem );
781 //
\83^
\83u
\82ð
\8dí
\8f\9c \83X
\83\8c\83b
\83h
\8ew
\92è
782 procedure DeleteTab(ThreadItem: TThreadItem); overload;
783 //
\83^
\83u
\82ð
\8dí
\8f\9c \83u
\83\89\83E
\83U
\83\8c\83R
\81[
\83h
\81i
\83^
\83u
\81j
\8ew
\92è
784 procedure DeleteTab(BrowserRecord: TBrowserRecord); overload;
785 //
\83^
\83u
\8dí
\8f\9c\81i
\8eÀ
\91\95\95\94\81j
786 procedure DeleteTab(index, selectIndex: Integer); overload;
787 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
788 procedure BrowserMovement(const AName: string); overload;
789 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
790 procedure BrowserMovement(scroll: Integer); overload;
791 //Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
792 function GetMainForm(): TComponent;
793 procedure SelectTreeNode(Item: TObject; CallEvent: Boolean);
794 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\8en
795 procedure OnGestureStart(Sender: TObject);
796 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\92\86
797 procedure OnGestureMove(Sender: TObject);
798 //!
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8fI
\97¹
799 procedure OnGestureEnd(Sender: TObject);
800 ///
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
801 procedure ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
802 //ListView
\82Å
\91I
\91ð
\82³
\82ê
\82Ä
\82¢
\82é
\83A
\83C
\83e
\83\80\82ð
\8eæ
\93¾
\82·
\82é
803 procedure SelectListItem(List: TList);
804 //
\8ew
\92è
\82µ
\82½
\83\8c\83X
\82ð
\83R
\83s
\81[
\82·
\82é
805 procedure KonoresCopy(Number: Integer; ReplaceTag : Boolean);
807 procedure ModifySelectList;
809 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string); overload;
811 procedure SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string); overload;
813 procedure SetSelectRoundName(Sender: TObject);
815 function GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
817 function WebBrowserClick(Sender: TObject): WordBool;
818 //!
\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é
819 procedure SetSelectComboBox();
821 //!
\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
822 procedure TaskTrayIconMessage(var Msg : TMsg); message WM_USER + 2010;
823 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
824 procedure StoredTaskTray;
826 property EnabledCloseButton: Boolean read FEnabledCloseButton write SetEnabledCloseButton;
829 TFavoriteMenuItem = class(TMenuItem)
833 property Data: Pointer read FData write FData;
836 TBBSMenuItem = class(TMenuItem)
840 property Data: Pointer read FData write FData;
843 TLinkToolButton = class(TToolButton)
847 property Data: Pointer read FData write FData;
856 GikoUtil, IndividualAbon, Math, Kotehan, KeySetting,
857 YofUtils, ToolBarUtil, ToolBarSetting,
858 GikoXMLDoc, RoundName, IniFiles, FavoriteAdd,
859 FavoriteArrange, AddressHistory, Gesture,
860 About, Option, Round, Splash, Sort, ListSelect, Imm,
861 NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
862 HTMLCreate, ListViewUtils, GikoDataModule, GikoMessage,
863 InputAssistDataModule, Types, ReplaceDataModule;
866 BLANK_HTML: string = 'about:blank';
867 BROWSER_COUNT = 5; //
\83u
\83\89\83E
\83U
\82Ì
\90\94
869 DandD_THRESHOLD = 5; //D&D
\82Ìè
\87\92l
\81ipixcel)
870 //
\83v
\83\8c\83r
\83\85\81[
\83t
\83@
\83C
\83\8b\96¼
871 HTML_FILE_NAME = 'temp_preview.html';
872 //
\83\81\83b
\83Z
\81[
\83WID
873 USER_TREECLICK = WM_USER + 2000;
874 USER_RESIZED = WM_USER + 2001;
875 USER_MINIMIZED = WM_USER + 2002;
876 USER_SETLINKBAR = WM_USER + 2003;
877 USER_DOCUMENTCOMPLETE = WM_USER + 2004; ///< wParam : TWebBrowser
878 USER_TASKTRAY = WM_USER + 2010;
881 procedure TGikoForm.CreateParams(var Params: TCreateParams);
884 if FormStyle in [fsNormal, fsStayOnTop] then begin
885 if BorderStyle in [bsSingle, bsSizeable] then begin
886 Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
887 Params.WndParent := 0;
892 procedure TGikoForm.FormCreate(Sender: TObject);
894 TVS_NOTOOLTIPS = $0080;
900 wp: TWindowPlacement;
904 Writeln('============================================================');
905 Writeln('
\83M
\83R
\83i
\83r
\83f
\83o
\83b
\83O
\83R
\83\93\83\
\81[
\83\8b');
907 Writeln('
\82±
\82Ì
\89æ
\96Ê
\82ð
\95Â
\82¶
\82È
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81B');
908 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¢');
909 Writeln('============================================================');
912 Sort.SetSortDate(Now());
914 FTreeType := gttNone;
915 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô
917 Application.HookMainWindow(Hook);
918 FIsIgnoreResize := rtResizing;
919 //ActionList
\82ÌGuoupIndex
\82ð
\95Û
\91¶
\82µ
\82Ä
\81A0
\82É
\83N
\83\8a\83A
\82·
\82é
\81B
920 //(
\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¢)
921 //
\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
922 GetGroupIndex(GikoDM.GikoFormActionList);
923 FSearchDialog := nil;
924 FResPopupBrowser := nil;
925 CreateBrowsers(BROWSER_COUNT);
928 //
\83\81\83j
\83\85\81[
\83t
\83H
\83\93\83g
931 //
\8eè
\82Ì
\83J
\81[
\83\
\83\8b
932 Screen.Cursors[5] := LoadCursor(HInstance, 'GIKOHAND');
934 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
935 AddressHistoryDM.ReadHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
937 EnabledCloseButton := True;
939 //
\83\8a\83X
\83g
\83X
\83^
\83C
\83\8b
940 ListView.ViewStyle := GikoSys.Setting.ListStyle;
942 //
\83A
\83j
\83\81\83p
\83l
\83\8b\88Ê
\92u
944 AnimePanel.Left := 0;
946 //
\8ae
\8eí
\89Â
\8e\8b\8fó
\91Ô
\82È
\82Ç
\90Ý
\92è
948 //
\83L
\83\83\83r
\83l
\83b
\83g
949 CabinetPanel.Width := GikoSys.Setting.CabinetWidth;
951 //
\83\81\83b
\83Z
\81[
\83W
\83o
\81[
952 GikoDM.MsgBarVisibleAction.Checked := GikoSys.Setting.MessageBarVisible;
953 GikoDM.MsgBarVisibleActionExecute(nil);
954 MessagePanel.Height := GikoSys.Setting.MessegeBarHeight;
956 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
957 GikoDM.StatusBarVisibleAction.Checked := GikoSys.Setting.StatusBarVisible;
958 GikoDM.StatusBarVisibleActionExecute(nil);
960 //
\83t
\83H
\83\93\83g
\81E
\90F
\90Ý
\92è
961 TreeView.Items.BeginUpdate;
962 FavoriteTreeView.Items.BeginUpdate;
963 ListView.Items.BeginUpdate;
965 TreeView.Font.Name := GikoSys.Setting.CabinetFontName;
966 TreeView.Font.Size := GikoSys.Setting.CabinetFontSize;
967 TreeView.Font.Color := GikoSys.Setting.CabinetFontColor;
968 TreeView.Color := GikoSys.Setting.CabinetBackColor;
969 FavoriteTreeView.Font.Assign(TreeView.Font);
970 FavoriteTreeView.Color := GikoSys.Setting.CabinetBackColor;
972 ListView.Font.Name := GikoSys.Setting.ListFontName;
973 ListView.Font.Size := GikoSys.Setting.ListFontSize;
974 ListView.Font.Color := GikoSys.Setting.ListFontColor;
975 ListView.Font.Style := [];
976 if GikoSys.Setting.ListFontBold then
977 ListView.Font.Style := [fsbold];
978 if GikoSys.Setting.ListFontItalic then
979 ListView.Font.Style := ListView.Font.Style + [fsitalic];
981 ListViewBackGroundColor := clWhite; //
\83f
\83t
\83H
\83\8b\83g
\82É
\90Ý
\92è
\82µ
\82½
\82Ì
\82¿
982 ListViewBackGroundColor := GikoSys.Setting.ListBackColor; //
\83\86\81[
\83U
\92è
\8b`
\82É
\95Ï
\8dX
983 FUseOddResOddColor := GikoSys.Setting.UseOddColorOddResNum;
984 FOddColor := GikoSys.Setting.OddColor;
987 TreeView.Items.EndUpdate;
988 FavoriteTreeView.Items.EndUpdate;
989 ListView.Items.EndUpdate;
991 //ViewNoButton.Down := GikoSys.Setting.ListViewNo;
992 GikoDM.ListNumberVisibleAction.Checked := GikoSys.Setting.ListViewNo;
994 //
\83~
\83\85\81[
\83g
\82Ì
\8fó
\91Ô
\82ð
\90Ý
\92è
995 GikoDM.MuteAction.Checked := GikoSys.Setting.Mute;
997 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
998 FResRangeMenuSelect := GikoSys.ResRange;
999 case GikoSys.ResRange of
1002 GikoDM.AllResAction.Execute;
1006 SelectComboBox.Text := SelectComboBox.Items[ 1 ];
1007 GikoDM.SelectResAction.Checked := True;
1010 case FResRangeMenuSelect of
1011 Ord( grrKoko ): GikoDM.OnlyKokoResAction.Checked := True;
1012 Ord( grrNew ): GikoDM.OnlyNewResAction.Checked := True;
1013 100: GikoDM.OnlyAHundredResAction.Checked := True;
1017 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\95\
\8e¦
\94Í
\88Í
1018 case GikoSys.Setting.ThreadRange of
1021 GikoDM.AllItemAction.Checked := True;
1026 GikoDM.LogItemAction.Checked := True;
1031 GikoDM.NewItemAction.Checked := True;
1036 GikoDM.LiveItemAction.Checked := True;
1037 ViewType := gvtLive;
1041 GikoDM.ArchiveItemAction.Checked := True;
1042 ViewType := gvtArch;
1047 //
\83u
\83\89\83E
\83U
\83^
\83u
\83t
\83H
\83\93\83g
1048 BrowserTab.Font.Name := GikoSys.Setting.BrowserTabFontName;
1049 BrowserTab.Font.Size := GikoSys.Setting.BrowserTabFontSize;
1050 BrowserTab.Font.Style := [];
1051 if GikoSys.Setting.BrowserTabFontBold then
1052 BrowserTab.Font.Style := [fsBold];
1053 if GikoSys.Setting.BrowserTabFontItalic then
1054 BrowserTab.Font.Style := GikoForm.BrowserTab.Font.Style + [fsItalic];
1055 BrowserTab.DoubleBuffered := True;
1056 FDragWFirst := false;
1057 SetContent(BrowserNullTab); //
\83u
\83\89\83E
\83U
\82ð
\8bó
\94\92\95\
\8e¦
1059 //
\83u
\83\89\83E
\83U
\83^
\83u
1060 GikoDM.BrowserTabVisibleAction.Checked := GikoSys.Setting.BrowserTabVisible;
1062 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
1063 GikoDM.BrowserTabTopAction.Checked := True;
1065 GikoDM.BrowserTabBottomAction.Checked := True;
1068 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
1069 GikoDM.BrowserTabTabStyleAction.Checked := True;
1070 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
1071 GikoDM.BrowserTabButtonStyleAction.Checked := True;
1073 GikoDM.BrowserTabFlatStyleAction.Checked := True;
1076 //
\83v
\83\8d\83O
\83\8c\83X
\83o
\81[
\82Ì
\8f\89\8aú
\89»
1077 ProgressBar.Parent := StatusBar;
1078 ProgressBar.Top := 2;
1079 ProgressBar.Left := 0;
1080 ProgressBar.Width := StatusBar.Panels[0].Width;
1081 ProgressBar.Height := StatusBar.Height - 2;
1082 ProgressBar.Position := 0;
1084 //
\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Æ)
1085 InitializeBoardPlugIns;
1087 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\97ñ
\8b\93(ReadFavorite
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1088 GikoSys.ListBoardFile;
1089 //
\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É
1091 //
\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è
1092 if (SplashWindow <> nil) then begin
1093 SplashWindow.ProgressBar.Max := Length(BBSs) * 20;
1097 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1098 for i := Length(BBSs) - 1 downto 0 do begin
1099 if not BBSs[i].IsBoardFileRead then
1100 GikoSys.ReadBoardFile(BBSs[i]);
1102 if SplashWindow <> nil then begin
1103 SplashWindow.ProgressBar.StepBy(20);
1104 SplashWindow.Update;
1108 //
\8f\84\89ñ
\83f
\81[
\83^
\93Ç
\82Ý
\8d\9e\82Ý
1109 RoundList := TRoundList.Create;
1110 RoundList.LoadRoundBoardFile;
1111 RoundList.LoadRoundThreadFile;
1113 //TreeView
\82Ì
\8e×
\96\82\8fL
\82¢ToolTip
\82ð
\94ñ
\95\
\8e¦
1114 Style := GetWindowLong(TreeView.Handle, GWL_STYLE);
1115 Style := Style or TVS_NOTOOLTIPS;
1116 SetWindowLong(TreeView.Handle, GWL_STYLE, Style);
1118 //
\83c
\83\8a\81[
\82ð
\83\81\83C
\83\93\82¾
\82¯
\95\
\8e¦
\82É
\82µ
\82Ä
\8dÅ
\91å
\89»
1119 TreeView.Align := alClient;
1120 FavoriteTreeView.Align := alClient;
1121 FavoriteTreeView.Visible := False;
1123 //
\83\81\83j
\83\85\81[
\82É
\92Ç
\89Á
1126 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95\9c\8c³
1127 wp.length := sizeof(wp);
1128 wp.rcNormalPosition.Top := GikoSys.Setting.WindowTop;
1129 wp.rcNormalPosition.Left := GikoSys.Setting.WindowLeft;
1130 wp.rcNormalPosition.Bottom := GikoSys.Setting.WindowTop + GikoSys.Setting.WindowHeight;
1131 wp.rcNormalPosition.Right := GikoSys.Setting.WindowLeft + GikoSys.Setting.WindowWidth;
1132 wp.showCmd := SW_HIDE;
1133 SetWindowPlacement(Handle, @wp);
1136 if GikoSys.Setting.WindowMax then
1137 WindowState := wsMaximized;
1139 //
\83M
\83R
\83A
\83j
\83\81
1141 FileName := GikoSys.GetAppDir + 'gikoNavi.avi';
1142 if FileExists(FileName) then
1143 Animate.FileName := FileName;
1151 //
\83u
\83\89\83E
\83U
\83T
\83C
\83Y
\95Ï
\8dX
\82Ì
\8f\89\8aú
\89»
1152 FBrowserSizeHeight := GikoSys.Setting.ListHeight;
1153 FBrowserSizeWidth := GikoSys.Setting.ListWidth;
1156 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g(LoadHistory
\82æ
\82è
\82à
\90æ
\82É
\8ds
\82¤
\82±
\82Æ)
1157 FHistoryList := THistoryList.Create;
1159 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1160 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1161 TreeView, FTreeType);
1163 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1164 FavoriteDM.SetFavTreeView(FavoriteTreeView);
1165 FavoriteDM.ReadFavorite;
1167 GikoDM.ArrangeAction.Checked := not (GikoSys.Setting.ListOrientation = gloVertical);
1168 GikoDM.ArrangeAction.Execute;
1170 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1171 case GikoSys.Setting.ListWidthState of
1173 ViewPanel.Width := 1;
1174 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1175 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1178 ViewPanel.Width := GikoSys.Setting.ListWidth;
1179 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1180 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
1183 ViewPanel.Width := GikoSys.Setting.ListWidth;
1184 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
1185 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
1189 case GikoSys.Setting.ListHeightState of
1191 ViewPanel.Height := 1;
1192 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1193 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1196 ViewPanel.Height := GikoSys.Setting.ListHeight;
1197 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1198 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
1201 ViewPanel.Height := GikoSys.Setting.ListHeight;
1202 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
1203 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
1208 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
1209 CreateControlThread();
1211 //
\8di
\8d\9e\8c\9f\8dõ
\97\9a\97ð
1212 SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1214 //
\83u
\83\89\83E
\83U
\83^
\83u
\90Ý
\92è
1217 BrowserBoardNameLabel.Caption := '';
1218 BrowserNameLabel.Caption := '';
1221 FTabHintIndex := -1;
1223 //
\83c
\81[
\83\8b\83o
\81[Wrapable
1224 ListToolBar.Wrapable := GikoSys.Setting.ListToolBarWrapable;
1225 BrowserToolBar.Wrapable := GikoSys.Setting.BrowserToolBarWrapable;
1227 MakeDefaultINIFile();
1228 //
\83c
\81[
\83\8b\83{
\83^
\83\93\93Ç
\82Ý
\8d\9e\82Ý
1229 ReadToolBarSetting(GikoDM.GikoFormActionList, StdToolBar);
1230 ReadToolBarSetting(GikoDM.GikoFormActionList, ListToolBar);
1231 ReadToolBarSetting(GikoDM.GikoFormActionList, BrowserToolBar);
1234 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
1235 SetSelectComboBox();
1237 //
\83A
\83h
\83\8c\83X
\83o
\81[
1238 AddressComboBox.TabStop := GikoSys.Setting.AddressBarTabStop;
1240 //
\83\8a\83\93\83N
\83o
\81[
1242 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³
\82ÍFormShow
\82É
\88Ú
\93®
\82µ
\82½
1244 //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\82ª
\96³
\82¢
\8fê
\8d\87\82Í
\83\81\83b
\83Z
\81[
\83W
\95\
\8e¦
1245 if not FileExists(GikoSys.GetBoardFileName) then begin
1246 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
1247 + '
\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
1248 + '
\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';
1249 MsgBox(SplashWindow.Handle, msg, '
\83M
\83R
\83i
\83r', MB_OK or MB_ICONINFORMATION);
1250 GikoDM.NewBoardAction.Execute;
1253 //
\83L
\81[
\90Ý
\92è
\93Ç
\82Ý
\8d\9e\82Ý
1254 GikoSys.LoadKeySetting(GikoDM.GikoFormActionList, GikoSys.GetMainKeyFileName);
1256 //
\8dÅ
\8fI
\8f\84\89ñ
\8e\9e\8aÔ
1257 // FLastRoundTime := 0;
1259 ListView.OnData := TListViewUtils.ListViewData;
1261 //
\8dÅ
\8cã
\82É
\91I
\91ð
\82³
\82ê
\82½
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\95\9c\8c³
1262 CabinetVisible( False );
1263 if GikoSys.Setting.CabinetVisible then begin
1264 i := CabinetSelectPopupMenu.Items.Count - 1;
1265 if GikoSys.Setting.CabinetIndex = i - 1 then
1266 GikoDM.CabinetHistoryAction.Execute
1267 else if GikoSys.Setting.CabinetIndex = i then
1268 GikoDM.CabinetFavoriteAction.Execute
1270 if GikoSys.Setting.CabinetIndex < Length( BBSs ) then
1271 ShowBBSTree( BBSs[ GikoSys.Setting.CabinetIndex ] );
1272 //
\8bN
\93®
\8e\9e\82É
\95Û
\91¶
\82³
\82ê
\82Ä
\82µ
\82Ü
\82¤
\91Î
\8dô 2
1273 FIsIgnoreResize := rtResizing;
1274 GikoDM.CabinetBBSAction.Execute;
1277 ShowBBSTreeOld( BBSs[ 0 ] );
1278 PostMessage( Handle, USER_TREECLICK, 0, 0 );
1281 //
\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
1282 for i := 1 to ParamCount do begin
1283 MoveToURL(ParamStr(i));
1286 GikoDM.RepaintStatusBar;
1287 StatusBarResize(Sender);
1289 dummy1.Caption := ItemReservPMenu.Caption;
1290 dummy1.Hint := ItemReservPMenu.Hint;
1292 {$IFDEF SPAM_FILTER_ENABLED}
1293 //
\83X
\83p
\83\80\83t
\83B
\83\8b\83^
\8aw
\8fK
\97\9a\97ð
1294 GikoSys.Bayesian.LoadFromFile( GikoSys.Setting.GetSpamFilterFileName );
1297 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
1298 MouseGesture := TMouseGesture.Create;
1299 GikoSys.Setting.Gestures.LoadGesture(
1300 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
1301 MouseGesture.Margin := GikoSys.Setting.Gestures.Margin;
1302 MouseGesture.OnGestureStart := OnGestureStart;
1303 MouseGesture.OnGestureMove := OnGestureMove;
1304 MouseGesture.OnGestureEnd := OnGestureEnd;
1305 if GikoSys.Setting.GestureEnabled then
1306 MouseGesture.SetHook( Handle );
1308 //2ch
\8c¾
\8cê
\93Ç
\82Ý
\8fo
\82µ
1309 GikoSys.SetGikoMessage;
1311 //
\83I
\81[
\83g
\83\8d\83O
\83C
\83\93
1312 if GikoSys.Setting.AutoLogin then
1313 GikoDM.LoginAction.Execute;
1315 GikoSys.Setting.BeLogin := GikoSys.Setting.BeAutoLogin;
1317 //
\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è
1318 FavoriteAddToolButton.Caption := '
\92Ç
\89Á...';
1319 AntiIndivAbonMenuItem.Caption := '
\8cÂ
\95Ê
\82 \82Ú
\81`
\82ñ
\89ð
\8f\9c';
1321 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\8f\89\8aú
\89»
1322 InputAssistDM.Init(GikoSys.GetInputAssistFileName);
1324 //
\92u
\8a·
\90Ý
\92è
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1325 ReplaceDM.LoadFromFile(GikoSys.GetReplaceFileName);
1327 //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\8fÁ
\8b\8e\83^
\83C
\83}
\81[
1328 ResPopupClearTimer.Interval := GikoSys.Setting.RespopupWait;
1330 // D&D
\82ð
\8eó
\82¯
\8eæ
\82é
1331 DragAcceptFiles(Self.Handle, True);
1334 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82É
\95Û
\91¶
1335 procedure TGikoForm.SaveCoolBarSettings;
1338 if IsIconic( Handle ) or (FIsIgnoreResize <> rtNone) then
1340 SaveMainCoolBarSettings;
1341 SaveBoardCoolBarSettings;
1342 SaveBrowserCoolBarSettings;
1345 procedure TGikoForm.SaveMainCoolBarSettings;
1350 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Main)
1351 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
1352 CoolSet.FCoolID := MainCoolBar.Bands[i].ID;
1353 CoolSet.FCoolWidth := MainCoolBar.Bands[i].Width;
1354 CoolSet.FCoolBreak := MainCoolBar.Bands[i].Break;
1355 GikoSys.Setting.MainCoolSet[i] := CoolSet;
1358 procedure TGikoForm.SaveBoardCoolBarSettings;
1363 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Board)
1364 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
1365 CoolSet.FCoolID := ListCoolBar.Bands[i].ID;
1366 CoolSet.FCoolWidth := ListCoolBar.Bands[i].Width;
1367 CoolSet.FCoolBreak := ListCoolBar.Bands[i].Break;
1368 GikoSys.Setting.ListCoolSet[i] := CoolSet;
1371 procedure TGikoForm.SaveBrowserCoolBarSettings;
1376 //
\83N
\81[
\83\8b\83o
\81[
\95Û
\91¶(Browser)
1377 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
1378 CoolSet.FCoolID := BrowserCoolBar.Bands[i].ID;
1379 CoolSet.FCoolWidth := BrowserCoolBar.Bands[i].Width;
1380 CoolSet.FCoolBreak := BrowserCoolBar.Bands[i].Break;
1381 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
1384 // CoolBar
\82Ì
\90Ý
\92è
\82ð
\95Ï
\90\94\82©
\82ç
\95\9c\8c³
1385 procedure TGikoForm.LoadCoolBarSettings;
1391 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Main)
1392 MainCoolBar.Bands.BeginUpdate;
1394 // for i := 0 to MainCoolBar.Bands.Count - 1 do begin
1395 for i := MAIN_COOLBAND_COUNT - 1 downto 0 do begin
1396 CoolSet := GikoSys.Setting.MainCoolSet[i];
1397 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1398 FIsIgnoreResize := rtNone;
1399 SaveCoolBarSettings;
1402 MainCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1403 MainCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1404 MainCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1407 MainCoolBar.Bands.EndUpdate;
1410 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Board)
1411 ListCoolBar.Bands.BeginUpdate;
1413 // for i := 0 to ListCoolBar.Bands.Count - 1 do begin
1414 for i := LIST_COOLBAND_COUNT - 1 downto 0 do begin
1415 CoolSet := GikoSys.Setting.ListCoolSet[i];
1416 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1417 FIsIgnoreResize := rtNone;
1418 SaveCoolBarSettings;
1421 ListCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1422 ListCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1423 ListCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1426 ListCoolBar.Bands.EndUpdate;
1429 //
\83N
\81[
\83\8b\83o
\81[
\95\9c\8c³(Browser)
1430 BrowserCoolBar.Bands.BeginUpdate;
1432 // for i := 0 to BrowserCoolBar.Bands.Count - 1 do begin
1433 for i := BROWSER_COOLBAND_COUNT - 1 downto 0 do begin
1434 CoolSet := GikoSys.Setting.BrowserCoolSet[i];
1435 if (CoolSet.FCoolID = -1) or (CoolSet.FCoolWidth = -1) then begin
1436 FIsIgnoreResize := rtNone;
1437 SaveCoolBarSettings;
1440 BrowserCoolBar.Bands.FindItemID(CoolSet.FCoolID).Index := i;
1441 BrowserCoolBar.Bands[i].Break := CoolSet.FCoolBreak;
1442 BrowserCoolBar.Bands[i].Width := CoolSet.FCoolWidth;
1445 BrowserCoolBar.Bands.EndUpdate;
1450 procedure TGikoForm.FormShow(Sender: TObject);
1454 if FStartUp then begin
1455 ShowWindow(Application.Handle, SW_HIDE);
1457 //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½
1458 //
\83c
\81[
\83\8b\83o
\81[
\95\
\8e¦
1459 GikoDM.StdToolBarVisibleAction.Checked := GikoSys.Setting.StdToolBarVisible;
1460 GikoDM.StdToolBarVisibleActionExecute( nil );
1461 GikoDM.AddressBarVisibleAction.Checked := GikoSys.Setting.AddressBarVisible;
1462 GikoDM.AddressBarVisibleActionExecute( nil );
1463 GikoDM.LinkBarVisibleAction.Checked := GikoSys.Setting.LinkBarVisible;
1464 GikoDM.LinkBarVisibleActionExecute( nil );
1465 GikoDM.ListToolBarVisibleAction.Checked := GikoSys.Setting.ListToolBarVisible;
1466 GikoDM.ListToolBarVisibleActionExecute( nil );
1467 GikoDM.ListNameBarVisibleAction.Checked := GikoSys.Setting.ListNameBarVisible;
1468 GikoDM.ListNameBarVisibleActionExecute( nil );
1469 GikoDM.BrowserToolBarVisibleAction.Checked := GikoSys.Setting.BrowserToolBarVisible;
1470 GikoDM.BrowserToolBarVisibleActionExecute( nil );
1471 GikoDM.BrowserNameBarVisibleAction.Checked := GikoSys.Setting.BrowserNameBarVisible;
1472 GikoDM.BrowserNameBarVisibleActionExecute( nil );
1474 // CoolBar
\95\9c\8c³
1475 LoadCoolBarSettings;
1477 //
\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é
1478 // ResetBandInfo( ListCoolBar, ListToolBar );
1479 FIsIgnoreResize := rtNone;
1481 //FormCrete
\82©
\82ç
\88Ú
\93®
\81B
1482 if GikoSys.Setting.TabAutoLoadSave then begin
1483 GikoDM.TabsOpenAction.Tag := 1;
1484 GikoDM.TabsOpenAction.Execute;
1485 GikoDM.TabsOpenAction.Tag := 0;
1486 if (GikoSys.Setting.LastCloseTabURL <> '') then begin
1487 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( FActiveContent.Browser ), 0 );
1488 if ( FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
1489 while (FActiveContent.Browser.ReadyState <> READYSTATE_COMPLETE) and
1490 (FActiveContent.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
1491 Application.ProcessMessages;
1494 item := BBSsFindThreadFromURL( GikoSys.Setting.LastCloseTabURL );
1495 if (item <> nil) and (item.IsLogFile) then begin
1496 OpenThreadItem(item, item.URL);
1498 GikoSys.Setting.LastCloseTabURL := '';
1502 //ActionList
\82ÌGroupIndex
\82ð
\8c³
\82É
\96ß
\82·
1503 SetGroupIndex(GikoDM.GikoFormActionList);
1509 procedure TGikoForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
1511 // if GikoForm.WindowState <> wsMinimized then
1512 // SaveCoolBarSettings;
1514 if ( GikoSys.Setting.ShowDialogForEnd ) and
1515 (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
1520 GikoSys.Setting.LastCloseTabURL := '';
1521 if GikoSys.Setting.TabAutoLoadSave then begin
1522 GikoDM.TabsSaveAction.Execute;
1523 if (GetActiveContent <> nil) and
1524 (GetActiveContent.IsLogFile) then begin
1525 GikoSys.Setting.LastCloseTabURL := GetActiveContent.URL;
1529 if (SearchDialog <> nil) then begin
1530 if (SearchDialog.Visible) then begin
1533 SearchDialog.Release;
1536 SearchDialog := nil;
1540 //
\83X
\83N
\83\8a\81[
\83\93\8fã
\82Ì
\91S
\82Ä
\82Ì
\83t
\83H
\81[
\83\80\82©
\82ç
\81AEditorForm
\82ð
\95Â
\82¶
\82é
1541 GikoDM.CloseAllEditorAction.Execute;
1543 Application.UnhookMainWindow(Hook);
1544 Application.Terminate;
1547 procedure TGikoForm.FormDestroy(Sender: TObject);
1550 // CoolSet: TCoolSet;
1551 wp : TWindowPlacement;
1554 //
\83}
\83E
\83X
\83W
\83F
\83X
\83`
\83\83\81[
\8aJ
\95ú
1556 MouseGesture.UnHook;
1560 ActiveListColumnSave;
1564 //
\8dÅ
\91å
\89»
\81E
\83E
\83B
\83\93\83h
\83E
\88Ê
\92u
\95Û
\91¶
1565 wp.length := sizeof(wp);
1566 GetWindowPlacement(Handle, @wp);
1567 GikoSys.Setting.WindowTop := wp.rcNormalPosition.Top;
1568 GikoSys.Setting.WindowLeft := wp.rcNormalPosition.Left;
1569 GikoSys.Setting.WindowHeight := wp.rcNormalPosition.Bottom - wp.rcNormalPosition.Top;
1570 GikoSys.Setting.WindowWidth := wp.rcNormalPosition.Right - wp.rcNormalPosition.Left;
1571 GikoSys.Setting.WindowMax := WindowState = wsMaximized;
1573 GikoSys.Setting.ListStyle := ListView.ViewStyle;
1574 GikoSys.Setting.CabinetVisible := GikoDM.CabinetVisibleAction.Checked;
1575 GikoSys.Setting.CabinetWidth := CabinetPanel.Width;
1576 GikoSys.Setting.ListHeight := FBrowserSizeHeight;
1577 GikoSys.Setting.ListWidth := FBrowserSizeWidth;
1578 if GikoDM.ArrangeAction.Checked then
1579 GikoSys.Setting.ListOrientation := gloVertical
1581 GikoSys.Setting.ListOrientation := gloHorizontal;
1582 GikoSys.Setting.MessegeBarHeight := MessagePanel.Height;
1587 //
\83\8c\83X
\95\
\8e¦
\94Í
\88Í
1588 if not GikoSys.Setting.ResRangeHold then
1589 GikoSys.Setting.ResRange := FResRangeMenuSelect;
1592 if WindowState <> wsNormal then
1593 WindowState := wsNormal;
1594 SaveCoolBarSettings;
1596 GikoSys.Setting.WriteWindowSettingFile;
1597 GikoSys.Setting.WriteNameMailSettingFile;
1600 //
\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è
1601 //
\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¢
1603 //
\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
1605 //if (GikoForm.WindowState <> wsMinimized) and (GikoForm.WindowState <> wsMaximized) then
1607 //
\93ü
\97Í
\83A
\83V
\83X
\83g
\8b@
\8d\
\82Ì
\90Ý
\92è
\82Ì
\95Û
\91¶
1608 InputAssistDM.SaveToFile(GikoSys.GetInputAssistFileName);
1610 //
\82¨
\8bC
\82É
\93ü
\82è
\95Û
\91¶
1612 //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é
1613 FavoriteDM.WriteFavorite;
1617 LockWindowUpdate(Self.Handle);
1619 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1620 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1621 GikoSys.Setting.ShowDialogForAllTabClose := false;
1622 GikoDM.AllTabCloseAction.Execute;
1623 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1627 for i := FBrowsers.Count - 1 downto 0 do begin
1628 TWebBrowser(FBrowsers[i]).Free;
1631 FBrowsers.Capacity := 0;
1636 if BrowserNullTab <> nil then begin
1637 BrowserNullTab.Browser := nil; {*BrowserNullTab
\82ÌBrowser
\82Í
\90Ý
\8cv
\8e\9e\82É
\93\
\82è
\95t
\82¯
\82Ä
\82é
\93z
1638 *
\82È
\82Ì
\82Å
\82±
\82±
\82ÅFree
\82³
\82ê
\82é
\82Æ
\8d¢
\82é
\82Ì
\82Å
\82Í
\82¸
\82µ
\82Ä
\82µ
\82Ü
\82¤
\81B
1640 BrowserNullTab.Free;
1646 TreeView.Items.BeginUpdate;
1647 TreeView.Items.GetFirstNode.Free;
1648 TreeView.Items.Clear;
1649 TreeView.Items.EndUpdate;
1653 //
\83A
\83h
\83\8c\83X
\97\9a\97ð
\95Û
\91¶
1655 //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
1656 AddressHistoryDM.WriteHistory(AddressComboBox.Items, GikoSys.Setting.MaxRecordCount);
1660 //
\83q
\83X
\83g
\83\8a\83\8a\83X
\83g
\95Û
\91¶
1662 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1674 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶&
\94j
\8aü
1676 RoundList.SaveRoundFile;
1690 FControlThread.Terminate;
1691 FControlThread.WaitFor;
1695 FControlThread.Free;
1697 //
\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é
1698 for i := GikoForm.PlugInMenu.Count - 1 downto 0 do begin
1699 GikoForm.PlugInMenu.items[i].Free;
1701 GikoForm.PlugInMenu.Clear;
1704 // TBBS
\82Í
\95Û
\8e\9d\82µ
\82Ä
\82¢
\82é TCategory, TBoard, TThreadItem
\82·
\82×
\82Ä
\82ð
\8aJ
\95ú
\82·
\82é
1705 // 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Å
1706 // BoardPluteIns
\82Ì
\8aJ
\95ú
\82æ
\82è
\90æ
\82É
\8ds
\82¤
\82±
\82Æ
1707 for i := Length(BoardGroups) - 1 downto 0 do begin
1708 //BoardGroups[i].Clear;
1709 BoardGroups[i].Free;
1713 for i := Length( BBSs ) - 1 downto 0 do begin
1714 if BBSs[ i ] <> nil then
1722 if FEvent <> nil then
1725 // TODO
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\82Ì
\94j
\8aü
1727 if FResPopupBrowser <> nil then begin
1728 TOleControl(FResPopupBrowser).Parent := nil;
1729 FResPopupBrowser.Free;
1735 if FPreviewBrowser <> nil then begin
1736 FPreviewBrowser.Free;
1737 FPreviewBrowser := nil;
1741 LockWindowUpdate(0);
1744 //
\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
1745 procedure TGikoForm.SetBBSMenu;
1748 item : TBBSMenuItem;
1751 //
\83\81\83j
\83\85\81[
\82ð
\8dí
\8f\9c
1752 for i := CabinetSelectPopupMenu.Items.Count - 1 downto 0 do begin
1754 if CabinetSelectPopupMenu.Items[ i ] is TBBSMenuItem then begin
1755 CabinetSelectPopupMenu.Items[ i ].Free;
1756 CabinetMenu.Items[ i ].Free;
1757 BBSSelectPopupMenu.Items[ i ].Free;
1763 //
\83\81\83j
\83\85\81[
\82ð
\90Ý
\92è
1764 for i := Length( BBSs ) - 1 downto 0 do begin
1766 item := TBBSMenuItem.Create( PopupMenu );
1767 item.Caption := BBSs[ i ].Title;
1768 item.Data := BBSs[ i ];
1769 item.OnClick := BBSMenuItemOnClick;
1770 CabinetSelectPopupMenu.Items.Insert( 0, item );
1771 item := TBBSMenuItem.Create( PopupMenu );
1772 item.Caption := BBSs[ i ].Title;
1773 item.Data := BBSs[ i ];
1774 item.OnClick := BBSMenuItemOnClick;
1775 CabinetMenu.Insert( 0, item );
1776 item := TBBSMenuItem.Create( PopupMenu );
1777 item.Caption := BBSs[ i ].Title;
1778 item.Data := BBSs[ i ];
1779 item.OnClick := BBSMenuItemOnClick;
1780 BBSSelectPopupMenu.Items.Insert( 0, Item );
1787 procedure TGikoForm.ReloadBBS;
1792 LockWindowUpdate(Self.Handle);
1794 //
\83^
\83u
\83N
\83\8d\81[
\83Y
1795 tmpBool := GikoSys.Setting.ShowDialogForAllTabClose;
1796 GikoSys.Setting.ShowDialogForAllTabClose := false;
1797 GikoDM.AllTabCloseAction.Execute;
1798 GikoSys.Setting.ShowDialogForAllTabClose := tmpBool;
1799 SetContent(BrowserNullTab);
1800 //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
1801 TreeView.Items.Clear;
1803 //
\8f\84\89ñ
\83\8a\83X
\83g
\95Û
\91¶
1805 RoundList.SaveRoundFile;
1808 //
\8f\84\89ñ
\83\8a\83X
\83g
\82ð
\94j
\8aü
1814 //
\97\9a\97ð
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1816 FHistoryList.SaveToFile(GikoSys.GetConfigDir + 'History.xml');
1821 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Û
\91¶
\82Æ
\94j
\8aü
1823 FavoriteDM.WriteFavorite;
1828 //
\94Â
\81E
\83X
\83\8c\81EPLUGIN
\82Ì
\94j
\8aü
1829 for i := Length(BoardGroups) - 1 downto 0 do begin
1831 BoardGroups[i].Free;
1837 for i := Length( BBSs ) - 1 downto 0 do begin
1838 if BBSs[ i ] <> nil then
1847 FTreeType := gttNone;
1849 //============
\82±
\82±
\82©
\82ç
\89º
\82Å
\81A
\8dÄ
\90¶================================//
1851 //
\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Æ)
1852 InitializeBoardPlugIns;
1854 GikoSys.ListBoardFile; //
\83{
\81[
\83h
\83t
\83@
\83C
\83\8b\93Ç
\8d\9e
1856 //
\82·
\82×
\82Ä
\82ÌBBS
\82ð
\93Ç
\82Ý
\8d\9e\82ñ
\82Å
\82¨
\82
1857 for i := Length(BBSs) - 1 downto 0 do begin
1858 if not BBSs[i].IsBoardFileRead then
1859 GikoSys.ReadBoardFile(BBSs[i]);
1862 // BBS
\83\81\83j
\83\85\81[
\82Ì
\8dX
\90V
1865 ShowBBSTree( BBSs[ 0 ] );
1867 //
\97\9a\97ð
\93Ç
\82Ý
\8d\9e\82Ý
1868 FHistoryList.LoadFromFile(GikoSys.GetConfigDir + 'History.xml',
1869 TreeView, FTreeType);
1871 //
\82¨
\8bC
\82É
\93ü
\82è
\93Ç
\82Ý
\8d\9e\82Ý
1872 FavoriteDM.ReadFavorite;
1876 //
\8f\84\89ñ
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
1877 RoundList.LoadRoundBoardFile;
1878 RoundList.LoadRoundThreadFile;
1880 LockWindowUpdate(0);
1884 \todo
\89½
\8cÌ IE 7
\82Å
\82Í about:..
\82É
\82È
\82é
\82Ì
\82©
1885 (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©)
1886 \92²
\8d¸
\82·
\82é
\82±
\82Æ
1888 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
1896 threadItem : TThreadItem;
1898 Protocol, Host, Path, Document, Port, Bookmark: string;
1903 ActiveFileName: string;
1908 cResPopup: TResPopupBrowser;
1910 //
\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ª
1911 // 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è)
1912 if Pos('about:..', Text) = 1 then
1913 Text2 := 'about:blank..' + Copy( Text, Length('about:..')+1, Length(Text) )
1916 if not( TObject(Sender) is TWebBrowser )then
1920 if (TWebBrowser(Sender) <> nil) and (not TWebBrowser(Sender).Busy) and (Assigned(TWebBrowser(Sender).Document)) then begin
1921 if LowerCase(OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset) <> 'shift_jis' then begin
1922 OleVariant(IHTMLDocument2(TWebBrowser(Sender).Document)).charset := 'shift_jis';
1929 if PreviewTimer.Enabled then
1930 PreviewTimer.Enabled := False;
1931 Application.CancelHint;
1933 if GetActiveContent <> nil then
1934 ActiveFileName := ChangeFileExt(ExtractFileName(GetActiveContent.FileName), '')
1936 ActiveFileName := '';
1938 FActiveContent := nil;
1941 //
\91O
\89ñ
\82Æ
\93¯
\82¶
\8fê
\8d\87\8fI
\97¹
1942 if (StatusBar.Panels[1].Text = Text2) then begin
1943 if Text2 = '' then begin
1944 if FResPopupBrowser <> nil then begin
1945 if not(Sender is TResPopupBrowser) then
1946 FResPopupBrowser.Clear
1948 TResPopupBrowser(Sender).ChildClear;
1954 StatusBar.Panels[1].Text := Text2;
1957 if FPreviewBrowser <> nil then
1958 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1960 if FResPopupBrowser <> nil then begin
1961 if not(Sender is TResPopupBrowser) then begin
1962 if (FResPopupBrowser.Visible) then begin
1963 if ResPopupClearTimer.Interval > 0 then begin
1964 ResPopupClearTimer.Enabled := True;
1965 ResPopupClearTimer.Tag := 0;
1967 FResPopupBrowser.Clear;
1971 if ResPopupClearTimer.Interval > 0 then begin
1972 ResPopupClearTimer.Enabled := True;
1973 ResPopupClearTimer.Tag := 1;
1975 TResPopupBrowser(Sender).ChildClear;
1981 if not(Sender is TResPopupBrowser) then
1982 if not GikoSys.Setting.UnActivePopup then
1983 if not GikoForm.Active then
1988 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10
1989 //file:///C:/Borland/Projects/gikoNavi/test/read.cgi/qa/990576336/10-15
1992 Ext := AnsiLowerCase(ExtractFileExt(Text2));
1993 if (Pos('http://', Text2) = 1) and (GikoSys.Setting.PreviewVisible) and
1994 ((Ext = '.jpg') or (Ext = '.jpeg') or (Ext = '.gif') or (Ext = '.png')) then begin
1995 if FPreviewBrowser = nil then begin
1996 FPreviewBrowser := TPreviewBrowser.Create(Self);
1997 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
1998 TOleControl(FPreviewBrowser).Parent := nil;
2000 FPreviewBrowser.Navigate(BLANK_HTML);//
\91O
\89ñ
\82Ì
\83v
\83\8c\83r
\83\85\81[
\89æ
\91\9c\8fÁ
\8b\8e\97p
2001 FPreviewURL := Text2;
2002 PreviewTimer.Interval := GikoSys.Setting.PreviewWait;
2003 PreviewTimer.Enabled := True;
2004 end else if (Pos('about:blank', Text2) = 1) or (Pos('http://', Text2) = 1) or (Pos('mailto:', Text2) = 1) then begin
2005 if Pos('mailto:', Text2) = 1 then begin
2006 s := StringReplace(Text2, 'mailto:', '', [rfIgnoreCase]);
2007 //
\83M
\83R
\83i
\83r
\83X
\83\8c \83p
\81[
\83g3
\82Ì466
\8e\81\82É
\8a´
\8eÓ
2009 p.x := p.x - TWebBrowser(Sender).ClientOrigin.x;
2010 p.y := p.y - TWebBrowser(Sender).ClientOrigin.y;
2011 e := IHTMLDocument2(TWebBrowser(Sender).Document).elementFromPoint(p.x, p.y);
2012 if (Assigned(e)) then begin
2013 CreateResPopupBrowser;
2015 if not(Sender is TResPopupBrowser) then begin
2016 if (FResPopupBrowser.Visible) then begin
2017 FResPopupBrowser.Clear;
2020 TResPopupBrowser(Sender).ChildClear;
2023 cResPopup := FResPopupBrowser.CreateNewBrowser;
2024 tmp2 := ZenToHan(e.Get_outerText);
2025 if (GikoSys.IsNumeric(tmp2)) then begin
2026 //
\82\93\82Í
\83\8c\83X
\94Ô
\8d\86\82Á
\82Û
\82¢
\82Á
\82·
\81B
2027 wkIntSt := StrToInt64(tmp2);
2028 wkIntTo := StrToInt64(tmp2);
2029 cResPopup.PopupType := gptThread;
2030 HTMLCreater.SetResPopupText(cResPopup, GetActiveContent(true), wkIntSt, wkIntTo, False, False);
2032 cResPopup.PopupType := gptRaw;
2033 cResPopup.Title := s;
2037 CreateResPopupBrowser;
2039 if not(Sender is TResPopupBrowser) then begin
2040 if (FResPopupBrowser.Visible) then begin
2041 FResPopupBrowser.Clear;
2044 TResPopupBrowser(Sender).ChildClear;
2047 threadItem := GetActiveContent(true);
2048 URL := THTMLCreate.GetRespopupURL(Text2, threadItem.URL);
2049 PathRec := Gikosys.Parse2chURL2(URL);
2050 if (PathRec.FNoParam) then begin
2054 Gikosys.GetPopupResNumber(URL,PathRec.FSt,PathRec.FTo);
2056 GikoSys.ParseURI( URL, Protocol, Host, Path, Document, Port, Bookmark );
2058 if PathRec.FDone or (not GikoSys.Is2chHost( Host )) then begin
2060 URL := GikoSys.GetBrowsableThreadURL( URL );
2061 wkIntSt := PathRec.FSt;
2062 wkIntTo := PathRec.FTo;
2064 if (wkIntSt = 0) and (wkIntTo = 0) then begin
2067 end else if (wkIntSt = 0) and (wkIntTo > 0) then begin
2069 end else if (wkIntSt > 0) and (wkIntTo = 0) then begin
2071 end else if wkIntSt > wkIntTo then begin
2076 if (FActiveContent <> nil) and (FActiveContent.Thread.URL = URL) then
2081 threadItem := BBSsFindThreadFromURL( URL );
2083 if (threadItem = nil) and GikoSys.Is2chHost( Host ) then begin
2084 board := BBSs[ 0 ].FindBBSID( PathRec.FBBS );
2085 if board <> nil then begin
2086 if not board.IsThreadDatRead then
2087 GikoSys.ReadSubjectFile( board );
2088 threadItem := board.FindThreadFromFileName( PathRec.FKey + '.dat' );
2092 if threadItem <> nil then begin
2093 //HintData := GetThreadText(PathRec.FBBS, PathRec.FKey, wkIntSt, wkIntTo, ATitle, PathRec.FFirst);
2094 //URL
\82Ì
\8dÅ
\8cã
\82É/
\82ª
\95t
\82¢
\82Ä
\82¢
\82È
\82¢
\82Æ
\82«
\97p
2095 if ( IntToStr(wkIntSt) = ChangeFileExt(threadItem.FileName, '') ) then begin
2099 cResPopup := FResPopupBrowser.CreateNewBrowser;
2100 cResPopup.PopupType := gptThread;
2101 HTMLCreater.SetResPopupText(cResPopup, threadItem, wkIntSt, wkIntTo, ATitle, PathRec.FFirst );
2105 if (cResPopup <> nil) then begin
2106 ResPopupClearTimer.Enabled := False;
2108 if cResPopup.PopupType = gptRaw then begin
2109 if cResPopup.Title <> '' then begin
2110 cResPopup.TitlePopup;
2113 if cResPopup.RawDocument <> '' then begin
2115 end else if cResPopup.Title <> '' then begin
2116 cResPopup.TitlePopup;
2123 procedure TGikoForm.SetEnabledCloseButton(Enabled: Boolean);
2127 FEnabledCloseButton := Enabled;
2128 SysMenu := GetSystemMenu(Handle, False);
2130 if Enabled then begin
2131 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_ENABLED);
2133 EnableMenuItem(SysMenu, SC_CLOSE, MF_BYCOMMAND or MF_GRAYED);
2136 DrawMenuBar(Handle);
2139 procedure TGikoForm.TreeViewChanging(Sender: TObject; Node: TTreeNode;
2140 var AllowChange: Boolean);
2142 //
\83\
\81[
\83g
\8f\87\82ð
\95Û
\91¶
\82·
\82é
\82æ
\82¤
\82É
\82µ
\82½
\82Ì
\82Å
\8dí
\8f\9c
2143 // if FTreeType = gtt2ch then
2144 // FSortIndex := -1;
2147 procedure TGikoForm.ListViewKeyDown(Sender: TObject; var Key: Word;
2148 Shift: TShiftState);
2152 if GetActiveList is TBoard then begin
2154 VK_BACK:; // UpFolderButtonClick(Sender);
2155 VK_SPACE: ListDoubleClick(Shift);
2156 VK_RETURN: ListClick;
2159 if ListView.Selected <> nil then begin
2160 pos.X := ListView.Column[ 0 ].Width;
2161 pos.Y := ListView.Selected.Top;
2163 pos.X := ListView.Left;
2164 pos.Y := ListView.Top;
2166 Windows.ClientToScreen( ListView.Handle, pos );
2167 ListPopupMenu.Popup( pos.X, pos.Y );
2170 end else begin // TBBS, TCategory
2172 VK_BACK:; // UpFolderButtonClick(Sender);
2173 VK_SPACE: ListClick;
2174 VK_RETURN: ListDoubleClick(Shift);
2177 if ListView.Selected <> nil then begin
2178 pos.X := ListView.Column[ 0 ].Width;
2179 pos.Y := ListView.Selected.Top;
2181 pos.X := ListView.Left;
2182 pos.Y := ListView.Top;
2184 Windows.ClientToScreen( ListView.Handle, pos );
2185 ListPopupMenu.Popup( pos.X, pos.Y );
2191 function TGikoForm.GetHttpState: Boolean;
2193 Result := FHttpState;
2196 procedure TGikoForm.ListViewColumnClick(Sender: TObject;
2197 Column: TListColumn);
2201 vSortIndex : Integer;
2202 vSortOrder : Boolean;
2204 idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
2205 if TObject( FActiveList ) is TBBS then begin
2206 orderList := GikoSys.Setting.BBSColumnOrder;
2207 vSortIndex := GikoSys.Setting.BBSSortIndex;
2208 vSortOrder := GikoSys.Setting.BBSSortOrder;
2209 end else if TObject( FActiveList ) is TCategory then begin
2210 orderList := GikoSys.Setting.CategoryColumnOrder;
2211 vSortIndex := GikoSys.Setting.CategorySortIndex;
2212 vSortOrder := GikoSys.Setting.CategorySortOrder;
2213 end else if TObject( FActiveList ) is TBoard then begin
2214 orderList := GikoSys.Setting.BoardColumnOrder;
2215 vSortIndex := GikoSys.Setting.BoardSortIndex;
2216 vSortOrder := GikoSys.Setting.BoardSortOrder;
2220 id := Integer( orderList[ idx ] );
2223 if vSortIndex = id then
2224 vSortOrder := not vSortOrder
2226 vSortOrder := id = 0;
2229 TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
2232 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
2233 Button: TToolButton; State: TCustomDrawState; var DefaultDraw: Boolean);
2237 DefaultDraw := True;
2239 DefaultDraw := False;
2240 if (cdsSelected in State) or (cdsHot in State) then begin
2241 Sender.Canvas.Brush.Color := clHighlight;
2242 Sender.Canvas.Font.Color := clHighlightText;
2244 Sender.Canvas.Brush.Color := clBtnFace;
2245 Sender.Canvas.Font.Color := clBtnText;
2247 ARect := Rect(Button.Left, Button.Top, Button.Left + Button.Width, Button.Top + Button.Height);
2248 Sender.Canvas.FillRect(ARect);
2249 DrawText(Sender.Canvas.Handle, PChar(Button.Caption), -1, ARect, DT_SINGLELINE or DT_VCENTER or DT_CENTER);
2252 function TGikoForm.GetTreeNode(Data: TObject): TTreeNode;
2257 Nodes := TreeView.Items;
2259 for i := 0 to Nodes.Count - 1 do begin
2260 if Nodes.Item[i].Data = Data then begin
2261 Result := Nodes.Item[i];
2268 procedure TGikoForm.BrowserBeforeNavigate2(Sender: TObject;
2269 const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
2270 Headers: OleVariant; var Cancel: WordBool);
2275 kMenuName: string = 'menu:';
2280 if Pos(kMenuName, URL) <> 0 then begin
2281 sNo := Copy( URL, Pos( kMenuName, URL ) + Length( kMenuName ), Length( URL ) );
2283 if not GikoSys.IsNumeric(sNo) then Exit;
2287 KokoPopupMenu.PopupComponent := nil;
2288 if (Sender is TComponent) then
2289 KokoPopupMenu.PopupComponent := TComponent(Sender);
2290 KokoPopupMenu.Tag := StrToInt(sNo);
2291 KokoPopupMenu.Popup(p.x, p.y);
2292 end else if Pos('mailto', LowerCase(URL)) <> 0 then begin
2293 Cancel := not GikoSys.Setting.OpenMailer;
2298 procedure TGikoForm.TreeViewCustomDraw(Sender: TCustomTreeView;
2299 const ARect: TRect; var DefaultDraw: Boolean);
2303 IsBoardNode: Boolean;
2309 Category: TCategory;
2313 DefaultDraw := True;
2315 if FTreeType = gttHistory then Exit;
2317 TreeView.Canvas.Font.Color := clBlue;
2318 IsBoardNode := False;
2319 for i := 0 to TreeView.Items.Count - 1 do begin
2321 if not TreeView.Items[i].IsVisible then
2324 if TObject(TreeView.Items[i].Data) is TCategory then begin
2325 if TreeView.Items[i].Expanded then
2328 IsBoardNode := False;
2329 Category := TCategory(TreeView.Items[i].Data);
2330 for j := 0 to Category.Count - 1 do begin
2331 Board := Category.Items[j];
2332 if Board <> nil then begin
2333 if Board.UnRead > 0 then begin
2341 end else if TObject(TreeView.Items[i].Data) is TBoard then begin
2342 IsBoardNode := True;
2343 Board := TBoard(TreeView.Items[i].Data);
2345 Cnt := Board.UnRead;
2351 Bitmap := TBitmap.Create;
2353 Bitmap.Canvas.Font.Assign(TreeView.Canvas.Font);
2354 Bitmap.Canvas.Font.Style := [fsBold];
2355 NodeWidth := Bitmap.Canvas.TextWidth(TreeView.Items[i].Text);
2360 NodeRect := TreeView.Items[i].DisplayRect(True);
2363 CntText := '(' + IntToStr(Cnt) + ')'
2364 else if Cnt = 1 then
2368 TextWidth := TreeView.Canvas.TextWidth(CntText);
2370 TextRect := Rect(NodeRect.Left + NodeWidth + 8,
2372 NodeRect.Left + NodeWidth + TextWidth + 8,
2374 DrawText(TreeView.Canvas.Handle,
2378 DT_SINGLELINE or DT_VCENTER);
2380 TreeViewCustomDrawItem(nil, nil, [], DefaultDraw);
2383 procedure TGikoForm.TreeViewCustomDrawItem(Sender: TCustomTreeView;
2384 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
2387 Category: TCategory;
2390 DefaultDraw := True;
2392 if FTreeType = gttHistory then Exit;
2394 TreeView.Canvas.Font.Style := [];
2395 if Node <> nil then begin
2396 if TObject(Node.Data) is TCategory then begin
2397 Category := TCategory(Node.Data);
2398 for i := 0 to Category.Count - 1 do begin
2399 Board := Category.Items[i];
2400 if Board <> nil then begin
2401 if Board.UnRead > 0 then begin
2402 TreeView.Canvas.Font.Style := [fsBold];
2407 end else if TObject(Node.Data) is TBoard then begin
2408 Board := TBoard(Node.Data);
2409 if Board.UnRead > 0 then
2410 TreeView.Canvas.Font.Style := [fsBold];
2415 procedure TGikoForm.TreeViewExpanded(Sender: TObject; Node: TTreeNode);
2417 TreeView.Invalidate;
2419 if TObject(Node.Data) is TBBS then begin
2420 TBBS(Node.Data).NodeExpand := True;
2421 end else if TObject(Node.Data) is TCategory then begin
2422 TCategory(Node.Data).NodeExpand := True;
2423 end else if TObject(Node.Data) is TBoard then begin
2424 TBoard(Node.Data).NodeExpand := True;
2428 procedure TGikoForm.ListViewAllSelect;
2433 procedure TGikoForm.DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
2435 AddMessageList(Msg, nil, Icon);
2437 // *************************************************************************
2438 //!
\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
2439 // *************************************************************************
2440 procedure TGikoForm.DownloadEnd(Sender: TObject; Item: TDownloadItem);
2444 boardPlugIn : TBoardPlugIn;
2449 if Item.DownType = gdtBoard then
2450 ATitle := Item.Board.Title
2452 ATitle := Item.ThreadItem.Title;
2454 ATitle := GikoSys.GetGikoMessage(gmUnKnown);
2456 if Item.State in [gdsComplete, gdsDiffComplete] then begin
2458 if Item.DownType = gdtBoard then begin
2461 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureItiran), nil, gmiOK);
2462 if GetActiveList = Item.Board then begin
2464 //
\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é
2465 if (GikoSys.Setting.AutoSortThreadList) then begin
2466 GikoSys.Setting.BoardSortIndex := 0;
2467 GikoSys.Setting.BoardSortOrder := True;
2469 Sort.SetSortDate(Now());
2470 SetActiveList(Item.Board);
2472 Item.Board.Modified := True;
2473 Item.Board.IsThreadDatRead := True;
2476 end else if Item.DownType = gdtThread then begin
2479 Item.ThreadItem.NewArrival := True;
2480 //if (Item.ThreadItem.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2481 if (Item.ThreadItem.ParentBoard.IsBoardPlugInAvailable) and (Item.ThreadItem.Title = '') then begin
2482 //boardPlugIn := Item.ThreadItem.BoardPlugIn;
2483 boardPlugIn := Item.ThreadItem.ParentBoard.BoardPlugIn;
2484 THTMLCreate.DivideStrLine(boardPlugIn.GetDat( DWORD( Item.ThreadItem ), 1 ), @Res);
2485 Item.ThreadItem.Title := Res.FTitle;
2486 ATitle := Item.ThreadItem.Title;
2487 end else if ATitle = '
\81i
\96¼
\8fÌ
\95s
\96¾
\81j' then begin
2488 THTMLCreate.DivideStrLine(GikoSys.ReadThreadFile(Item.ThreadItem.GetThreadFileName, 1), @Res);
2489 ATitle := Res.FTitle;
2491 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2492 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = Item.ThreadItem then begin
2493 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2497 if GikoSys.Setting.BrowserTabVisible then begin
2498 if GetActiveContent = Item.ThreadItem then
2499 InsertBrowserTab(Item.ThreadItem)
2500 else if (ListView.Selected <> nil ) and ( TObject(ListView.Selected.Data) is TThreadItem ) and ( Item.ThreadItem = TThreadItem(ListView.Selected.Data)) then
2501 InsertBrowserTab(Item.ThreadItem, True)
2503 InsertBrowserTab(Item.ThreadItem, False);
2506 if (GetActiveContent = Item.ThreadItem) or (FActiveContent = nil) or(FActiveContent.Browser = BrowserNullTab.Browser) then
2507 InsertBrowserTab(Item.ThreadItem);
2510 Application.ProcessMessages;
2512 if Item.State = gdsComplete then begin
2514 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureSyutoku), nil, gmiOK);
2518 PlaySound('NewDiff');
2519 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmSureDiff), nil, gmiOK);
2524 //
\8f\84\89ñ
\82 \82è
\82Ì
\8fê
\8d\87\81\95\82P
\82O
\82O
\82O
\92´
\82Í
\8f\84\89ñ
\8dí
\8f\9c
2525 if (Item.ThreadItem.Round) and (Item.ThreadItem.Count > 1000) then begin
2526 Item.ThreadItem.Round := False;
2527 //Item.ThreadItem.RoundName := '';
2528 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);
2531 //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
2532 if (ActiveList <> nil) and (ActiveList is TBoard) then begin
2533 TBoard(ActiveList).LogThreadCount := TBoard(ActiveList).GetLogThreadCount;
2534 TBoard(ActiveList).NewThreadCount := TBoard(ActiveList).GetNewThreadCount;
2535 TBoard(ActiveList).UserThreadCount:= TBoard(ActiveList).GetUserThreadCount;
2536 //ListView
\82Ì
\83A
\83C
\83e
\83\80\82Ì
\8cÂ
\90\94\82à
\8dX
\90V
2537 case GikoForm.ViewType of
2538 gvtAll: ListView.Items.Count := TBoard(ActiveList).Count;
2539 gvtLog: ListView.Items.Count := TBoard(ActiveList).LogThreadCount;
2540 gvtNew: ListView.Items.Count := TBoard(ActiveList).NewThreadCount;
2541 gvtArch: ListView.Items.Count := TBoard(ActiveList).ArchiveThreadCount;
2542 gvtLive: ListView.Items.Count := TBoard(ActiveList).LiveThreadCount;
2543 gvtUser: ListView.Items.Count := TBoard(ActiveList).UserThreadCount;
2546 RefreshListView(Item.ThreadItem);
2549 end else if Item.State = gdsNotModify then begin
2551 { if (Item.DownType = gdtThread) and (AddHistory(Item.ThreadItem)) then begin
2552 //SetContent(Item.ThreadItem);
2553 InsertBrowserTab(Item.ThreadItem);
2555 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmNotMod), nil, gmiSAD);
2556 PlaySound('NoChange');
2557 Screen.Cursor := crDefault;
2558 end else if Item.State = gdsAbort then begin
2560 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmAbort), nil, gmiOK);
2561 end else if Item.State = gdsError then begin
2566 AddMessageList(ATitle + ' ' + GikoSys.GetGikoMessage(gmError) + ' (' + IntToStr(Item.ResponseCode) + ')' + s, nil, gmiNG);
2567 // if Item.ResponseCode = 302 then
2568 // 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);
2574 if FWorkCount < 0 then FWorkCount := 0;
2575 if FWorkCount = 0 then begin
2577 Animate.Active := False;
2579 Screen.Cursor := crDefault;
2586 procedure TGikoForm.WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
2588 // SetProgressValue(Number, 0, AWorkCountMax);
2589 // ProgressBar.Visible := True;
2590 ProgressBar.Position := 0;
2591 ProgressBar.Max := AWorkCountMax;
2592 FDownloadTitle := AWorkTitle;
2593 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ð
\8aJ
\8en
\82µ
\82Ü
\82·';
2594 FDownloadMax := AWorkCountMax;
2597 procedure TGikoForm.WorkEnd(Sender: TObject; AWorkMode: TWorkMode; Number: Integer);
2599 ProgressBar.Position := 0;
2600 if FDownloadMax <> 0 then
2601 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\82ª
\8a®
\97¹
\82µ
\82Ü
\82µ
\82½';
2604 procedure TGikoForm.Work(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer; Number: Integer);
2606 ProgressBar.Position := AWorkCount;
2607 // SetProgressValue(Number, AWorkCount);
2608 StatusBar.Panels[1].Text := FDownloadTitle + ' -
\83_
\83E
\83\93\83\8d\81[
\83h
\92\86 (' + IntToStr(AWorkCount) + '/' + IntToStr(FDownloadMax) + ')';
2611 procedure TGikoForm.AddMessageList(ACaption: string; AObject: TObject; Icon: TGikoMessageIcon);
2613 ListItem: TListItem;
2615 MessageListView.Items.BeginUpdate;
2617 ListItem := MessageListView.Items.Add;
2618 ListItem.Caption := ACaption;
2619 ListItem.Data := AObject;
2620 ListItem.MakeVisible(False);
2622 gmiOK: ListItem.ImageIndex := 0;
2623 gmiSAD: ListItem.ImageIndex := 1;
2624 gmiNG: ListItem.ImageIndex := 2;
2625 gmiWhat: ListItem.ImageIndex := 3;
2628 MessageListView.Items.EndUpdate;
2632 //!
\82à
\82Á
\82Æ
\82à
\8cÃ
\82¢Browser
\82Ì
\8aJ
\95ú
2633 procedure TGikoForm.ReleaseOldestBrowser;
2637 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2638 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2639 TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then begin
2640 ReleaseBrowser(TBrowserRecord(BrowserTab.Tabs.Objects[i]));
2646 function TGikoForm.InsertBrowserTab(
2647 ThreadItem : TThreadItem;
2648 ActiveTab : Boolean = True
2651 i, j, idx : Integer;
2652 favItem : TFavoriteThreadItem;
2653 newBrowser : TBrowserRecord;
2658 if Threaditem = nil then Exit;
2660 if ThreadItem.IsLogFile then begin
2661 //
\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é
2662 //
\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é
2663 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) and
2664 (FActiveContent.Browser <> BrowserNullTab.Browser)then begin
2665 j := FBrowsers.IndexOf(FActiveContent.Browser);
2666 if j = BROWSER_COUNT - 1 then
2667 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2669 favItem := TFavoriteThreadItem.Create(ThreadItem.URL, ThreadItem.Title );
2670 if not FHistoryList.AddHistory( favItem, TreeView, FTreeType ) then
2673 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
2674 if TObject(BrowserTab.Tabs.Objects[i]) is TBrowserRecord then begin
2675 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
2676 Result := TBrowserRecord( BrowserTab.Tabs.Objects[i] );
2677 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = nil then begin
2678 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2679 ReleaseOldestBrowser;
2680 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2681 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
2682 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2684 if ActiveTab then begin
2685 BrowserTab.TabIndex := i;
2686 BrowserTab.OnChange(nil);
2693 idx := BrowserTab.TabIndex;
2694 newBrowser := TBrowserRecord.Create;
2695 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2696 ReleaseOldestBrowser;
2697 newBrowser.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2698 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2699 newBrowser.thread := ThreadItem;
2700 newBrowser.Repaint := true;
2702 if GikoSys.Setting.BrowserTabAppend = gtaFirst then begin
2703 BrowserTab.Tabs.InsertObject(0, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2704 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2705 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2709 if ActiveTab then begin
2710 BrowserTab.TabIndex := 0;
2712 end else if GikoSys.Setting.BrowserTabAppend = gtaLast then begin
2713 i := BrowserTab.Tabs.AddObject(GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2714 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2715 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2719 if ActiveTab then begin
2720 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2721 BrowserTab.TabIndex := 0
2723 BrowserTab.TabIndex := i;
2726 //
\83^
\83u
\88Ê
\92u
\82ð
\8eæ
\93¾
2728 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
2729 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser =
2730 TWebBrowser(FBrowsers[1]) then begin
2735 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2738 //
\83^
\83u
\82ª
\96³
\82¢
\82Æ
\82«
\82È
\82Ç
\91Î
\8dô
2739 if (ins < 0) then begin
2742 BrowserTab.Tabs.InsertObject(ins, GikoSys.GetShortName(ThreadItem.Title, 20), newBrowser);
2743 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 1) then begin
2744 if GikoSys.Setting.BrowserTabAppend = gtaRight then begin
2745 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 0 ] ) );
2747 DeleteTab( TBrowserRecord( BrowserTab.Tabs.Objects[ 1 ] ) );
2752 if ActiveTab then begin
2753 if (not GikoSys.Setting.BrowserTabVisible) and (BrowserTab.Tabs.Count > 0) then
2754 BrowserTab.TabIndex := 0
2756 BrowserTab.TabIndex := ins;
2759 Result := newBrowser;
2760 if(ActiveTab) or (idx = -1) then begin
2761 BrowserTab.OnChange(nil);
2764 if BrowserNullTab = nil then begin
2765 BrowserNullTab := TBrowserRecord.Create;
2766 BrowserNullTab.Browser := Browser;
2768 // if BrowserNullTab.thread <> ThreadItem then begin
2769 // BrowserNullTab.Movement := '';
2771 BrowserNullTab.thread := ThreadItem;
2772 Result := BrowserNullTab;
2773 BrowserTab.TabIndex := -1;
2774 SetContent(BrowserNullTab);
2777 if GikoSys.Setting.URLDisplay then
2778 AddressComboBox.Text := ThreadItem.URL;
2782 procedure TGikoForm.SetContent(inThread : TBrowserRecord);
2790 ThreadItem: TThreadItem;
2791 Thread: TBrowserRecord;
2792 ThreadTitle, ThreadPTitle: string;
2793 ThreadIsLog, {ThreadUnRead,} ThreadNewArraical: boolean;
2796 idx := BrowserTab.TabIndex;
2797 if (not FStartUp) and
2798 (FActiveContent <> nil) and
2799 (FActiveContent.Thread <> Thread.Thread) and
2800 (FActiveContent.Browser <> nil) and
2801 (Assigned(FActiveContent.Browser.Document)) then begin
2804 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document).Body).ScrollTop;
2807 MsgBox(Handle, E.Message, 'SetContent[<-ScrollTop]', 0);
2812 if not (Assigned(Thread)) or (Thread.Thread = nil) then begin
2813 Thread.Browser.Navigate(BLANK_HTML);
2814 BrowserBoardNameLabel.Caption := '';
2815 ItemBoardImage.Picture := nil;
2816 BrowserNameLabel.Caption := '';
2817 ItemImage.Picture := nil;
2818 BrowserNullTab.Thread := nil;
2819 //TOleControl(BrowserNullTab.Browser).Visible := true;
2820 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
2821 FActiveContent := nil;
2823 end else if Thread.Browser = nil then begin
2824 if FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1]) then
2825 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2826 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
2827 ReleaseOldestBrowser;
2828 Thread.Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
2829 FBrowsers.Move(BROWSER_COUNT - 1, 0);
2832 ThreadTitle := Thread.Thread.Title;
2833 ThreadPTitle := Thread.Thread.ParentBoard.Title;
2834 //ThreadScrollTop := Thread.Thread.ScrollTop;
2835 if Thread.Thread.IsLogFile then begin
2836 if not FileExists(Thread.Thread.GetThreadFileName) then begin
2837 Thread.Thread.DeleteLogFile;
2841 ThreadIsLog := Thread.Thread.IsLogFile;
2842 ThreadItem := Thread.Thread;
2843 ThreadNewArraical := Thread.Thread.NewArrival;
2844 //ThreadUnRead := Thread.Thread.UnRead;
2845 BBSID := ThreadItem.ParentBoard.BBSID;
2846 FileName := ThreadItem.FileName;
2848 if GetCapture = ListView.Handle then
2851 Screen.Cursor := crHourGlass;
2855 if(FActiveContent <> nil) and (FActiveContent <> Thread) then begin
2856 if (FActiveContent.Browser <> BrowserNullTab.Browser) then
2857 ShowWindow(FActiveContent.Browser.Handle, SW_HIDE);
2859 ShowWindow(Thread.Browser.Handle, SW_SHOW);
2860 if (not Assigned(Thread.Browser.Document)) then begin
2861 Thread.Browser.Navigate('about:blank');
2863 while (Thread.Browser.ReadyState <> READYSTATE_COMPLETE) and
2864 (Thread.Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
2865 Application.ProcessMessages;
2866 if idx <> BrowserTab.TabIndex then begin
2871 if (Thread <> nil) and (ThreadItem <>nil) then begin
2872 BrowserBoardNameLabel.Caption := ThreadPTitle;
2873 ItemIcon16.GetBitmap(4, ItemBoardImage.Picture.Bitmap);
2874 BrowserNameLabel.Caption := ThreadTitle;
2875 ItemImage.Picture := nil;
2877 if ThreadNewArraical then
2878 ItemImageList.GetBitmap(2, ItemImage.Picture.Bitmap)
2880 ItemImageList.GetBitmap(0, ItemImage.Picture.Bitmap)
2882 ItemImageList.GetBitmap(1, ItemImage.Picture.Bitmap);
2884 ItemImage.Left := BrowserBoardNameLabel.Left + BrowserBoardNameLabel.Width + 8;
2885 BrowserNameLabel.Left := ItemImage.Left + 20;
2888 //ActiveContent
\81@
\82Ì
\8dX
\90V
2889 FActiveContent := Thread;
2891 if not ThreadIsLog then begin
2892 Self.Caption := GikoDataModule.CAPTION_NAME ;
2893 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\8fÁ
\8b\8e
2894 StatusBar.Panels[THREADSIZE_PANEL].Text := '';
2896 Thread.Browser.BringToFront;
2897 s := '<HTML><BODY><CENTER>
\82±
\82Ì
\83X
\83\8c\83b
\83h
\82Í
\8eæ
\93¾
\82µ
\82Ä
\82¢
\82Ü
\82¹
\82ñ</CENTER></BODY></HTML>';
2898 doc := Idispatch( olevariant(Thread.Browser.ControlInterface).Document) as IHTMLDocument2;
2900 doc.charset := 'Shift_JIS';
2907 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + ThreadTitle + ']';
2908 //
\83X
\83e
\81[
\83^
\83X
\83o
\81[
\82É
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\82Ì
\97e
\97Ê
\82ð
\95\
\8e¦
2909 StatusBar.Panels[THREADSIZE_PANEL].Text := Format('%6.2f kB', [ThreadItem.Size / 1024]);
2910 StatusBar.Panels[THREADSIZE_PANEL].Width :=
2911 Max(StatusBar.Canvas.TextWidth(StatusBar.Panels[THREADSIZE_PANEL].Text), 70);
2912 //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«
2913 //
\90V
\8bK
\82ÉThread
\82ð
\8aJ
\82¢
\82½
\82Æ
\82«
\82É
\90^
\82É
\82È
\82Á
\82Ä
\82¢
\82é
\81B
2914 if Thread.Repaint then begin
2915 Thread.Repaint := false;
2917 Thread.Browser.OnStatusTextChange := nil;
2918 LockWindowUpdate(Thread.Browser.ParentWindow);
2919 HTMLCreater.CreateHTML2(Thread.Browser, ThreadItem, sTitle);
2920 Thread.Browser.OnStatusTextChange := BrowserStatusTextChange;
2921 PostMessage( Handle, USER_DOCUMENTCOMPLETE, Integer( Thread.Browser ), 0 );
2925 RefreshListView(ThreadItem);
2927 Screen.Cursor := crDefault;
2931 function TGikoForm.GetActiveContent(popup :Boolean = false): TThreadItem;
2934 if FActiveContent <> nil then begin
2935 Result := FActiveContent.Thread;
2937 (FResPopupBrowser <> nil) and (FResPopupBrowser.CurrentBrowser.Visible = True) then
2938 if (FResPopupBrowser.CurrentBrowser.Thread <> nil) then begin
2939 Result := FResPopupBrowser.CurrentBrowser.Thread;
2949 procedure TGikoForm.SetActiveList(Obj: TObject);
2953 // if FActiveList <> Obj then begin
2956 if ListView.Selected <> nil then
2957 idx := ListView.Selected.Index
2963 ListView.Items.Count := 0;
2964 ListView.Items.Clear;
2965 ListView.Selected := nil;
2966 // ListView.Columns.Clear;
2967 if (FActiveContent <> nil) and (FActiveContent.Thread <> nil)
2968 and (FActiveContent.Thread.IsLogFile) then begin
2970 Self.Caption := GikoDataModule.CAPTION_NAME + ' - [' + FActiveContent.Thread.Title + ']'
2972 on E: Exception do begin
2973 //
\83X
\83\8c\88ê
\97\97DL
\8cã
\82È
\82Ç
\82ÉFActiveContent
\82Ì
\8e\9d\82ÂThread
\82ª
2974 //
\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é
2975 ReleaseBrowser(FActiveContent);
2976 FActiveContent.Thread := nil;
2977 Self.Caption := GikoDataModule.CAPTION_NAME;
2981 Self.Caption := GikoDataModule.CAPTION_NAME;
2982 //Application.Title := CAPTION_NAME;
2984 // ActiveListColumnSave;
2986 Screen.Cursor := crHourGlass;
2988 if Obj is TBBS then begin
2989 TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2990 end else if Obj is TCategory then begin
2991 TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2992 end else if Obj is TBoard then begin
2993 TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
2996 Screen.Cursor := crDefault;
2999 if idx >= 0 then begin
3000 if idx >= ListView.Items.Count then
3001 idx := ListView.Items.Count - 1;
3002 ListView.ItemIndex := idx;
3003 ListView.ItemFocused := ListView.Items.Item[ idx ];
3009 //
\81\9a\81\9a\83q
\83\8d\83\86\83L
\83\81\83\82
3010 //
\82»
\82Ì
\82¤
\82¿interface
\82ð
\8eg
\82¤
3011 function TGikoForm.GetActiveList: TObject;
3013 Result := FActiveList;
3016 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType);
3018 SetListViewType(AViewType, '', False);
3021 procedure TGikoForm.SetListViewType(AViewType: TGikoViewType; SelectText: string; KubetsuChk: Boolean);
3026 for i := Length( BBSs ) - 1 downto 0 do begin
3027 BBSs[i].SelectText := SelectText;
3028 BBSs[i].KubetsuChk := KubetsuChk;
3030 ViewType := AViewType;
3031 if ActiveList is TBoard then begin
3032 Board := TBoard(ActiveList);
3034 //gvtAll: ListView.Items.Count := Board.Count;
3035 gvtLog: Board.LogThreadCount := Board.GetLogThreadCount;
3036 gvtNew: Board.NewThreadCount := Board.GetNewThreadCount;
3037 gvtArch: Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
3038 gvtLive: Board.LiveThreadCount := Board.GetLiveThreadCount;
3039 gvtUser: Board.UserThreadCount:= Board.GetUserThreadCount;
3043 SetActiveList(Board);
3047 procedure TGikoForm.ListViewCustomDraw(Sender: TCustomListView;
3048 const ARect: TRect; var DefaultDraw: Boolean);
3054 if ListView.Items.Count = 0 then begin
3055 DefaultDraw := true;
3056 ListView.Canvas.Brush.Color := ListView.Color;
3057 ListView.Canvas.FillRect(ARect);
3061 ListView.Canvas.Font.Color := clWindowText;
3062 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3065 ListView.Canvas.Font.Color := clBlue;
3066 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';
3069 ListView.Canvas.Font.Color := clGreen;
3070 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90V
\92\85\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3073 ListView.Canvas.Font.Color := clFuchsia;
3074 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';
3077 ListView.Canvas.Font.Color := clMaroon;
3078 s := '
\82±
\82Ì
\83r
\83\85\81[
\82É
\82Í
\90¶
\91¶
\83A
\83C
\83e
\83\80\82ª
\82 \82è
\82Ü
\82¹
\82ñ
\81B';
3081 ListView.Canvas.Font.Color := clNavy;
3082 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';
3083 if GetActiveList is TBoard then
3084 s := Format(s, [TBoard(GetActiveList).ParentCategory.ParenTBBS.SelectText]);
3092 p := Point((ListView.ClientWidth div 2) - (ListView.Canvas.TextWidth(s) div 2),
3093 (ListView.ClientHeight div 2) - (ListView.Canvas.TextHeight(s) div 2));
3094 ListView.Canvas.TextOut(p.X, p.Y, s);
3096 DefaultDraw := True;
3100 procedure TGikoForm.DownloadList(Board: TBoard; ForceDownload: Boolean = False);
3102 Item: TDownloadItem;
3104 if not Board.IsThreadDatRead then
3105 GikoSys.ReadSubjectFile(Board);
3106 Item := TDownloadItem.Create;
3108 Item.Board := Board;
3109 Item.DownType := gdtBoard;
3110 Item.ForceDownload := ForceDownload;
3111 FControlThread.AddItem(Item);
3112 if FWorkCount = 0 then begin
3114 Animate.Active := True;
3117 Screen.Cursor := crAppStart;
3125 procedure TGikoForm.DownloadContent(ThreadItem: TThreadItem; ForceDownload: Boolean = False);
3127 Item: TDownloadItem;
3129 Item := TDownloadItem.Create;
3131 Item.ThreadItem := ThreadItem;
3132 Item.DownType := gdtThread;
3133 Item.ForceDownload := ForceDownload;
3134 FControlThread.AddItem(Item);
3135 if FWorkCount = 0 then begin
3137 Animate.Active := True;
3140 Screen.Cursor := crAppStart;
3148 procedure TGikoForm.PlaySound(SoundEventName: string);
3152 if not GikoSys.Setting.Mute then begin
3153 FileName := GikoSys.Setting.FindSoundFileName(SoundEventName);
3154 if FileExists(FileName) then begin
3155 if not sndPlaySound(PChar(FileName), SND_ASYNC or SND_NOSTOP) then begin
3156 sndPlaySound(nil, SND_SYNC);
3157 Application.ProcessMessages;
3159 sndPlaySound(PChar(FileName), SND_ASYNC);
3165 //
\97\9a\97ð
\82©
\82ç
\8dí
\8f\9c
3166 procedure TGikoForm.DeleteHistory( threadItem: TThreadItem );
3168 FHistoryList.DeleteHistory( threadItem, TreeView, TreeType );
3171 procedure TGikoForm.ShowBBSTreeOld(
3179 FavoriteTreeView.Visible := False;
3180 FavoriteToolBar.Hide;
3181 TreeView.Visible := True;
3183 b := CabinetSelectPopupMenu.Items.Count - 1;
3184 for i := 0 to b do begin
3185 item := CabinetSelectPopupMenu.Items[ i ];
3186 if item is TBBSMenuItem then begin
3187 if TBBSMenuItem( item ).Data = inBBS then begin
3188 item.Checked := True;
3189 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3190 CabinetMenu.Items[ i ].Checked := True;
3191 GikoSys.Setting.CabinetIndex := i;
3195 item.Checked := False;
3196 // CabinetMenu ?? CabinetSelectPopupMenu ??????????????
3197 CabinetMenu.Items[ i ].Checked := False;
3199 CabinetSelectToolButton.Caption := inBBS.Title;
3201 GikoDM.CabinetHistoryAction.Checked := False;
3202 GikoDM.CabinetFavoriteAction.Checked := False;
3204 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
3205 FTreeType := gtt2ch;
3206 HistoryToolBar.Hide;
3207 FActiveBBS := inBBS;
3208 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3209 TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
3210 //?c???[??g?b?v?????I????
3211 if GetActiveList = nil then
3212 TreeView.Selected := TreeView.Items[0]
3214 for i := 0 to TreeView.Items.Count - 1 do begin
3215 if TreeView.Items[i].Data = GetActiveList then begin
3216 TreeView.Selected := TreeView.Items[i];
3220 TreeView.Selected := TreeView.Items[0]
3228 procedure TGikoForm.ShowBBSTree(
3237 FavoriteTreeView.Visible := False;
3238 FavoriteToolBar.Hide;
3239 TreeView.Visible := True;
3241 b := CabinetSelectPopupMenu.Items.Count - 1;
3242 for i := 0 to b do begin
3243 item := CabinetSelectPopupMenu.Items[ i ];
3244 if item is TBBSMenuItem then begin
3245 if TBBSMenuItem( item ).Data = inBBS then begin
3246 item.Checked := True;
3247 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3248 CabinetMenu.Items[ i ].Checked := True;
3249 GikoSys.Setting.CabinetIndex := i;
3253 item.Checked := False;
3254 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3255 CabinetMenu.Items[ i ].Checked := False;
3257 CabinetSelectToolButton.Caption := inBBS.Title;
3259 GikoDM.CabinetHistoryAction.Checked := False;
3260 GikoDM.CabinetFavoriteAction.Checked := False;
3262 if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS)
3263 or (not (CabinetPanel.Visible)) then begin
3264 FTreeType := gtt2ch;
3265 HistoryToolBar.Hide;
3266 FActiveBBS := inBBS;
3267 TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
3268 TreeView.Items.GetFirstNode.Expanded := True; //
\83c
\83\8a\81[
\83g
\83b
\83v
\8d\80\96Ú
\82¾
\82¯
\82ð
\8aJ
\82
3269 //
\83c
\83\8a\81[
\82Ì
\83g
\83b
\83v
\8d\80\96Ú
\82ð
\91I
\91ð
\82·
\82é
3270 if GetActiveList = nil then begin
3272 TreeClick( TreeView.Items[0] );
3276 for i := 0 to TreeView.Items.Count - 1 do begin
3277 if TreeView.Items[i].Data = GetActiveList then begin
3278 TreeClick( TreeView.Items[i] );
3282 TreeClick( TreeView.Items[0] );
3290 procedure TGikoForm.ShowHistoryTree;
3295 if CabinetPanel.Visible then begin
3296 if FTreeType = gttHistory then begin
3297 CabinetVisible( False );
3298 GikoDM.CabinetHistoryAction.Checked := False;
3300 GikoDM.CabinetHistoryAction.Checked := True;
3303 CabinetVisible( True );
3304 GikoDM.CabinetHistoryAction.Checked := True;
3307 // BBS...BBS, History, Favorite
3308 GikoSys.Setting.CabinetIndex := CabinetSelectPopupMenu.Items.Count - 2;
3310 FavoriteTreeView.Visible := False;
3311 TreeView.Visible := True;
3313 GikoDM.CabinetBBSAction.Checked := False;
3314 GikoDM.CabinetFavoriteAction.Checked := False;
3316 if FTreeType <> gttHistory then begin
3317 b := CabinetSelectPopupMenu.Items.Count - 1;
3318 for i := 0 to b do begin
3319 item := CabinetSelectPopupMenu.Items[ i ];
3320 if item is TBBSMenuItem then begin
3321 item.Checked := False;
3322 // CabinetMenu
\82Í CabinetSelectPopupMenu
\82Æ
\93¯
\82¶
\82Æ
\8c\88\82ß
\82¤
\82¿
\82µ
\82¿
\82á
\82¤
3323 CabinetMenu.Items[ i ].Checked := False;
3327 FTreeType := gttHistory;
3328 HistoryToolBar.Show;
3329 FavoriteToolBar.Hide;
3330 FHistoryList.SetTreeNode( TreeView );
3331 CabinetSelectToolButton.Caption := '
\97\9a\97ð
\83\8a\83X
\83g';
3335 procedure TGikoForm.SelectTreeNode(Item: TObject; CallEvent: Boolean);
3337 ChangeEvent: TTVChangedEvent;
3338 ChangingEvent: TTVChangingEvent;
3342 if Item is TCategory then
3343 bbs := TCategory( Item ).ParenTBBS
3344 else if Item is TBoard then
3345 bbs := TBoard( Item ).ParentCategory.ParenTBBS
3349 if (FTreeType = gtt2ch) and (FActiveBBS = bbs) then begin
3350 if Item <> FActiveList then begin
3352 ChangingEvent := nil;
3354 if not CallEvent then begin
3355 ChangeEvent := TreeView.OnChange;
3356 ChangingEvent := TreeView.OnChanging;
3359 if not CallEvent then begin
3360 TreeView.OnChange := nil;
3361 TreeView.OnChanging := nil;
3363 //Application.ProcessMessages;
3364 for i := 0 to TreeView.Items.Count - 1 do begin
3365 if TreeView.Items[i].Data = Item then begin
3366 TreeView.Items[i].Selected := True;
3368 TreeClick(TreeView.Items[i]);
3372 //Application.ProcessMessages;
3374 if not CallEvent then begin
3375 TreeView.OnChange := ChangeEvent;
3376 TreeView.OnChanging := ChangingEvent;
3381 if Item <> FActiveList then begin
3382 ActiveListColumnSave;
3383 if (Item is TBBS) or (Item is TCategory) then begin
3384 ListView.Columns.Clear;
3385 SetActiveList( Item );
3386 end else if Item is TBoard then begin
3387 if not TBoard( Item ).IsThreadDatRead then begin
3388 Screen.Cursor := crHourGlass;
3390 if not TBoard( Item ).IsThreadDatRead then
3391 GikoSys.ReadSubjectFile(TBoard( Item ));
3393 Screen.Cursor := crDefault;
3396 Sort.SetSortDate(Now());
3397 SetActiveList( Item );
3402 if Item is TBoard then begin // not TCategory
3403 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3404 if GikoSys.Setting.ListWidthState = glsMax then begin
3405 GikoDM.BrowserMinAction.Execute;
3406 if GikoForm.Visible then
3410 if GikoSys.Setting.ListHeightState = glsMax then begin
3411 GikoDM.BrowserMinAction.Execute;
3412 if GikoForm.Visible then
3419 procedure TGikoForm.ListViewMouseDown(Sender: TObject;
3420 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
3422 listItem : TListItem;
3423 threadItem : TThreadItem;
3430 if not (GetActiveList is TBoard) then Exit;
3431 listItem := ListView.GetItemAt( X, Y );
3432 if listItem = nil then Exit;
3433 if not (TObject(listItem.Data) is TThreadItem) then Exit;
3435 threadItem := TThreadItem(ListItem.Data);
3436 InsertBrowserTab(threadItem, False);
3437 if threadItem.IsLogFile then
3438 ListView.UpdateItems(listItem.Index, listItem.Index);
3442 //
\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Å
3443 if (ssDouble in Shift) then
3444 ListDoubleClick(Shift)
3452 Windows.ClientToScreen( ListView.Handle, pos );
3453 ListPopupMenu.Popup( pos.X, pos.Y );
3459 procedure TGikoForm.ListClick;
3461 ListItem: TListItem;
3462 ThreadItem: TThreadItem;
3464 if ListView.SelCount <> 1 then Exit;
3465 ListItem := ListView.Selected;
3466 if ListItem = nil then Exit;
3467 if not (TObject(ListItem.Data) is TThreadItem) then Exit;
3469 ThreadItem := TThreadItem(ListItem.Data);
3470 if ThreadItem.IsLogFile then begin
3471 InsertBrowserTab(ThreadItem);
3472 ListView.UpdateItems(ListItem.Index, ListItem.Index);
3474 InsertBrowserTab(ThreadItem);
3477 if GikoSys.Setting.BrowserAutoMaximize = gbmClick then begin
3478 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3479 if GikoSys.Setting.ListWidthState = glsMin then begin
3480 GikoDM.BrowserMaxAndFocusAction.Execute;
3483 if GikoSys.Setting.ListHeightState = glsMin then begin
3484 GikoDM.BrowserMaxAndFocusAction.Execute;
3490 procedure TGikoForm.ListDoubleClick(Shift: TShiftState);
3492 ThreadItem: TThreadItem;
3495 shiftDown := (ssShift in Shift);
3497 if ListView.Selected = nil then Exit;
3499 if TObject(ListView.Selected.Data) is TCategory then begin
3500 SelectTreeNode(ListView.Selected.Data, True);
3501 end else if TObject(ListView.Selected.Data) is TBoard then begin
3502 SelectTreeNode(ListView.Selected.Data, True)
3503 end else if TObject(ListView.Selected.Data) is TThreadItem then begin
3504 Application.ProcessMessages;
3505 ThreadItem := TThreadItem(ListView.Selected.Data);
3506 DownloadContent(ThreadItem, shiftDown);
3508 if GikoSys.Setting.BrowserAutoMaximize = gbmDoubleClick then begin
3509 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3510 if GikoSys.Setting.ListWidthState = glsMin then begin
3511 GikoDM.BrowserMaxAction.Execute;
3512 GikoDM.SetFocusForBrowserAction.Execute;
3515 if GikoSys.Setting.ListHeightState = glsMin then begin
3516 GikoDM.BrowserMaxAction.Execute;
3517 GikoDM.SetFocusForBrowserAction.Execute;
3524 procedure TGikoForm.BrowserMovement(const AName: string);
3526 // Access Violation
\82ª
\8bN
\82«
\82é
\8e\96\82ª
\82 \82é
\82Ì
\82Å
\8d¡
\8cã
\97v
\83`
\83F
\83b
\83N
3527 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3528 and (FActiveContent <> nil) then begin
3529 FActiveContent.Move(AName);
3532 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\83X
\83\8c\83b
\83h
\82ð
\83X
\83N
\83\8d\81[
\83\8b
3533 procedure TGikoForm.BrowserMovement(scroll: Integer);
3535 if(BrowserTab.Tabs.Count > 0) and (BrowserTab.TabIndex >= 0)
3536 and (FActiveContent <> nil) then begin
3537 FActiveContent.Move(scroll);
3540 procedure TGikoForm.TreeViewCollapsed(Sender: TObject; Node: TTreeNode);
3542 if TObject(Node.Data) is TBBS then begin
3543 TBBS(Node.Data).NodeExpand := False;
3544 end else if TObject(Node.Data) is TCategory then begin
3545 TCategory(Node.Data).NodeExpand := False;
3546 end else if TObject(Node.Data) is TBoard then begin
3547 TBoard(Node.Data).NodeExpand := False;
3549 if (TreeView.Selected <> nil) and (TreeView.Selected = Node) then begin
3550 TreeClick(TreeView.Selected);
3554 procedure TGikoForm.MessageListViewResize(Sender: TObject);
3556 // MessageListView.Column[0].Width := MessageListView.ClientWidth - 16;
3558 procedure TGikoForm.CabinetVisible( isVisible : Boolean );
3560 TreeSplitter.Visible := isVisible;
3561 CabinetPanel.Visible := isVisible;
3562 GikoDM.CabinetVisibleAction.Checked := isVisible;
3565 procedure TGikoForm.SelectListItem(List: TList);
3567 TmpListItem: TListItem;
3571 TmpListItem := ListView.Selected;
3572 while TmpListItem <> nil do begin
3573 List.Add(TmpListItem.Data);
3574 TmpListItem := ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
3579 procedure TGikoForm.FormResize(Sender: TObject);
3582 MessageListView.Column[0].Width := MessageListView.ClientWidth - 32;
3583 MainCoolBar.Width := TopPanel.Width - TopRightPanel.Width;
3585 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3586 if GikoSys.Setting.ListWidthState = glsMin then begin
3587 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3588 ViewPanel.Width := ThreadMainPanel.Width - 80;
3591 if GikoSys.Setting.ListHeightState = glsMin then begin
3592 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
3593 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
3597 FIsIgnoreResize := rtResizing;
3598 PostMessage( Handle, USER_RESIZED, 0, 0 );
3603 procedure TGikoForm.DeleteTab(BrowserRecord: TBrowserRecord);
3607 FTabHintIndex := -1;
3608 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3609 if TBrowserRecord(BrowserTab.Tabs.Objects[i]) = BrowserRecord then begin
3610 DeleteTab(i, BrowserTab.TabIndex);
3615 procedure TGikoForm.DeleteTab(ThreadItem: TThreadItem);
3619 FTabHintIndex := -1;
3620 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
3621 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread = ThreadItem then begin
3622 DeleteTab(i, BrowserTab.TabIndex);
3627 procedure TGikoForm.DeleteTab(index, selectIndex: Integer);
3633 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3634 doc := TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser.Document;
3635 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := doc.Body.ScrollTop;
3638 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.ScrollTop := 0;
3640 if(FActiveContent = TBrowserRecord(BrowserTab.Tabs.Objects[index])) then
3641 FActiveContent := nil;
3642 if TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser <> nil then begin
3643 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[index]).Browser);
3645 FBrowsers.Move(j, BROWSER_COUNT - 1);
3647 BrowserTab.Tabs.BeginUpdate;
3649 GikoSys.Setting.LastCloseTabURL :=
3650 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Thread.URL;
3651 TBrowserRecord(BrowserTab.Tabs.Objects[index]).Free;
3652 if ( BrowserTab.Tabs.Count - 1 = index ) and
3653 ( BrowserTab.TabRect(index).Left
3654 <= BrowserTab.DisplayRect.Left ) then begin
3655 BrowserTab.ScrollTabs(-1);
3657 BrowserTab.Tabs.Delete(index);
3658 if selectIndex > index then begin
3659 BrowserTab.TabIndex := selectIndex - 1;
3661 if BrowserTab.Tabs.Count -1 >= selectIndex then
3662 BrowserTab.TabIndex := selectIndex
3664 BrowserTab.TabIndex := BrowserTab.Tabs.Count - 1;
3667 BrowserTab.Tabs.EndUpdate;
3669 if BrowserTab.Tabs.Count = 0 then begin
3670 BrowserNullTab.Thread := nil;
3672 if(BrowserTab.TabIndex <> -1) and
3673 ( TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser = nil) then begin
3674 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3675 ReleaseOldestBrowser;
3677 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Browser
3678 := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3679 TBrowserRecord(BrowserTab.Tabs.Objects[BrowserTab.TabIndex]).Repaint := true;
3680 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3683 if( FActiveContent = nil) then
3684 BrowserTab.OnChange(nil);
3686 function TGikoForm.Hook(var Message: TMessage): Boolean;
3688 //
\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Ì
3689 //
\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ð
3693 Result := True; //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\83L
\81[
\96³
\8cø
3695 Result := True; //
\83A
\83N
\83Z
\83\89\83\8c\81[
\83^
\82ð
\96³
\8cø
\82É
\82·
\82é
3699 procedure TGikoForm.ListPopupMenuPopup(Sender: TObject);
3701 bBoard, bCategory : Boolean;
3703 bBoard := (GetActiveList is TBoard);
3704 bCategory := (GetActiveList is TCategory);
3705 ItemRoundPMenu.Visible := bBoard;
3706 ItemReservPMenu.Visible := bBoard;
3707 LPMSep01.Visible := bBoard;
3708 ListRoundPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3709 ListReservPMenu.Visible := bCategory;// or (GetActiveList is TBoard);
3710 LPMSep02.Visible := bCategory or bBoard;
3711 KidokuPMenu.Visible := bBoard;
3712 MidokuPMenu.Visible := bBoard;
3713 UrlCopyPMenu.Visible := bCategory or bBoard;
3714 NameUrlCopyPMenu.Visible := bCategory or bBoard;
3715 AllSelectPMenu.Visible := bCategory or bBoard;
3716 LPMSep05.Visible := bCategory or bBoard;
3717 DeletePMenu.Visible := bBoard;
3718 LPMSep06.Visible := bCategory or bBoard;
3719 BoardFavoriteAddMenu.Visible := bCategory;
3720 ThreadFavoriteAddMenu.Visible := bBoard;
3721 SaveThreadFile.Visible := bBoard;
3722 AddRoundNameMenu(ItemReservPMenu);
3723 AddRoundNameMenu(ListReservPMenu);
3726 procedure TGikoForm.TreePopupMenuPopup(Sender: TObject);
3728 FClickNode := TreeView.Selected;
3729 if FClickNode = nil then begin
3730 TreeSelectThreadPupupMenu.Visible := False;
3731 TreeSelectBoardPupupMenu.Visible := False;
3732 TPMSep01.Visible := False;
3733 TreeSelectURLPupupMenu.Visible := False;
3734 TreeSelectNamePupupMenu.Visible := False;
3735 TreeSelectNameURLPupupMenu.Visible := False;
3736 TreeSelectFavoriteAddPupupMenu.Visible := False;
3737 TreeSelectLogDeleteSeparator.Visible := False;
3738 TreeSelectLogDeletePopupMenu.Visible := False;
3739 end else if TObject(FClickNode.Data) is TBoard then begin
3740 TreeSelectThreadPupupMenu.Visible := False;
3741 TreeSelectBoardPupupMenu.Visible := True;
3742 TPMSep01.Visible := True;
3743 TreeSelectURLPupupMenu.Visible := True;
3744 TreeSelectNamePupupMenu.Visible := True;
3745 TreeSelectNameURLPupupMenu.Visible := True;
3746 TreeSelectFavoriteAddPupupMenu.Visible := True;
3747 TreeSelectLogDeleteSeparator.Visible := False;
3748 TreeSelectLogDeletePopupMenu.Visible := False;
3749 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
3750 TreeSelectThreadPupupMenu.Visible := False;
3751 TreeSelectBoardPupupMenu.Visible := True;
3752 TPMSep01.Visible := True;
3753 TreeSelectURLPupupMenu.Visible := True;
3754 TreeSelectNamePupupMenu.Visible := True;
3755 TreeSelectNameURLPupupMenu.Visible := True;
3756 TreeSelectFavoriteAddPupupMenu.Visible := True;
3757 TreeSelectLogDeleteSeparator.Visible := False;
3758 TreeSelectLogDeletePopupMenu.Visible := False;
3759 end else if (TObject(FClickNode.Data) is TThreadItem) then begin
3760 TreeSelectThreadPupupMenu.Visible := True;
3761 TreeSelectBoardPupupMenu.Visible := False;
3762 TPMSep01.Visible := True;
3763 TreeSelectURLPupupMenu.Visible := True;
3764 TreeSelectNamePupupMenu.Visible := True;
3765 TreeSelectNameURLPupupMenu.Visible := True;
3766 TreeSelectFavoriteAddPupupMenu.Visible := True;
3767 TreeSelectLogDeleteSeparator.Visible := True;
3768 TreeSelectLogDeletePopupMenu.Visible := True;
3769 end else if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
3770 TreeSelectThreadPupupMenu.Visible := True;
3771 TreeSelectBoardPupupMenu.Visible := False;
3772 TPMSep01.Visible := True;
3773 TreeSelectURLPupupMenu.Visible := True;
3774 TreeSelectNamePupupMenu.Visible := True;
3775 TreeSelectNameURLPupupMenu.Visible := True;
3776 TreeSelectFavoriteAddPupupMenu.Visible := True;
3777 TreeSelectLogDeleteSeparator.Visible := True;
3778 TreeSelectLogDeletePopupMenu.Visible := True;
3779 end else if (TObject(FClickNode.Data) is TCategory) then begin
3780 TreeSelectThreadPupupMenu.Visible := False;
3781 TreeSelectBoardPupupMenu.Visible := False;
3782 TPMSep01.Visible := False;
3783 TreeSelectURLPupupMenu.Visible := False;
3784 TreeSelectNamePupupMenu.Visible := True;
3785 TreeSelectNameURLPupupMenu.Visible := False;
3786 TreeSelectFavoriteAddPupupMenu.Visible := False;
3787 TreeSelectLogDeleteSeparator.Visible := False;
3788 TreeSelectLogDeletePopupMenu.Visible := False;
3789 end else if FClickNode.IsFirstNode then begin
3790 TreeSelectThreadPupupMenu.Visible := False;
3791 TreeSelectBoardPupupMenu.Visible := False;
3792 TPMSep01.Visible := False;
3793 TreeSelectURLPupupMenu.Visible := False;
3794 TreeSelectNamePupupMenu.Visible := True;
3795 TreeSelectNameURLPupupMenu.Visible := False;
3796 TreeSelectFavoriteAddPupupMenu.Visible := False;
3797 TreeSelectLogDeleteSeparator.Visible := False;
3798 TreeSelectLogDeletePopupMenu.Visible := False;
3800 TreeSelectThreadPupupMenu.Visible := False;
3801 TreeSelectBoardPupupMenu.Visible := False;
3802 TPMSep01.Visible := False;
3803 TreeSelectURLPupupMenu.Visible := False;
3804 TreeSelectNamePupupMenu.Visible := False;
3805 TreeSelectNameURLPupupMenu.Visible := False;
3806 TreeSelectFavoriteAddPupupMenu.Visible := False;
3807 TreeSelectLogDeleteSeparator.Visible := False;
3808 TreeSelectLogDeletePopupMenu.Visible := False;
3812 procedure TGikoForm.BrowserNewWindow2(Sender: TObject;
3813 var ppDisp: IDispatch; var Cancel: WordBool);
3822 threadItem: TThreadItem;
3823 aElement : IHTMLElement;
3826 Writeln(IntToStr(Integer(ppDisp)));
3829 aElement := IHTMLDocument2(TWebBrowser(Sender).Document).activeElement;
3830 if ( aElement <> nil) then begin
3831 Text := aElement.Get_outerText;
3832 Html := aElement.Get_outerHTML;
3833 if(AnsiPos('>>', Text) = 1) or (AnsiPos('>', Text) = 1)
3834 or (AnsiPos('
\81\84\81\84', Text) = 1) or (AnsiPos('
\81\84', Text) = 1) then begin
3835 if GikoSys.Setting.ResAnchorJamp then begin
3837 Text := ZenToHan(Trim(Text));
3839 if(AnsiPos('>>', Text) = 1) then begin
3840 //Text := Copy(Text, 3, Length(Text) - 2);
3843 //Text := Copy(Text, 2, Length(Text) - 1);
3847 if AnsiPos('-', Text) <> 0 then begin
3848 wkIntSt := StrToIntDef(Copy(Text, 1, AnsiPos('-', Text) - 1), 0);
3849 Text := Copy(Text, AnsiPos('-', Text) + 1, Length(Text));
3850 wkIntTo := StrToIntDef(Text, 0);
3851 if wkIntTo < wkIntSt then
3854 wkIntSt := StrToIntDef(Text, 0);
3857 if wkIntSt <> 0 then begin
3858 FActiveContent.IDAnchorPopup('');
3859 MoveHisotryManager.pushItem(FActiveContent);
3860 if (Sender is TResPopupBrowser) then begin
3861 TResPopupBrowser(Sender).ChildClear;
3863 GetActiveContent(true),
3864 GetActiveContent(true).URL + '&st=' +
3865 IntToStr(wkIntSt) + '&to=' + IntToStr(wkIntSt));
3867 BrowserMovement(IntToStr(wkIntSt));
3872 ////'http://be.2ch.net/test/p.php?i='+id+'&u=d:'+bas+num
3874 URL := GikoSys.GetHRefText(Html);
3875 URL := GikoSys.HTMLDecode(URL);
3876 if AnsiPos('BE:', URL) = 1 then begin
3877 BNum := Copy(URL, 4, AnsiPos('/', URL) - 4);
3878 BRes := Copy(URL, AnsiPos('/', URL) + 1, Length(URL));
3879 threadItem := FActiveContent.Thread;
3880 if threadItem = nil then Exit;
3881 URL := BE_PHP_URL + BNum + '&u=d'
3882 + CustomStringReplace(threadItem.URL, 'l50', '') + BRes;
3885 if( AnsiPos('http://', URL) = 1) or (AnsiPos('https://', URL) = 1) or
3886 ( AnsiPos('ftp://', URL) = 1) then begin
3887 //
\83A
\83h
\83\8c\83X
\83o
\81[
\82Ì
\97\9a\97ð
3888 if GikoSys.Setting.LinkAddAddressBar then begin
3889 idx := AddressComboBox.Items.IndexOf(URL);
3890 if idx = -1 then begin
3891 AddressComboBox.Items.Insert(0, URL);
3892 if AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
3893 AddressComboBox.Items.Delete(AddressComboBox.Items.Count - 1);
3895 AddressComboBox.Items.Delete(idx);
3896 AddressComboBox.Items.Insert(0, URL);
3899 if (Sender is TResPopupBrowser) then begin
3900 TResPopupBrowser(Sender).ChildClear
3903 MoveHisotryManager.pushItem(FActiveContent);
3911 procedure TGikoForm.ListSplitterMoved(Sender: TObject);
3913 if Mouse.Capture <> 0 then
3915 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3916 if (ViewPanel.Width > 1) and (ViewPanel.Width <= (ThreadMainPanel.Width - 80)) then
3917 FBrowserSizeWidth := ViewPanel.Width;
3919 if (ViewPanel.Height > 1) and (ViewPanel.Height <= (ThreadMainPanel.Height - BrowserCoolBar.Height)) then
3920 FBrowserSizeHeight := ViewPanel.Height;
3922 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3923 if ViewPanel.Width < 2 then begin
3924 ViewPanel.Width := 1;
3925 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3926 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3927 GikoSys.Setting.ListWidthState := glsMax;
3928 end else if ViewPanel.Width > (ThreadMainPanel.Width - 80) then begin
3929 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3930 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_NORMAL;
3931 GikoSys.Setting.ListWidthState := glsMin;
3933 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MAX;
3934 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_WIDTH_MIN;
3935 GikoSys.Setting.ListWidthState := glsNormal;
3938 if ViewPanel.Height < 2 then begin
3939 ViewPanel.Height := 1;
3940 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3941 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3942 GikoSys.Setting.ListHeightState := glsMax;
3943 end else if ViewPanel.Height > (ThreadMainPanel.Height - BrowserCoolBar.Height - 7) then begin
3944 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3945 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_NORMAL;
3946 GikoSys.Setting.ListHeightState := glsMin;
3948 GikoDM.BrowserMaxAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MAX;
3949 GikoDM.BrowserMinAction.ImageIndex := GikoDataModule.TOOL_ICON_HEIGHT_MIN;
3950 GikoSys.Setting.ListHeightState := glsNormal;
3953 { if (Mouse.Capture = 0) and (ViewPanel.Height > 1) and (not ArrangeAction.Checked) then
3954 FBrowserSizeHeight := ViewPanel.Height
3955 else if (Mouse.Capture = 0) and (ViewPanel.Width > 1) and (ArrangeAction.Checked) then
3956 FBrowserSizeWidth := ViewPanel.Width;}
3959 procedure TGikoForm.BrowserTabChange(Sender: TObject);
3964 BrowserTab.Tabs.BeginUpdate;
3966 if not BrowserTab.Dragging then begin
3967 FTabHintIndex := -1;
3968 BrowserTab.Hint := '';
3969 idx := BrowserTab.TabIndex;
3970 if idx = -1 then begin
3971 SetContent(BrowserNullTab);
3973 end else if(BrowserTab.Tabs.Objects[idx] <> nil) and (BrowserTab.Tabs.Objects[idx] is TBrowserRecord) then begin
3974 if TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser <> nil then begin
3975 j := FBrowsers.IndexOf(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser);
3977 FBrowsers.Move(j ,0);
3979 if( FActiveContent <> nil ) and (FActiveContent.Browser <> nil) and
3980 (FActiveContent.Browser <> BrowserNullTab.Browser) and
3981 (FActiveContent.Browser = TWebBrowser(FBrowsers[BROWSER_COUNT - 1])) then
3982 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3984 //
\88ê
\94Ô
\8cÃ
\82¢
\83u
\83\89\83E
\83U
\82ð
\8aJ
\95ú
\82·
\82é
3985 ReleaseOldestBrowser;
3987 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser := TWebBrowser(FBrowsers[BROWSER_COUNT - 1]);
3988 TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Repaint := true;
3989 FBrowsers.Move(BROWSER_COUNT - 1, 0);
3991 MoveWindow(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser.Handle, 0, 0, BrowserPanel.Width, BrowserPanel.Height, false);
3992 TOleControl(TBrowserRecord(BrowserTab.Tabs.Objects[idx]).Browser).BringToFront;
3993 SetContent(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
3995 if (GikoSys.Setting.URLDisplay) and (GetActiveContent <> nil) then
3996 AddressComboBox.Text := GetActiveContent.URL;
3998 if ((TreeView.Visible) and (TreeView.Focused)) or ((FavoriteTreeView.Visible) and (FavoriteTreeView.Focused)) or
3999 (ListView.Focused) or (SelectComboBox.Focused) or (AddressComboBox.Focused)
4002 GikoDM.SetFocusForBrowserAction.Execute;
4006 BrowserTab.Tabs.EndUpdate;
4011 procedure TGikoForm.BrowserTabMouseDown(Sender: TObject;
4012 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
4018 if Button = mbMiddle then begin
4019 //
\83}
\83E
\83X
\92\86\83{
\83^
\83\93
4022 p := BrowserTab.ScreenToClient(p);
4023 idx := BrowserTab.IndexOfTabAt(p.X, p.Y);
4025 DeleteTab(TBrowserRecord(BrowserTab.Tabs.Objects[idx]));
4026 end else if Button = mbLeft then begin
4027 FDragWFirst := true;
4028 FMouseDownPos.X := X;
4029 FMouseDownPos.Y := Y;
4034 procedure TGikoForm.SetBrowserTabState;
4036 CoolBand: TCoolBand;
4038 BrowserBottomPanel.AutoSize := False;
4039 if GikoSys.Setting.BrowserTabVisible then begin
4041 BrowserTab.Tabs.BeginUpdate;
4043 if GikoSys.Setting.BrowserTabStyle = gtsTab then begin
4044 BrowserTab.Style := tsTabs;
4045 if GikoSys.Setting.BrowserTabPosition = gtpTop then
4046 BrowserTab.TabPosition := tpTop
4048 BrowserTab.TabPosition := tpBottom;
4049 end else if GikoSys.Setting.BrowserTabStyle = gtsButton then begin
4050 BrowserTab.TabPosition := tpTop;
4051 BrowserTab.Style := tsButtons;
4053 BrowserTab.TabPosition := tpTop;
4054 BrowserTab.Style := tsFlatButtons
4057 if GikoSys.Setting.BrowserTabPosition = gtpTop then begin
4058 BrowserTab.Parent := BrowserTabToolBar;
4059 BrowserBottomPanel.Hide;
4060 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4061 if CoolBand <> nil then
4062 CoolBand.Visible := True;
4064 BrowserTab.Parent := BrowserBottomPanel;
4065 BrowserTab.Top := 0;
4066 BrowserTab.Left := 0;
4067 BrowserBottomPanel.Show;
4068 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4069 if CoolBand <> nil then
4070 CoolBand.Visible := False;
4073 BrowserTab.Tabs.EndUpdate;
4077 CoolBand := GetCoolBand(BrowserCoolBar, BrowserTabToolBar);
4078 if CoolBand <> nil then
4079 CoolBand.Visible := False;
4080 BrowserBottomPanel.Visible := False;
4081 GikoDM.AllTabCloseAction.Execute;
4085 procedure TGikoForm.BrowserTabDragOver(Sender, Source: TObject; X,
4086 Y: Integer; State: TDragState; var Accept: Boolean);
4090 idx := BrowserTab.IndexOfTabAt(X, Y);
4091 Accept := (Source = BrowserTab) and (BrowserTab.TabIndex <> idx);
4094 procedure TGikoForm.BrowserTabDragDrop(Sender, Source: TObject; X,
4099 FDragWFirst := False;
4100 idx := BrowserTab.IndexOfTabAt(X, Y);
4102 BrowserTab.Tabs.Move(BrowserTab.TabIndex, idx);
4105 procedure TGikoForm.BrowserTabMouseMove(Sender: TObject;
4106 Shift: TShiftState; X, Y: Integer);
4109 ThreadItem: TThreadItem;
4112 TabIdx := BrowserTab.IndexOfTabAt(x, y);
4114 if ( ssLeft in Shift ) then begin
4115 if (FDragWFirst) then begin
4116 BrowserTab.EndDrag(false);
4117 BrowserTab.BeginDrag(false, DandD_THRESHOLD);
4120 BrowserTab.EndDrag(false);
4121 FDragWFirst := false;
4124 if (FTabHintIndex <> TabIdx) and (TabIdx <> -1) then begin
4125 Application.CancelHint;
4126 ThreadItem := TBrowserRecord(BrowserTab.Tabs.Objects[TabIdx]).Thread;
4127 if ThreadItem.Title <> BrowserTab.Tabs[TabIdx] then begin
4128 BrowserTab.Hint := ThreadItem.Title;
4129 Application.ShowHint := True;
4131 BrowserTab.Hint := '';
4132 Application.ShowHint := True;
4134 FTabHintIndex := TabIdx;
4139 procedure TGikoForm.BrowserDocumentComplete(Sender: TObject;
4140 const pDisp: IDispatch; var URL: OleVariant);
4142 FDispHtmlDocument: DispHTMLDocument;
4143 BrowserRecord :TBrowserRecord;
4146 threadItem : TThreadItem;
4148 if TObject(Sender) is TWebBrowser then begin
4149 BrowserRecord := nil;
4150 if TWebBrowser(Sender) <> Browser then begin
4151 for i := BrowserTab.Tabs.Count - 1 downto 0 do begin
4152 if TBrowserRecord(BrowserTab.Tabs.Objects[i]).Browser = TWebBrowser(Sender) then begin
4153 BrowserRecord := TBrowserRecord(BrowserTab.Tabs.Objects[i]);
4157 if BrowserRecord <> nil then begin
4158 if BrowserRecord.Event <> nil then
4159 BrowserRecord.Event.Free;
4160 FDispHtmlDocument := Idispatch(OleVariant(BrowserRecord.Browser.ControlInterface).Document) as DispHTMLDocument;
4161 BrowserRecord.Event := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4162 BrowserRecord.Event.OnContextMenu := OnDocumentContextMenu;
4163 BrowserRecord.Event.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4166 if GetActiveContent <> nil then begin
4167 FDispHtmlDocument := Idispatch(OleVariant(Browser.ControlInterface).Document) as DispHTMLDocument;
4168 if FEvent <> nil then
4170 FEvent := THTMLDocumentEventSink.Create(Self, FDispHtmlDocument, HTMLDocumentEvents2);
4171 FEvent.OnContextMenu := OnDocumentContextMenu;
4172 FEvent.OnClick := WebBrowserClick; //
\92Ç
\89Á
\82µ
\82½OnClick
\83C
\83x
\83\93\83g
4174 if FEvent <> nil then begin
4182 if (BrowserRecord <> nil) and
4183 Assigned( BrowserRecord.Thread ) then begin
4184 threadItem := BrowserRecord.Thread;
4186 if (threadItem.JumpAddress > 0) then begin
4187 if threadItem.UnRead then begin
4188 threadItem.UnRead := False;
4190 RefreshListView(threadItem);
4192 //
\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®
4193 //if (StrToIntDef(BrowserRecord.Movement, 0) <= BrowserRecord.Thread.Count) then begin
4194 if (threadItem.JumpAddress <= BrowserRecord.Thread.Count) then begin
4195 BrowserRecord.Move(IntToStr(threadItem.JumpAddress));
4196 threadItem.JumpAddress := 0;
4198 BrowserRecord.Move(IntToStr(BrowserRecord.Thread.Count));
4201 end else if threadItem.UnRead then begin
4202 threadItem.UnRead := False;
4204 BrowserRecord.Move('new');
4205 RefreshListView(threadItem);
4206 end else if threadItem.ScrollTop <> 0 then begin
4208 doc := Idispatch( OleVariant( BrowserRecord.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4209 doc.Body.ScrollTop := threadItem.ScrollTop;
4212 MsgBox(Handle, E.Message, 'SetContent[ScrollTop<-]', 0);
4217 LockWindowUpdate(0);
4220 procedure TGikoForm.RoundNamePopupMenuPopup(Sender: TObject);
4222 AddRoundNameMenu(RoundNamePopupMenu.Items);
4225 procedure TGikoForm.AddRoundNameMenu(MenuItem: TMenuItem);
4231 Item := TMenuItem.Create(Self);
4232 Item.Caption := '
\90V
\82µ
\82¢
\96¼
\91O
\82Å
\8f\84\89ñ
\97\
\96ñ(&N)...';
4233 Item.OnClick := GikoDM.SelectNewRoundNameExecute;
4235 Item := TMenuItem.Create(Self);
4236 Item.Caption := '
\8f\84\89ñ
\83\8a\83X
\83g
\82©
\82ç
\8dí
\8f\9c(&D)';
4237 Item.OnClick := GikoDM.SelectDeleteRoundExecute;
4239 Item := TMenuItem.Create(Self);
4240 Item.Caption := '-';
4242 for i := 0 to RoundList.RoundNameList.Count - 1 do begin
4243 Item := TMenuItem.Create(Self);
4244 Item.Caption := RoundList.RoundNameList[i];
4245 Item.OnClick := SetSelectRoundName;
4250 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string; ParentName: string);
4252 threadItem : TThreadItem;
4254 if ParentName <> 'dummy1' then begin
4255 SetSelectItemRound(RoundFlag, RoundName);
4257 threadItem := GetActiveContent;
4258 if threadItem <> nil then begin
4259 threadItem.RoundName := RoundName;
4261 RoundList.RoundNameList.Add(RoundName);
4262 threadItem.Round := RoundFlag;
4267 procedure TGikoForm.SetSelectItemRound(RoundFlag: Boolean; RoundName: string);
4272 List := TList.Create;
4274 SelectListItem(List);
4275 for i := 0 to List.Count - 1 do begin
4276 if TObject(List[i]) is TBoard then begin
4277 TBoard(List[i]).RoundName := RoundName;
4279 RoundList.RoundNameList.Add(RoundName);
4280 TBoard(List[i]).Round := RoundFlag;
4281 end else if TObject(List[i]) is TThreadItem then begin
4282 if TThreadItem(List[i]).IsLogFile then begin
4283 TThreadItem(List[i]).RoundName := RoundName;
4285 RoundList.RoundNameList.Add(RoundName);
4286 TThreadItem(List[i]).Round := RoundFlag;
4295 procedure TGikoForm.SetSelectRoundName(Sender: TObject);
4297 MenuItem: TMenuItem;
4299 if Sender is TMenuItem then begin
4300 MenuItem := TMenuItem(Sender);
4301 SetSelectItemRound(True, StripHotKey(MenuItem.Caption), TMenuItem(Sender).Parent.Name);
4306 function TGikoForm.GetCoolBand(CoolBar: TCoolBar; Control: TWinControl): TCoolBand;
4311 if CoolBar = nil then
4313 for i := 0 to CoolBar.Bands.Count - 1 do begin
4314 if CoolBar.Bands[i].Control = Control then begin
4315 Result := CoolBar.Bands[i];
4321 procedure TGikoForm.BrowserTabToolBarResize(Sender: TObject);
4323 if BrowserTab.Parent = BrowserTabToolBar then
4324 BrowserTab.Width := BrowserTabToolBar.Width;
4327 procedure TGikoForm.WMSettingChange(var Message: TWMWinIniChange);
4332 procedure TGikoForm.SetMenuFont;
4334 // GikoSys.MenuFont(MenuToolBar.Font);
4335 // MenuToolBar.Buttons[0].AutoSize := False;
4336 // MenuToolBar.Buttons[0].AutoSize := True;
4337 // MenuToolBar.Font.Color := clMenuText;
4338 GikoSys.MenuFont(MainCoolBar.Font);
4339 MenuToolBar.Buttons[0].AutoSize := False;
4340 MenuToolBar.Buttons[0].AutoSize := True;
4341 MainCoolBar.AutoSize := False;
4342 MainCoolBar.AutoSize := True;
4344 GikoSys.MenuFont(ListCoolBar.Font);
4345 GikoSys.MenuFont(BrowserCoolBar.Font);
4346 // MenuToolBar.Font.Color := clMenuText;
4349 procedure TGikoForm.FavoriteMenuClick(Sender: TObject);
4353 if FavoriteDM.Modified then begin
4356 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á
4357 NewMenu := TMenuItem.Create(MainMenu);
4358 NewMenu.Action := GikoDM.FavoriteAddAction;
4359 FavoriteMenu.Add(NewMenu);
4360 //
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\90®
\97\9d
4361 NewMenu := TMenuItem.Create(FavoriteMenu);
4362 NewMenu.Action := GikoDM.FavoriteArrangeAction;
4363 FavoriteMenu.Add(NewMenu);
4364 //
\83Z
\83p
\83\8c\81[
\83^
4365 FavoriteMenu.InsertNewLineAfter(NewMenu);
4366 CreateFavMenu(FavoriteDM.TreeView.Items.GetFirstNode, FavoriteMenu);
4367 FavoriteDM.Modified := false;
4371 procedure TGikoForm.CreateFavMenu(Node: TTreeNode; MenuItem: TMenuItem);
4374 NewMenu: array of TMenuItem;
4376 SetLength(NewMenu, Node.Count);
4377 Node := Node.getFirstChild;
4379 while ( Node <> nil ) do begin
4380 NewMenu[i] := TFavoriteMenuItem.Create(nil);
4381 NewMenu[i].AutoHotkeys := maAutomatic;
4382 NewMenu[i].Caption := CustomStringReplace(Node.Text, '&', '&&');
4383 TFavoriteMenuItem(NewMenu[i]).Data := Node.Data;
4385 if TObject(Node.Data) is TFavoriteFolder then begin
4386 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4387 CreateFavMenu(Node, NewMenu[i]);
4388 end else if TObject(Node.Data) is TFavoriteBoardItem then begin
4389 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4390 NewMenu[i].OnClick := FavoriteClick;
4391 end else if TObject(Node.Data) is TFavoriteThreadItem then begin
4392 NewMenu[i].ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4393 NewMenu[i].OnClick := FavoriteClick;
4396 Node := Node.getNextSibling;
4398 MenuItem.Add(NewMenu);
4401 procedure TGikoForm.ShowFavoriteAddDialog( Item : TObject );
4403 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';
4404 TitleAdd: String = '
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\92Ç
\89Á';
4406 Dlg : TFavoriteAddDialog;
4412 if Item is TFavoriteBoardItem then
4413 Item := TFavoriteBoardItem( Item ).Item
4414 else if Item is TFavoriteThreadItem then
4415 Item := TFavoriteThreadItem( Item ).Item;
4417 Node := FavoriteTreeView.Items.GetFirstNode;
4418 if Item is TBoard then begin
4419 ItemURL := TBoard( Item ).URL;
4420 while Node <> nil do begin
4422 if TObject( Data ) is TFavoriteBoardItem then begin
4423 if ItemURL = TFavoriteBoardItem( Data ).URL then begin
4424 if Application.MessageBox(PChar(MsgAdd) , PChar(TitleAdd), MB_YESNO ) = IDNO then
4429 Node := Node.GetNext;
4431 Dlg := TFavoriteAddDialog.Create(Self);
4433 Dlg.SetBoard( TBoard( Item ) );
4438 end else if Item is TThreadItem then begin
4439 ItemURL := TThreadItem( Item ).URL;
4440 while Node <> nil do begin
4442 if TObject( Data ) is TFavoriteThreadItem then begin
4443 if ItemURL = TFavoriteThreadItem( Data ).URL then begin
4444 if Application.MessageBox( PChar(MsgAdd), PChar(TitleAdd), MB_YESNO ) = IDNO then
4449 Node := Node.GetNext;
4451 Dlg := TFavoriteAddDialog.Create(Self);
4453 Dlg.SetThreadItem( TThreadItem( Item ) );
4463 procedure TGikoForm.FavoriteClick(Sender: TObject);
4465 FavoriteClick( Sender, True );
4468 procedure TGikoForm.FavoriteClick(Sender: TObject; ActiveTab: Boolean);
4471 ThreadItem: TThreadItem;
4472 FavBoard: TFavoriteBoardItem;
4473 FavThread: TFavoriteThreadItem;
4477 if Sender is TFavoriteMenuItem then
4478 Item := TFavoriteMenuItem(Sender).Data
4479 else if Sender is TLinkToolButton then
4480 Item := TLinkToolButton(Sender).Data
4481 else if Sender is TTreeNode then
4482 Item := TTreeNode( Sender ).Data
4486 if TObject(Item) is TFavoriteBoardItem then begin
4487 FavBoard := TFavoriteBoardItem(Item);
4488 Board := FavBoard.Item;
4489 if Board <> nil then begin
4490 if (FTreeType = gtt2ch) and (FActiveBBS <> Board.ParentCategory.ParenTBBS) then
4491 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4492 SelectTreeNode(Board, True);
4494 end else if TObject(Item) is TFavoriteThreadItem then begin
4495 FavThread := TFavoriteThreadItem(Item);
4496 ThreadItem := FavThread.Item;
4497 if ThreadItem = nil then
4500 InsertBrowserTab(ThreadItem, ActiveTab);
4502 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
4503 if GikoSys.Setting.ListWidthState = glsMin then begin
4504 GikoDM.BrowserMaxAndFocusAction.Execute;
4507 if GikoSys.Setting.ListHeightState = glsMin then begin
4508 GikoDM.BrowserMaxAndFocusAction.Execute;
4514 procedure TGikoForm.BBSMenuItemOnClick(
4519 if Sender is TBBSMenuItem then
4520 ShowBBSTree( TBBSMenuItem( Sender ).Data );
4524 procedure TGikoForm.MainCoolBarResize(Sender: TObject);
4526 TopPanel.Height := Max(MainCoolBar.Height, AnimePanel.Height);
4529 //!
\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é)
4530 procedure TGikoForm.OpenThreadItem(Thread: TThreadItem; URL: String);
4532 stRes, edRes : Int64;
4533 browserRec : TBrowserRecord;
4534 threadNumber : String;
4539 Thread.JumpAddress := 0;
4540 //
\83^
\83u
\82ð
\90¶
\90¬
4541 browserRec := InsertBrowserTab(Thread);
4542 if (browserRec <> nil) then begin
4543 // JUMP
\82·
\82×
\82«
\83\8c\83X
\94Ô
\8d\86\82ª
\82 \82é
\82©
\83`
\83F
\83b
\83N
\82·
\82é
4544 threadNumber := ChangeFileExt(Thread.FileName, '');
4545 GikoSys.GetPopupResNumber( URL, stRes, edRes );
4546 //
\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
4547 if (StrToInt64(threadNumber) = stRes) then begin
4548 if not (AnsiEndsText(threadNumber + '/' + threadNumber, URL))
4549 and (Pos('&st=' + threadNumber , URL) = 0) then begin
4553 if ( stRes > 0 ) then begin
4554 Thread.JumpAddress := stRes;
4556 //
\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é
4557 if (not Thread.IsLogFile) or (stRes > Thread.Count) then begin
4558 DownloadContent(Thread);
4559 end else if (not browserRec.Repaint) and (stRes > 0) then begin
4560 browserRec.Move(IntToStr(stRes));
4561 Thread.JumpAddress := 0;
4563 doc := Idispatch( OleVariant( browserRec.Browser.ControlInterface ).Document ) as IHTMLDocument2;
4564 Thread.ScrollTop := doc.Body.ScrollTop;
4571 procedure TGikoForm.MoveToURL(const inURL: string);
4573 protocol, host, path, document, port, bookmark : string;
4574 URL, protocol2, host2, path2, document2, port2, bookmark2 : string;
4576 BBSID, BBSKey: string;
4577 {tmpBoard,} Board: TBoard;
4578 ThreadItem: TThreadItem;
4581 tmpThread : TThreadItem;
4582 shiftDown : Boolean;
4586 GikoSys.ParseURI( inURL, protocol, host, path, document, port, bookmark );
4587 GikoSys.Parse2chURL( inURL, path, document, BBSID, BBSKey );
4590 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
4591 ctrlDown := GetAsyncKeyState(VK_CONTROL) = Smallint($8001);
4592 if shiftDown then begin
4593 GikoSys.OpenBrowser(inURL, gbtUserApp);
4595 end else if ctrlDown then begin
4596 GikoSys.OpenBrowser(inURL, gbtIE);
4600 //=====
\83v
\83\89\83O
\83C
\83\93
4603 bi := Length(BoardGroups) - 1;
4604 for i := 1 to bi do begin
4605 if (BoardGroups[i].BoardPlugIn <> nil) and (Assigned(Pointer(BoardGroups[i].BoardPlugIn.Module))) then begin
4606 case BoardGroups[i].BoardPlugIn.AcceptURL( inURL ) of
4609 boardURL := BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL );
4610 Board := BBSsFindBoardFromURL( boardURL );
4613 if Board = nil then begin
4615 //
\81¦
\8dì
\82Á
\82Ä
\82à
\92Ç
\89Á
\82·
\82é
\82Æ
\82±
\82ë
\82ª
\96³
\82¢
\82Ì
\82Å
\8c\83\82µ
\82
\95Û
\97¯
4616 //GikoSys.OpenBrowser(inURL, gbtUserApp);
4619 Board := GikoSys.GetUnknownBoard( tmpThread.BoardPlugIn, boardURL );
4620 if (FTreeType = gtt2ch) and (FActiveBBS = BBSs[ 1 ]) then
4621 ShowBBSTree( BBSs[ 1 ] );
4624 tmpThread := TThreadItem.Create( BoardGroups[i].BoardPlugIn, Board, inURL );
4625 if not Board.IsThreadDatRead then begin
4626 GikoSys.ReadSubjectFile( Board );
4630 ThreadItem := Board.FindThreadFromFileName( tmpThread.FileName );
4631 if ThreadItem = nil then begin
4632 //tmpThread
\82ð
\82±
\82Á
\82¿
\82Í
\8aJ
\95ú
\82µ
\82Ä
\82Í
\82¢
\82¯
\82È
\82¢
4633 ThreadItem := tmpThread;
4634 Board.Insert( 0, ThreadItem );
4635 if ActiveList is TBoard then begin
4636 if TBoard(ActiveList) = Board then
4637 ListView.Items.Count := ListView.Items.Count + 1;
4642 OpenThreadItem(ThreadItem, inURL);
4649 Board := BBSsFindBoardFromURL(
4650 BoardGroups[i].BoardPlugIn.ExtractBoardURL( inURL )
4652 if Board <> nil then begin
4653 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4654 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4655 SelectTreeNode( Board, True );
4663 // 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¢
4667 if (Length( Trim(BBSKey) ) > 0) and (Length( Trim(BBSID) ) > 0) then begin
4668 boardURL := GikoSys.Get2chThreadURL2BoardURL( inURL );
4669 Board := BBSsFindBoardFromURL( boardURL );
4670 if Board = nil then begin
4671 //
\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
4672 GikoSys.OpenBrowser(inURL, gbtUserApp);
4675 //
\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é
4677 GikoSys.ParseURI(URL , protocol2, host2, path2, document2, port2, bookmark2 );
4678 tmp1 := Copy(host, AnsiPos('.', host) + 1, Length(host));
4679 tmp2 := Copy(host2, AnsiPos('.', host2) + 1, Length(host2));
4680 if ( not GikoSys.Is2chHost(tmp1)) and (tmp1 <> tmp2) then begin
4681 GikoSys.OpenBrowser(inURL, gbtUserApp);
4686 if not Board.IsThreadDatRead then
4687 GikoSys.ReadSubjectFile(Board);
4688 URL := GikoSys.Get2chBrowsableThreadURL( inURL );
4689 ThreadItem := Board.FindThreadFromURL( URL );
4690 //
\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)
4691 if ThreadItem = nil then begin
4692 ThreadItem := Board.FindThreadFromFileName( BBSKey + '.dat' );
4695 //
\83X
\83\8c\83b
\83h
\83A
\83C
\83e
\83\80\82ª
\82È
\82¢
\82È
\82ç
\90¶
\90¬
\82·
\82é
\81B
4696 if ThreadItem = nil then begin
4697 ThreadItem := TThreadItem.Create( nil, Board, URL );
4698 ThreadItem.FileName := ChangeFileExt(BBSKey, '.dat');
4699 Board.Insert(0, ThreadItem);
4700 if ActiveList is TBoard then begin
4701 if TBoard(ActiveList) = Board then
4702 ListView.Items.Count := ListView.Items.Count + 1;
4705 //
\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é
4706 if (not ThreadItem.IsLogFile) then begin
4707 if AnsiPos(Host, Board.URL) = 0 then
4708 ThreadItem.DownloadHost := Host
4710 ThreadItem.DownloadHost := '';
4712 OpenThreadItem(ThreadItem, inURL);
4716 Board := BBSsFindBoardFromURL( inURL );
4717 if Board = nil then begin
4718 GikoSys.OpenBrowser(inURL, gbtAuto);
4720 if FActiveBBS <> Board.ParentCategory.ParenTBBS then
4721 ShowBBSTree( Board.ParentCategory.ParenTBBS );
4722 SelectTreeNode( Board, True );
4727 procedure TGikoForm.AddressToolBarResize(Sender: TObject);
4729 AddressComboBox.Width := AddressToolBar.Width - MoveToToolButton.Width - 10;
4730 CoolBarResized( Sender, MainCoolBar );
4733 procedure TGikoForm.AddressComboBoxKeyDown(Sender: TObject; var Key: Word;
4734 Shift: TShiftState);
4736 if Key = VK_RETURN then
4737 GikoDM.MoveToAction.Execute;
4740 procedure TGikoForm.BrowserEnter(Sender: TObject);
4742 Browser.DoObjectVerb(OLEIVERB_UIACTIVATE);
4745 procedure TGikoForm.WMCopyData(var Message: TWMCopyData);
4747 CDS:PCopyDataStruct;
4751 CDS := Message.CopyDataStruct;
4752 GetMem(PC, CDS^.cbData);
4754 lstrcpy(PC,CDS^.lpData);
4755 SetString(sURL, PC,lstrlen(PC));
4760 Message.Result := 1;
4763 procedure TGikoForm.WndProc(var Message: TMessage);
4765 senderBrowser : TWebBrowser;
4771 if not (ssAlt in KeyDataToShiftState(TWMChar(Message).KeyData)) then
4774 if Message.WParam = SC_MINIMIZE then begin
4776 PostMessage(Handle, USER_MINIMIZED, 0, 0);
4779 TreeClick( TreeView.Selected );
4784 if (GikoSys.Setting.StoredTaskTray) then begin
4791 USER_DOCUMENTCOMPLETE:
4792 if (Message.WParam <> 0) and
4793 (TObject(Message.WParam) is TWebBrowser) then begin
4794 senderBrowser := TWebBrowser( Message.WParam );
4795 BrowserDocumentComplete( senderBrowser, senderBrowser.Parent, url );
4804 procedure TGikoForm.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
4809 //
\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Í
4810 //
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82È
\82Ç
\82ð
\96³
\8cø
\82É
\82·
\82é
4811 if ((FavoriteTreeView.Visible) and (FavoriteTreeView.IsEditing)) then begin
4812 if Msg.CharCode in [VK_BACK] then begin
4813 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4814 if Msg.KeyData > 0 then begin
4817 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4821 //
\82¨
\8bC
\82É
\93ü
\82è
\82ÍESC
\82Å
\92E
\8fo
\82µ
\82½
\82¢
\82Ì
\82Å
\81A
\82»
\82ê
\82à
\91\97\82é
4822 if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT, VK_ESCAPE] then begin
4825 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4828 end else if (AddressComboBox.Focused) or (SelectComboBox.Focused) then begin
4829 if Msg.CharCode in [VK_BACK] then begin
4830 //BS
\82ª
\82Q
\89ñ
\91\97\82ç
\82ê
\82é
\95s
\8bï
\8d\87\89ñ
\94ð
4831 if Msg.KeyData > 0 then begin
4834 SendMessage(handle, WM_CHAR, Msg.CharCode, Msg.KeyData);
4837 end else if Msg.CharCode in [VK_INSERT, VK_DELETE, VK_HOME, VK_END, VK_PRIOR, VK_NEXT] then begin
4840 SendMessage(handle, WM_KEYDOWN, Msg.CharCode, Msg.KeyData);
4844 Handled := GikoDM.GikoFormActionList.IsShortCut(Msg);
4848 procedure TGikoForm.PreviewTimerTimer(Sender: TObject);
4853 PreviewTimer.Enabled := False;
4857 ARect := FPreviewBrowser.GetWindowRect(p);
4859 FPreviewBrowser.PreviewImage(FPreviewURL);
4861 if ARect.Bottom > Screen.DesktopHeight then begin
4862 OffsetRect(ARect, 0, -(ARect.Bottom - Screen.DesktopHeight));
4864 if (ARect.Right > Screen.DesktopWidth) then begin
4865 OffsetRect(ARect, -(ARect.Right - Screen.DesktopWidth), 0);
4867 if (ARect.Left < Screen.DesktopLeft) then begin
4868 OffsetRect(ARect, +(Screen.DesktopLeft - ARect.Left), 0);
4870 if (ARect.Top < Screen.DesktopTop) then begin
4871 OffsetRect(ARect, 0, (Screen.DesktopTop - ARect.Top));
4874 SetWindowPos(FPreviewBrowser.Handle, HWND_TOPMOST,
4875 ARect.Left, ARect.Top,
4876 (ARect.Right - ARect.Left), (ARect.Bottom - ARect.Top),
4877 SWP_NOACTIVATE or SWP_HIDEWINDOW);
4879 ShowWindow(FPreviewBrowser.Handle, SW_SHOWNOACTIVATE);
4880 FPreviewBrowserRect := ARect;
4883 procedure TGikoForm.WMSetCursor(var Message: TWMSetCursor);
4887 if PreviewTimer.Enabled then
4888 PreviewTimer.Enabled := False;
4890 if (FResPopupBrowser <> nil) and (IsWindowVisible(FResPopupBrowser.Handle)) then begin
4891 FResPopupBrowser.Clear;
4894 if (FPreviewBrowser <> nil)
4895 and (IsWindowVisible(FPreviewBrowser.Handle)) then begin
4896 //
\82±
\82±
\82Å
\8fÁ
\82³
\82ê
\82é
\82Ì
\82ª
\96â
\91è
4897 //
\82½
\82Ô
\82ñ
\82±
\82ê
\82Å
\95\
\8e¦
\94Í
\88Í
\94»
\92è
\82Å
\82«
\82Ä
\82¢
\82é
\82Í
\82¸
4898 Pos := Mouse.CursorPos;
4899 Pos.X := Pos.X + Left;
4900 Pos.Y := Pos.Y + Top;
4901 if (FPreviewBrowserRect.Left > Pos.X) or
4902 (FPreviewBrowserRect.Right < Pos.X) or
4903 (FPreviewBrowserRect.Top > Pos.Y) or
4904 (FPreviewBrowserRect.Bottom < Pos.Y) then begin
4905 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
4909 Message.Result := 1;
4912 procedure TGikoForm.MessageHideButtonClick(Sender: TObject);
4914 GikoDM.MsgBarCloseAction.Execute;
4917 function TGikoForm.OnDocumentContextMenu(Sender: TObject): WordBool;
4919 Doc: IHtmlDocument2;
4920 Range: IHTMLTxtRange;
4923 ThreadItem: TThreadItem;
4926 FactiveContent.IDAnchorPopup('');
4927 Doc := FactiveContent.Browser.Document as IHtmlDocument2;
4928 if Assigned(Doc) then begin
4929 Range := Doc.selection.createRange as IHTMLTxtRange;
4930 s := CustomStringReplace(Range.text, '
\81@', ' ');//
\91S
\8ap
\8bó
\94\92\82ð
\94¼
\8ap
\8bó
\94\92\82É
4931 s := ZenToHan(Trim(s));
4932 if GikoSys.IsNumeric(s) then begin
4933 Num := StrToInt64(s);
4934 ThreadItem := GetActiveContent(true);
4935 if (ThreadItem <> nil) and (Num <= ThreadItem.Count)
4936 and (Num > 0)then begin
4937 CreateResPopupBrowser;
4938 FResPopupBrowser.CreateNewBrowser.PopupType := gptThread;
4939 HTMLCreater.SetResPopupText(FResPopupBrowser.CreateNewBrowser, ThreadItem, Num, Num, False, False);
4940 FResPopupBrowser.Popup;
4950 procedure TGikoForm.HistoryAllClearToolButtonClick(Sender: TObject);
4952 DEL_MSG = '
\91S
\97\9a\97ð
\82ð
\8dí
\8f\9c\82µ
\82Ü
\82·
\81B
\82æ
\82ë
\82µ
\82¢
\82Å
\82·
\82©
\81H';
4953 DEL_TITLE = '
\8dí
\8f\9c\8am
\94F';
4955 if FTreeType = gttHistory then begin
4956 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
4957 if MsgBox(Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
4960 TreeView.Items.Clear;
4964 procedure TGikoForm.SetLinkBar;
4968 ToolButton: TLinkToolButton;
4969 MenuItem: TMenuItem;
4970 oldIgnoreResize : TResizeType;
4972 oldIgnoreResize := FIsIgnoreResize;
4973 FIsIgnoreResize := rtResizing;
4974 MainCoolBar.Bands.BeginUpdate;
4976 LinkBarPopupMenu.Items.Clear;
4977 for i := LinkToolBar.ButtonCount - 1 downto 0 do
4978 //LinkToolBar.RemoveControl(LinkToolBar.Buttons[i]);
4979 LinkToolBar.Buttons[i].Free;
4980 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
4981 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
4982 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
4983 ToolButton := TLinkToolButton.Create(LinkToolBar);
4984 // ToolButton.Parent := LinkToolBar;
4985 if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteFolder then begin
4986 MenuItem := TMenuItem.Create(Self);
4987 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], MenuItem);
4988 LinkBarPopupMenu.Items.Add(MenuItem);
4989 ToolButton.MenuItem := MenuItem;
4990 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_FOLDER;
4991 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteBoardItem then begin
4992 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_BOARD;
4993 ToolButton.OnClick := FavoriteClick;
4994 end else if TObject(FavoriteTreeView.Items[i].Item[j].Data) is TFavoriteThreadItem then begin
4995 ToolButton.ImageIndex := GikoDataModule.TOOL_ICON_FAV_THREAD;
4996 ToolButton.OnClick := FavoriteClick;
4998 ToolButton.Caption := FavoriteTreeView.Items[i].Item[j].Text;
4999 ToolButton.Left := 10000;
5000 ToolButton.Data := FavoriteTreeView.Items[i].Item[j].Data;
5001 ToolButton.AutoSize := True;
5002 ToolButton.OnDragDrop := LinkToolButtonDragDrop;
5003 ToolButton.OnDragOver := FavoriteDragOver;
5004 ToolButton.OnMouseDown := LinkToolButtonOnMouseDown;
5005 ToolButton.OnMouseMove := LinkToolButtonOnMouseMove;
5006 ToolButton.OnMouseUp := LinkToolButtonOnMouseUp;
5007 ToolButton.OnStartDrag := LinkToolButtonStartDrag;
5008 //ToolButton.DragMode := dmAutomatic;
5009 ToolButton.DragMode := dmManual;
5010 ToolButton.PopupMenu := FavoriteTreePopupMenu;
5012 LinkToolBar.InsertControl(ToolButton);
5017 { if LinkToolBar.ButtonCount = 0 then begin
5018 ToolButton := TLinkToolButton.Create(LinkToolBar);
5019 ToolButton.Style := tbsButton;
5020 ToolButton.ImageIndex := -1;
5021 ToolButton.Caption := '';
5022 LinkToolBar.InsertControl(ToolButton);
5025 MainCoolBar.Bands.EndUpdate;
5026 LoadCoolBarSettings;
5027 FIsIgnoreResize := oldIgnoreResize;
5031 procedure TGikoForm.FavoriteDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5039 if Sender = FavoriteTreeView then begin
5040 Node := FavoriteTreeView.GetNodeAt(X, Y);
5045 bound := Node.DisplayRect( False );
5046 height := bound.Bottom - bound.Top;
5047 if (bound.Top + height / 2) <= Y then
5048 Node := FavoriteTreeView.GetNodeAt(X, Y + height);
5053 if Node.IsFirstNode then
5058 if FDropSpaceNode <> nil then
5059 if FDropSpaceNode.AbsoluteIndex = Node.AbsoluteIndex then
5062 if Change then begin
5063 if FDropSpaceNode <> nil then
5064 FDropSpaceNode.Free;
5066 FDropSpaceNode := FavoriteDM.TreeView.Items.AddChildObjectFirst(Node.Parent, '', nil );
5067 FDropSpaceNode.MoveTo( Node, naInsert );
5068 FDropSpaceNode.ImageIndex := -1;
5069 FDropSpaceNode.SelectedIndex := -1;
5073 if Source = FavoriteTreeView then begin
5074 if FavoriteTreeView.Selected = FavoriteTreeView.Items.GetFirstNode then begin
5079 end else if Source = BrowserTab then
5081 else if Source = ListView then
5083 else if Source is TLinkToolButton then
5085 else if Source = TreeView then
5091 procedure TGikoForm.FavoriteTreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
5094 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
5097 procedure TGikoForm.LinkToolButtonStartDrag(Sender: TObject; var DragObject: TDragObject);
5099 // FDragging := true;
5102 procedure TGikoForm.LinkToolButtonDragDrop(Sender, Source: TObject; X, Y: Integer);
5104 SenderNode: TTreeNode;
5105 LinkToolButton: TLinkToolButton;
5108 LinkToolButton := TLinkToolButton( Sender );
5109 SenderNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5110 SenderNode.Selected := False;
5111 FavoriteDragDrop( SenderNode, Source );
5117 procedure TGikoForm.LinkToolButtonOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5119 favButton : TLinkToolButton;
5120 favThreadItem : TFavoriteThreadItem;
5126 if Sender is TLinkToolButton then begin
5127 favButton := TLinkToolButton( Sender );
5128 if TObject( favButton.Data ) is TFavoriteThreadItem then begin
5129 favThreadItem := TFavoriteThreadItem( favButton.Data );
5130 if favThreadItem.Item <> nil then
5131 InsertBrowserTab( favThreadItem.Item, False );
5139 procedure TGikoForm.LinkToolButtonOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
5143 TToolButton( Sender ).DragMode := dmManual;
5144 if ssLeft in Shift then begin
5145 // 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)
5146 if FDragTime = 0 then begin
5147 FDragTime := GetTickCount();
5149 Now := GetTickCount();
5150 if (Now - FDragTime) > 500 then begin
5151 if FDragButton <> TToolButton( Sender ) then begin
5153 FDragButton := TToolButton( Sender );
5154 TToolButton(Sender).BeginDrag(false ,5);
5157 {$IF Defined(debug)}
5158 ShowMessage('Error');
5169 procedure TGikoForm.LinkToolButtonOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5174 function TGikoForm.GetWidthAllToolButton(ToolBar: TToolBar): Integer;
5179 for i := 0 to ToolBar.ButtonCount - 1 do
5180 if ToolBar.Buttons[i].Visible then
5181 Result := Result + ToolBar.Buttons[i].Width;
5184 procedure TGikoForm.MainCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5186 Control : TWinControl;
5189 Control := FindControl(BandInfo^.hwndChild);
5190 if Control = nil then
5193 for i := MainCoolBar.Bands.Count - 1 downto 0 do begin
5194 if MainCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5195 idx := MainCoolBar.Bands[ i ].ID;
5199 Canvas.Font.Handle := GetStockObject( DEFAULT_GUI_FONT );
5200 if (Control = MenuToolBar) or (Control = StdToolBar) then begin
5201 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5202 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5203 BandInfo^.cxMinChild := 0;
5204 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth;
5205 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5206 end else if Control = LinkToolBar then begin
5207 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5208 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5209 BandInfo^.cxMinChild := 0;
5210 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83\8a\83\93\83N' );
5211 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5212 end else begin // AddressToolBar
5213 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5214 BandInfo^.cxMinChild := 0;
5215 BandInfo^.cx := GikoSys.Setting.MainCoolSet[ idx ].FCoolWidth + Canvas.TextWidth( '
\83A
\83h
\83\8c\83X' );
5219 procedure TGikoForm.MainCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5225 ChevronPopupMenu.Items.Clear;
5227 for i := 0 to MainCoolBar.Bands.Count - 1 do begin
5228 if MainCoolBar.Bands[ i ].Visible then begin
5229 if Idx = Int64(RebarChevron^.uBand) then begin
5236 if (Idx >= 0) and (MainCoolBar.Bands.Count > Idx) then begin
5237 if MainCoolBar.Bands[Idx].Control = MenuToolbar then begin
5239 end else if MainCoolBar.Bands[Idx].Control = StdToolbar then begin
5240 ToolBarChevronMenu(StdToolBar);
5241 end else if MainCoolBar.Bands[Idx].Control = LinkToolbar then begin
5245 p := MainCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5246 ChevronPopupMenu.Popup(p.x, p.y);
5250 procedure TGikoForm.MenuBarChevronMenu;
5251 procedure SetSubMenu(MenuItem: TMenuItem; PopupItem: TMenuItem);
5257 for i := 0 to MenuItem.Count - 1 do begin
5259 if MenuItem[i] is TFavoriteMenuItem then begin
5260 Item := TFavoriteMenuItem.Create(Self);
5261 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(MenuItem[i]).Data;
5263 Item := TMenuItem.Create(Self);
5264 Item.Caption := MenuItem[i].Caption;
5265 Item.Action := MenuItem[i].Action;
5266 Item.ImageIndex := MenuItem[i].ImageIndex;
5267 Item.OnClick := MenuItem[i].OnClick;
5268 PopupItem.Add(Item);
5269 if MenuItem[i].Count > 0 then
5270 SetSubMenu(MenuItem[i], Item);
5279 ChevronPopupMenu.Items.Clear;
5280 ChevronPopupMenu.Images := MainMenu.Images;
5281 bw := GetWidthAllToolButton(MenuToolBar);
5282 if MenuToolBar.Width < bw then begin
5284 for i := 0 to MenuToolBar.ButtonCount - 1 do begin
5285 w := w + MenuToolBar.Buttons[i].Width;
5286 if MenuToolBar.Width <= w then begin
5287 Item := TMenuItem.Create(Self);
5288 Item.Caption := MenuToolBar.Buttons[i].MenuItem.Caption;
5289 //Item.Action := MenuToolBar.Buttons[i].MenuItem.Action;
5290 ChevronPopupMenu.Items.Add(Item);
5291 SetSubMenu(MenuToolbar.Buttons[i].MenuItem, Item);
5297 procedure TGikoForm.ToolBarChevronMenu(ToolBar: TToolBar);
5298 procedure SetSubMenu(PopupMenu: TPopupMenu; PopupItem: TMenuItem);
5303 if Assigned(PopupMenu.OnPopup) then
5304 PopupMenu.OnPopup(nil);
5305 for i := 0 to PopupMenu.Items.Count - 1 do begin
5307 if PopupMenu.Items[i] is TFavoriteMenuItem then begin
5308 Item := TFavoriteMenuItem.Create(Self);
5309 TFavoriteMenuItem(Item).Data := TFavoriteMenuItem(PopupMenu.Items[i]).Data;
5311 Item := TMenuItem.Create(Self);
5312 Item.Caption := PopupMenu.Items[i].Caption;
5313 Item.Action := PopupMenu.Items[i].Action;
5314 Item.ImageIndex := PopupMenu.Items[i].ImageIndex;
5315 Item.OnClick := PopupMenu.Items[i].OnClick;
5316 PopupItem.Add(Item);
5325 ChevronPopupMenu.Items.Clear;
5326 ChevronPopupMenu.Images := ToolBar.HotImages;
5327 bw := GetWidthAllToolButton(ToolBar);
5328 if ToolBar.Width < bw then begin
5330 for i := 0 to ToolBar.ButtonCount - 1 do begin
5331 if ToolBar.Buttons[i].Visible then
5332 w := w + ToolBar.Buttons[i].Width;
5333 if ToolBar.Width <= w then begin
5334 if ToolBar.Buttons[i].Tag = 0 then begin
5335 Item := TMenuItem.Create(Self);
5336 if ToolBar.Buttons[i].Style = tbsSeparator then
5339 //
\83X
\83\8c\8di
\8d\9e\82ÝComBox
\82ÌTPanel
\82ð
\94r
\8f\9c\82·
\82é
5340 if TObject(ToolBar.Buttons[i]) is TPanel then begin
5343 Item.Caption := ToolBar.Buttons[i].Caption;
5344 Item.Action := ToolBar.Buttons[i].Action;
5346 //Item.Visible := True;
5348 ChevronPopupMenu.Items.Add(Item);
5349 if ToolBar.Buttons[i].DropdownMenu <> nil then begin
5351 Item.OnClick := nil;
5352 SetSubMenu(ToolBar.Buttons[i].DropdownMenu, Item);
5360 procedure TGikoForm.LinkBarChevronMenu;
5365 Item: TFavoriteMenuItem;
5367 Button: TLinkToolButton;
5369 ChevronPopupMenu.Items.Clear;
5370 ChevronPopupMenu.Images := LinkToolBar.Images;
5371 bw := GetWidthAllToolButton(LinkToolBar);
5372 if LinkToolBar.Width < bw then begin
5374 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
5375 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
5376 for j := 0 to FavoriteTreeView.Items[i].Count - 1 do begin
5377 w := w + LinkToolBar.Buttons[j].Width;
5378 if LinkToolBar.Width <= w then begin
5379 if LinkToolBar.Buttons[j] is TLinkToolButton then begin
5380 Button := TLinkToolButton(LinkToolBar.Buttons[j]);
5381 Item := TFavoriteMenuItem.Create(Self);
5382 if TObject(Button.Data) is TFavoriteFolder then begin
5383 CreateFavMenu(FavoriteTreeView.Items[i].Item[j], Item);
5384 end else if TObject(Button.Data) is TFavoriteBoardItem then begin
5385 Item.OnClick := FavoriteClick;
5386 end else if TObject(Button.Data) is TFavoriteThreadItem then begin
5387 Item.OnClick := FavoriteClick;
5389 Item.Data := Button.Data;
5390 Item.Caption := LinkToolBar.Buttons[j].Caption;
5391 Item.ImageIndex := LinkToolBar.Buttons[j].ImageIndex;
5392 ChevronPopupMenu.Items.Add(Item);
5403 \brief
\83o
\83\93\83h
\95\9d\82ð
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
5404 \param bar
\83o
\83\93\83h
\82ª
\8f\8a\91®
\82·
\82é CoolBar
5405 \param band
\8dÄ
\8cv
\8eZ
\81E
\8dÄ
\90Ý
\92è
\82·
\82é
\83o
\83\93\83h
5407 \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É
5408 \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
5410 procedure TGikoForm.ResetBandInfo( bar : TGikoCoolBar; band : TToolBar );
5412 bandInfo : tagREBARBANDINFOA;
5413 pBandInfo : PReBarBandInfoA;
5420 pBandInfo := @bandInfo;
5421 ZeroMemory( pBandInfo, sizeof( bandInfo ) );
5422 bandInfo.cbSize := sizeof( bandInfo );
5423 bandInfo.hwndChild := h;
5424 bandInfo.cyMinChild := bar.Height;
5425 bar.OnBandInfo( nil, pBandInfo );
5426 // band
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\92T
\82·
5428 for i := bar.Bands.Count - 1 downto 0 do begin
5429 if bar.Bands[ i ].Control.Handle = h then begin
5435 lResult := SendMessage( bar.Handle, RB_SETBANDINFO, idx, Integer( pBandInfo ) );
5439 procedure TGikoForm.ListCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5441 Control: TWinControl;
5444 Control := FindControl(BandInfo^.hwndChild);
5445 if Control = nil then
5448 for i := ListCoolBar.Bands.Count - 1 downto 0 do begin
5449 if ListCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5450 idx := ListCoolBar.Bands[ i ].ID;
5454 if Control = ListToolBar then begin
5455 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5456 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5457 BandInfo^.cxMinChild := 0;
5458 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5459 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5461 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5462 BandInfo^.cxMinChild := 0;
5463 BandInfo^.cx := GikoSys.Setting.ListCoolSet[ idx ].FCoolWidth;
5467 procedure TGikoForm.ListCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5472 ChevronPopupMenu.Items.Clear;
5473 Idx := RebarChevron^.uBand;
5474 if (Idx >= 0) and (ListCoolBar.Bands.Count > Idx) then begin
5475 if ListCoolBar.Bands[Idx].Control = ListToolBar then begin
5476 ToolBarChevronMenu(ListToolBar);
5479 p := ListCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5480 ChevronPopupMenu.Popup(p.x, p.y);
5484 procedure TGikoForm.BrowserCoolBarBandInfo(Sender: TObject; var BandInfo: PReBarBandInfoA);
5486 Control: TWinControl;
5489 Control := FindControl(BandInfo^.hwndChild);
5490 if Control = nil then
5493 for i := BrowserCoolBar.Bands.Count - 1 downto 0 do begin
5494 if BrowserCoolBar.Bands[ i ].Control.Handle = Control.Handle then begin
5495 idx := BrowserCoolBar.Bands[ i ].ID;
5499 if Control = BrowserToolBar then begin
5500 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE or RBBIM_STYLE or RBBIM_IDEALSIZE;
5501 BandInfo^.fStyle := BandInfo.fStyle or RBBS_USECHEVRON;
5502 BandInfo^.cxMinChild := 0;
5503 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5504 BandInfo^.cxIdeal := GetWidthAllToolButton(TToolBar(Control));
5506 BandInfo^.fMask := BandInfo.fMask or RBBIM_CHILDSIZE;
5507 BandInfo^.cxMinChild := 0;
5508 BandInfo^.cx := GikoSys.Setting.BrowserCoolSet[ idx ].FCoolWidth;
5512 procedure TGikoForm.BrowserCoolBarChevronClick(Sender: TObject; RebarChevron: PNMRebarChevron);
5517 ChevronPopupMenu.Items.Clear;
5518 Idx := RebarChevron^.uBand;
5519 if (Idx >= 0) and (BrowserCoolBar.Bands.Count > Idx) then begin
5520 if BrowserCoolBar.Bands[Idx].Control = BrowserToolBar then
5521 ToolBarChevronMenu(BrowserToolBar)
5524 p := BrowserCoolBar.ClientToScreen(Point(RebarChevron^.rc.left, RebarChevron^.rc.bottom));
5525 ChevronPopupMenu.Popup(p.x, p.y);
5529 procedure TGikoForm.ListViewColumnInfo(Sender: TObject; var Column: PLVColumnA);
5531 if Column^.iImage = -1 then begin
5532 Column^.mask := Column^.mask or LVCF_FMT;
5534 Column^.mask := Column^.mask or LVCF_FMT or LVCF_IMAGE;
5535 Column^.fmt := Column^.fmt or LVCFMT_IMAGE or LVCFMT_BITMAP_ON_RIGHT;
5539 function TGikoForm.FindToolBarButton( bar : TToolBar; action : TAction ) : TToolButton;
5544 for i := bar.ButtonCount - 1 downto 0 do begin
5545 if bar.Buttons[ i ].Action = action then begin
5546 Result := bar.Buttons[ i ];
5552 procedure TGikoForm.SetToolBarPopup;
5555 aIEButton : TToolButton;
5556 aCabinetBBSButton : TToolButton;
5557 aResRangeButton : TToolButton;
5558 aThreadRangeButton: TToolButton;
5560 for i := 0 to StdToolBar.ButtonCount - 1 do begin
5562 for i := 0 to ListToolBar.ButtonCount - 1 do begin
5563 if ListToolBar.Buttons[i].Action = GikoDM.IconStyle then
5564 ListToolBar.Buttons[i].DropdownMenu := ListIconPopupMenu;
5565 if ListToolBar.Buttons[i].Action = GikoDM.SelectReservAction then
5566 ListToolBar.Buttons[i].DropdownMenu := RoundNamePopupMenu;
5568 aIEButton := FindToolBarButton( BrowserToolBar, GikoDM.IEAction );
5569 if aIEButton <> nil then
5570 aIEButton.DropdownMenu := BrowserPopupMenu;
5571 aCabinetBBSButton := FindToolBarButton( StdToolBar, GikoDM.CabinetBBSAction );
5572 if aCabinetBBSButton <> nil then
5573 aCabinetBBSButton.DropdownMenu := BBSSelectPopupMenu;
5574 aResRangeButton := FindToolBarButton( BrowserToolBar, GikoDM.ResRangeAction );
5575 if aResRangeButton <> nil then
5576 aResRangeButton.DropdownMenu := ResRangePopupMenu;
5577 aThreadRangeButton:= FindToolBarButton( ListToolBar, GikoDM.ThreadRangeAction );
5578 if aThreadRangeButton <> nil then
5579 aThreadRangeButton.DropdownMenu := ThreadRangePopupMenu;
5582 procedure TGikoForm.FormMouseWheel(Sender: TObject; Shift: TShiftState;
5583 WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
5587 // browserPos : TPoint;
5591 Wnd := WindowFromPoint(Mouse.CursorPos);
5593 if WheelDelta > 0 then
5598 if (Wnd = BrowserTab.Handle) or
5599 (Wnd = BrowserTab.Parent.Handle) then begin
5600 BrowserTab.ScrollTabs(Delta);
5602 if FIsHandledWheel then begin
5603 FIsHandledWheel := False;
5606 FIsHandledWheel := True;
5607 if (Wnd = TreeView.Handle) or (Wnd = FavoriteTreeView.Handle)
5608 or (Wnd = ListView.Handle) or (Wnd = MessageListView.Handle)
5610 SendMessage( Wnd, WM_MOUSEWHEEL, WheelDelta shl 16, (Mouse.CursorPos.X shl 16) or Mouse.CursorPos.Y )
5618 procedure TGikoForm.SetSelectWord( const text : string );
5620 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5621 ClearThreadRengeAction;
5623 if Length( text ) = 0 then
5625 GikoDM.AllItemAction.Checked := True;
5626 SetListViewType( gvtAll )
5628 SetListViewType( gvtUser, text, false );
5632 procedure TGikoForm.SelectComboBoxChange(Sender: TObject);
5635 SetSelectWord( SelectComboBox.Text );
5639 procedure TGikoForm.SelectComboBoxKeyDown(Sender: TObject; var Key: Word;
5640 Shift: TShiftState);
5648 if Key = VK_Return then
5651 end else if Key = 229 then begin
5652 if GikoSys.Setting.UseUndecided then begin
5653 IMC := ImmGetContext(SelectComboBox.Handle); //
\83R
\83\93\83e
\83L
\83X
\83g
\8eæ
\93¾
5654 Len := ImmGetCompositionString(IMC, GCS_COMPSTR, nil, 0); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5655 SetLength(Str, Len + 1); //Buffer
\82Ì
\83\81\83\82\83\8a\82ð
\90Ý
\92è
5656 ImmGetCompositionString(IMC, GCS_COMPSTR, PChar(Str), Len + 1); //
\82Ü
\82¸
\92·
\82³
\82ð
\8eæ
\93¾
5657 ImmReleaseContext(SelectComboBox.Handle, IMC); //
\83R
\83\93\83e
\83L
\83X
\83g
\89ð
\95ú
5658 SetLength(Str, Len);
5659 if SelectComboBox.SelLength > 0 then begin //
\91I
\91ð
\92\86\82Ì
\95¶
\8e\9a\97ñ
\82ª
\82 \82é
\82©
5660 tmp := Copy(SelectComboBox.Text, 1, SelectComboBox.SelStart);
5661 Str := tmp + Str + Copy(SelectComboBox.Text, SelectComboBox.SelStart + SelectComboBox.SelLength + 1, Length(SelectComboBox.Text));
5663 Str := SelectComboBox.Text + Str;
5665 if (Length(Str) > 0) then begin
5669 end else if Length( SelectComboBox.Text ) = 0 then
5671 {* SelectComboBox.Text
\82ª
\8bó
\82Å
\82à
\81A
\93ü
\97Í
\93r
\92\86\82ÅEsc
\82µ
\82½
\82Æ
\82©
5672 *
\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
5673 *
\81i
\82±
\82±
\82Å
\82Í
\89½
\82à
\82µ
\82È
\82¢
\81j
5676 //
\83X
\83\8c\88ê
\97\97\82Ì
\94Í
\88Í
\8ew
\92è
\82ð
\89ð
\8f\9c
5677 ClearThreadRengeAction;
5681 //!
\83X
\83\8c\83b
\83h
\88ê
\97\97\82Ì
\95\
\8e¦
\94Í
\88Í
\90Ý
\92è
\83`
\83F
\83b
\83N
\83N
\83\8a\83A
5682 procedure TGikoForm.ClearThreadRengeAction;
5684 //
\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é
5685 if GikoDM.AllItemAction.Checked then
5686 GikoDM.AllItemAction.Checked := False;
5687 if GikoDM.LogItemAction.Checked then
5688 GikoDM.LogItemAction.Checked := False;
5689 if GikoDM.NewItemAction.Checked then
5690 GikoDM.NewItemaction.Checked := False;
5691 if GikoDM.LiveItemAction.Checked then
5692 GikoDM.LiveItemAction.Checked := False;
5693 if GikoDM.ArchiveItemAction.Checked then
5694 GikoDM.ArchiveItemAction.Checked := False;
5698 procedure TGikoForm.SelectComboBoxExit(Sender: TObject);
5703 if Length( SelectComboBox.Text ) = 0 then
5705 SelectComboBox.Text := GikoDataModule.SELECTCOMBOBOX_NAME;
5706 SelectComboBox.Color := GikoDataModule.SELECTCOMBOBOX_COLOR;
5711 //
\8di
\82è
\8d\9e\82Ý
\8c\9f\8dõ
\82Ì
\97\9a\97ð
\8dX
\90V
5712 procedure TGikoForm.ModifySelectList;
5719 if not SelectComboBoxPanel.Visible then
5722 if Length( SelectComboBox.Text ) > 0 then
5724 oldText := SelectComboBox.Text;
5725 idx := GikoSys.Setting.SelectTextList.IndexOf( oldText );
5727 GikoSys.Setting.SelectTextList.Delete( idx );
5728 idx := SelectComboBox.Items.IndexOf( oldText );
5730 SelectComboBox.Items.Delete( idx );
5731 GikoSys.Setting.SelectTextList.Insert( 0, oldText );
5732 SelectComboBox.Items.Insert( 0, oldText );
5733 SelectComboBox.Text := oldText;
5741 procedure TGikoForm.SelectComboBoxSplitterMouseMove(Sender: TObject;
5742 Shift: TShiftState; X, Y: Integer);
5747 If (SelectComboBoxPanel.Visible) and (IsDraggingSelectComboBox) Then begin
5750 pos := SelectComboBoxSplitter.ClientToScreen( pos );
5751 //w := SelectComboBox.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5752 w := SelectComboBoxPanel.Width + (pos.X - DraggingSelectComboBoxPosition.X);
5754 If w <= 50 Then Begin
5755 //
\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
5756 //
\81u
\8e~
\82Ü
\82Á
\82½(50pixel)
\88Ê
\92u
\81v
\82É
\82È
\82é
\82æ
\82¤
\82É
5757 pos.X := pos.X + (50 - w);
5759 //
\8f¬
\82³
\82
\82È
\82è
\82·
\82¬
\82È
\82¢
\82æ
\82¤
\82É
5763 //
\83`
\83\89\82Â
\82«
\8cy
\8c¸
\82Ì
\88×
5764 //If SelectComboBox.Width <> w Then Begin
5765 If SelectComboBoxPanel.Width <> w Then Begin
5766 SelectComboBoxPanel.Width := w;
5767 SelectComboBox.Width := SelectComboBoxPanel.Width - SelectComboBoxSplitter.Width;
5768 GikoSys.Setting.SelectComboBoxWidth := w;
5769 DraggingSelectComboBoxPosition := pos;
5771 //
\83V
\83F
\83u
\83\8d\83\93\88Ê
\92u
\82ª
\95Ï
\82í
\82é
\82Ì
\82Å BandInfo
\82Ì
\8dÄ
\90Ý
\92è
5772 ResetBandInfo( ListCoolBar, ListToolBar );
5778 procedure TGikoForm.SelectComboBoxSplitterMouseDown(Sender: TObject;
5779 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5783 IsDraggingSelectComboBox := True;
5786 DraggingSelectComboBoxPosition := SelectComboBoxSplitter.ClientToScreen( pos );
5790 procedure TGikoForm.SelectComboBoxSplitterMouseUp(Sender: TObject;
5791 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
5793 IsDraggingSelectComboBox := False;
5797 procedure TGikoForm.StatusBarResize(Sender: TObject);
5799 StatusBar.Panels[1].Width := StatusBar.Width -
5800 StatusBar.Panels[0].Width -
5801 StatusBar.Panels[THREADSIZE_PANEL].Width -
5802 StatusBar.Panels[NGWORDNAME_PANEL].Width;
5804 procedure TGikoForm.SelectComboBoxEnter(Sender: TObject);
5807 if (Length( SelectComboBox.Text ) = 0) or
5808 (SelectComboBox.Text = GikoDataModule.SELECTCOMBOBOX_NAME) then
5810 SelectComboBox.Text := '';
5811 SelectComboBox.Color := clWindow;
5816 procedure TGikoForm.FavoriteMoveTo( SenderNode, SourceNode: TTreeNode );
5819 if (SenderNode = nil) or (SourceNode = nil) or (SenderNode = SourceNode) then
5822 if TObject(SenderNode.Data) is TFavoriteFolder then
5823 SourceNode.MoveTo(SenderNode, naAddChild)
5825 SourceNode.MoveTo(SenderNode, naInsert);
5829 procedure TGikoForm.FavoriteAddTo( SenderNode: TTreeNode; Source: TObject );
5833 FavoBoardItem: TFavoriteBoardItem;
5834 FavoThreadItem: TFavoriteThreadItem;
5836 ThreadItem: TThreadItem;
5839 if (SenderNode = nil) or (Source = nil) then
5842 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5843 FavNode := SenderNode.Parent
5845 FavNode := SenderNode;
5849 if Source is TBoard then begin
5850 Board := TBoard( Source );
5851 FavoBoardItem := TFavoriteBoardItem.CreateWithItem( Board );
5852 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, FavoBoardItem);
5853 Node.ImageIndex := 15;
5854 Node.SelectedIndex := 15;
5855 end else if Source is TFavoriteBoardItem then begin
5856 FavoBoardItem := TFavoriteBoardItem( Source );
5857 Board := FavoBoardItem.Item;
5858 if Board <> nil then
5859 if not Board.IsThreadDatRead then
5860 GikoSys.ReadSubjectFile(Board);
5861 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, Board.Title, Source);
5862 Node.ImageIndex := 15;
5863 Node.SelectedIndex := 15;
5864 end else if Source is TThreadItem then begin
5865 ThreadItem := TThreadItem( Source );
5866 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5867 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5868 Node.ImageIndex := 16;
5869 Node.SelectedIndex := 16;
5870 end else if Source is TBrowserRecord then begin
5871 ThreadItem := TBrowserRecord( Source ).Thread;
5872 FavoThreadItem := TFavoriteThreadItem.CreateWithItem( ThreadItem );
5873 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, FavoThreadItem);
5874 Node.ImageIndex := 16;
5875 Node.SelectedIndex := 16;
5876 end else if Source is TFavoriteThreadItem then begin
5877 FavoThreadItem := TFavoriteThreadItem( Source );
5878 ThreadItem := FavoThreadItem.Item;
5879 Node := FavoriteDM.TreeView.Items.AddChildObject(FavNode, ThreadItem.Title, Source);
5880 Node.ImageIndex := 16;
5881 Node.SelectedIndex := 16;
5884 if not (TObject(SenderNode.Data) is TFavoriteFolder) then
5886 FavoriteMoveTo( SenderNode, Node );
5890 procedure TGikoForm.FavoriteDragDrop( SenderNode: TTreeNode; Source: TObject );
5893 SourceNode: TTreeNode;
5894 LinkToolButton: TLinkToolButton;
5897 if SenderNode = nil then
5900 if not (TObject( SenderNode.Data ) is TFavoriteFolder) then
5901 if FDropSpaceNode <> nil then
5902 SenderNode := FDropSpaceNode;
5904 if Source = FavoriteTreeView then begin
5905 SourceNode := FavoriteTreeView.Selected;
5906 FavoriteMoveTo( SenderNode, SourceNode );
5907 end else if Source is TLinkToolButton then begin
5908 LinkToolButton := TLinkToolButton( Source );
5909 SourceNode := TreeNodeDataFind( FavoriteTreeView.Items.GetFirstNode, LinkToolButton.Data );
5910 FavoriteMoveTo( SenderNode, SourceNode );
5911 end else if Source = BrowserTab then begin
5912 idx := BrowserTab.TabIndex;
5913 FavoriteAddTo( SenderNode, BrowserTab.Tabs.Objects[idx] );
5914 end else if Source = ListView then begin
5915 FavoriteAddTo( SenderNode, ListView.Selected.Data );
5916 end else if Source = TreeView then begin
5917 FavoriteAddTo( SenderNode, TreeView.Selected.Data );
5921 procedure TGikoForm.FavoriteTreeViewDragDrop(Sender, Source: TObject; X,
5924 SenderNode: TTreeNode;
5927 SenderNode := FavoriteTreeView.GetNodeAt(X, Y);
5928 if SenderNode <> nil then begin
5929 FavoriteDragDrop( SenderNode, Source );
5932 //
\8bó
\94\92\8d\80\96Ú
\82ª
\82¢
\82½
\82ç
\8dí
\8f\9c\82·
\82é
5933 if FDropSpaceNode <> nil then begin
5935 FDropSpaceNode.Delete;
5937 FDropSpaceNode := nil;
5940 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5941 FavoriteDM.Modified := true;
5947 procedure TGikoForm.FavoriteTreeViewEdited(Sender: TObject;
5948 Node: TTreeNode; var S: String);
5950 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
5951 FavoriteDM.Modified := true;
5953 FavoriteTreeView.ReadOnly := True;
5958 procedure TGikoForm.FavoriteTreeViewKeyDown(Sender: TObject; var Key: Word;
5959 Shift: TShiftState);
5961 if not TTreeView(Sender).IsEditing then begin
5965 FClickNode := FavoriteTreeView.Selected;
5966 GikoDM.FavoriteTreeViewRenameActionExecute( Sender );
5970 FClickNode := FavoriteTreeView.Selected;
5971 GikoDM.FavoriteTreeViewDeleteActionExecute( Sender );
5975 FavoriteClick( FavoriteTreeView.Selected );
5976 FavoriteTreeView.Selected.Expanded := not FavoriteTreeView.Selected.Expanded;
5980 FClickNode := FavoriteTreeView.Selected;
5981 GikoDM.FavoriteTreeViewReloadActionExecute( Sender );
5985 //
\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·
5986 if Key = VK_ESCAPE then begin
5987 if (TTreeView(Sender).Selected <> nil) then begin
5988 TTreeView(Sender).Selected.Text := FOrigenCaption;
5990 TTreeView(Sender).Selected.Focused := False;
5996 procedure TGikoForm.FavoriteTreePopupMenuPopup(Sender: TObject);
5999 LinkToolButton: TLinkToolButton;
6002 if FavoriteTreePopupMenu.PopupComponent = FavoriteTreeView then begin
6004 FClickNode := FavoriteTreeView.Selected;
6006 end else if FavoriteTreePopupMenu.PopupComponent is TLinkToolButton then begin
6008 LinkToolButton := TLinkToolButton( FavoriteTreePopupMenu.PopupComponent );
6009 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6010 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6011 FClickNode := FavoriteTreeView.Items[i];
6015 for i := 0 to FClickNode.Count - 1 do begin
6016 if FClickNode.Item[i].Data = LinkToolButton.Data then begin
6017 FClickNode := FClickNode.Item[i];
6024 if FClickNode = nil then begin
6025 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6026 FavoriteTreeDeletePopupMenu.Visible := False;
6027 FavoriteTreeRenamePopupMenu.Visible := False;
6028 FavoriteTreeNewFolderPopupMenu.Visible := False;
6029 FavoriteTreeURLCopyPopupMenu.Visible := False;
6030 FavoriteTreeNameCopyPopupMenu.Visible := False;
6031 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6032 FavoriteTreeReloadPopupMenu.Visible := False;
6033 FavoriteTreeLogDeletePopupMenu.Visible := False;
6034 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6035 end else if FClickNode.IsFirstNode then begin
6036 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6037 FavoriteTreeDeletePopupMenu.Visible := False;
6038 FavoriteTreeRenamePopupMenu.Visible := False;
6039 FavoriteTreeNewFolderPopupMenu.Visible := True;
6040 FavoriteTreeURLCopyPopupMenu.Visible := False;
6041 FavoriteTreeNameCopyPopupMenu.Visible := False;
6042 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6043 FavoriteTreeReloadPopupMenu.Visible := False;
6044 FavoriteTreeLogDeletePopupMenu.Visible := False;
6045 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6046 end else if FClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
6047 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6048 FavoriteTreeDeletePopupMenu.Visible := True;
6049 FavoriteTreeRenamePopupMenu.Visible := False;
6050 FavoriteTreeNewFolderPopupMenu.Visible := True;
6051 FavoriteTreeURLCopyPopupMenu.Visible := False;
6052 FavoriteTreeNameCopyPopupMenu.Visible := False;
6053 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6054 FavoriteTreeReloadPopupMenu.Visible := False;
6055 FavoriteTreeLogDeletePopupMenu.Visible := False;
6056 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6057 end else if TObject(FClickNode.Data) is TFavoriteFolder then begin
6058 FavoriteTreeBrowseFolderPopupMenu.Visible := True;
6059 FavoriteTreeDeletePopupMenu.Visible := True;
6060 FavoriteTreeRenamePopupMenu.Visible := True;
6061 FavoriteTreeNewFolderPopupMenu.Visible := True;
6062 FavoriteTreeURLCopyPopupMenu.Visible := False;
6063 FavoriteTreeNameCopyPopupMenu.Visible := True;
6064 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6065 FavoriteTreeReloadPopupMenu.Visible := False;
6066 FavoriteTreeLogDeletePopupMenu.Visible := False;
6067 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6068 end else if TObject(FClickNode.Data) is TFavoriteThreadItem then begin
6069 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6070 FavoriteTreeDeletePopupMenu.Visible := True;
6071 FavoriteTreeRenamePopupMenu.Visible := True;
6072 FavoriteTreeNewFolderPopupMenu.Visible := True;
6073 FavoriteTreeURLCopyPopupMenu.Visible := True;
6074 FavoriteTreeNameCopyPopupMenu.Visible := True;
6075 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6076 FavoriteTreeReloadPopupMenu.Visible := True;
6077 FavoriteTreeLogDeletePopupMenu.Visible := True;
6078 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6079 end else if TObject(FClickNode.Data) is TFavoriteBoardItem then begin
6080 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6081 FavoriteTreeDeletePopupMenu.Visible := True;
6082 FavoriteTreeRenamePopupMenu.Visible := True;
6083 FavoriteTreeNewFolderPopupMenu.Visible := True;
6084 FavoriteTreeURLCopyPopupMenu.Visible := True;
6085 FavoriteTreeNameCopyPopupMenu.Visible := True;
6086 FavoriteTreeNameURLCopyPopupMenu.Visible := True;
6087 FavoriteTreeReloadPopupMenu.Visible := True;
6088 FavoriteTreeLogDeletePopupMenu.Visible := False;
6089 FavoriteTreeItemNameCopyPopupMenu.Visible := True;
6091 FavoriteTreeBrowseFolderPopupMenu.Visible := False;
6092 FavoriteTreeDeletePopupMenu.Visible := False;
6093 FavoriteTreeRenamePopupMenu.Visible := False;
6094 FavoriteTreeNewFolderPopupMenu.Visible := False;
6095 FavoriteTreeURLCopyPopupMenu.Visible := False;
6096 FavoriteTreeNameCopyPopupMenu.Visible := False;
6097 FavoriteTreeNameURLCopyPopupMenu.Visible := False;
6098 FavoriteTreeReloadPopupMenu.Visible := False;
6099 FavoriteTreeLogDeletePopupMenu.Visible := False;
6100 FavoriteTreeItemNameCopyPopupMenu.Visible := False;
6105 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
6110 if not (TObject(node.Data) is TFavoriteFolder) then
6113 for i := 0 to node.Count - 1 do
6115 if TObject(node.Item[i].Data) is TFavoriteFolder then
6116 FavoriteBrowseFolder( node.Item[i] )
6117 else if TObject(node.Item[i].Data) is TFavoriteThreadItem then
6118 FavoriteClick( node.Item[i], False );
6122 function TGikoForm.TreeNodeDataFind(Node: TTreeNode; FindPointer: Pointer): TTreeNode;
6128 for i := 0 to Node.Count - 1 do begin
6129 if Node.Item[i].Data = FindPointer then begin
6130 Result := Node.Item[i];
6132 end else if Node.Item[i].Count > 0 then begin
6133 Found := TreeNodeDataFind( Node.Item[i], FindPointer );
6134 if Found <> nil then begin
6145 procedure TGikoForm.LinkToolBarDragDrop(Sender, Source: TObject; X,
6149 SenderNode: TTreeNode;
6153 for i := 0 to FavoriteTreeView.Items.Count - 1 do begin
6154 if FavoriteTreeView.Items[i].Text = Favorite.FAVORITE_LINK_NAME then begin
6155 SenderNode := FavoriteTreeView.Items[i];
6159 SenderNode.Selected := False;
6161 FavoriteDragDrop( SenderNode, Source );
6166 procedure TGikoForm.BrowserTabMouseUp(Sender: TObject;
6167 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6169 if FDragWFirst = true then
6170 FDragWFirst := false;
6172 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6173 if GikoSys.Setting.ListWidthState = glsMin then begin
6174 GikoDM.BrowserMaxAndFocusAction.Execute;
6177 if GikoSys.Setting.ListHeightState = glsMin then begin
6178 GikoDM.BrowserMaxAndFocusAction.Execute;
6183 procedure TGikoForm.LinkToolBarDragOver(Sender, Source: TObject; X,
6184 Y: Integer; State: TDragState; var Accept: Boolean);
6187 FavoriteDragOver( Sender, Source, X, Y, State, Accept );
6191 procedure TGikoForm.FavoriteTreeViewEndDrag(Sender, Target: TObject; X,
6195 if FDropSpaceNode <> nil then begin
6197 FDropSpaceNode.Delete;
6199 FDropSpaceNode := nil;
6201 //
\8dX
\90V
\82µ
\82½
\82±
\82Æ
\82ð
\8b³
\82¦
\82é
6202 FavoriteDM.Modified := true;
6208 procedure TGikoForm.SetListViewBackGroundColor(value: TColor);
6210 if FListViewBackGroundColor <> value then begin
6211 FListViewBackGroundColor := value;
6212 ListView.Color := FListViewBackGroundColor;
6215 procedure TGikoForm.FavoriteTreeBrowseBoardPopupMenuClick(Sender: TObject);
6217 threadItem : TThreadItem;
6221 if FClickNode = nil then Exit;
6223 if (TObject(FClickNode.Data) is TFavoriteThreadItem) then begin
6225 threadItem := TFavoriteThreadItem( FClickNode.Data ).Item;
6226 if threadItem = nil then
6228 GikoSys.OpenBrowser( threadItem.ParentBoard.URL, gbtAuto );
6230 end else if (TObject(FClickNode.Data) is TFavoriteBoardItem) then begin
6232 boardItem := TFavoriteBoardItem( FClickNode.Data ).Item;
6233 if boardItem = nil then
6235 GikoSys.OpenBrowser( boardItem.URL, gbtAuto );
6241 procedure TGikoForm.BrowserTabContextPopup(Sender: TObject;
6242 MousePos: TPoint; var Handled: Boolean);
6246 idx := BrowserTab.IndexOfTabAt(MousePos.X, MousePos.Y);
6247 if BrowserTab.TabIndex <> idx then begin
6248 BrowserTab.TabIndex := idx;
6249 BrowserTab.OnChange(nil);
6253 procedure TGikoForm.KonoresCopy(Number: Integer; ReplaceTag : Boolean);
6255 ThreadItem: TThreadItem;
6261 boardPlugIn : TBoardPlugIn;
6263 if Number = 0 then Exit;
6264 ThreadItem := GetActiveContent(True);
6266 if ThreadItem <> nil then begin
6267 //if ThreadItem.IsBoardPlugInAvailable then begin
6268 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6269 //=====
\83v
\83\89\83O
\83C
\83\93\82É
\82æ
\82é
\95\
\8e¦
6270 //boardPlugIn := ThreadItem.BoardPlugIn;
6271 boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
6273 //
\83t
\83H
\83\93\83g
\82â
\83T
\83C
\83Y
\82Ì
\90Ý
\92è
6274 //
\95¶
\8e\9a\83R
\81[
\83h
\82Í
\83v
\83\89\83O
\83C
\83\93\82É
\94C
\82¹
\82é
6275 //
\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
6276 tmp := boardPlugIn.GetDat( DWORD( threadItem ), Number );
6278 FileName := ThreadItem.FilePath;
6279 tmp := GikoSys.ReadThreadFile(FileName, Number);
6281 if tmp <> '' then begin
6282 THTMLCreate.DivideStrLine(tmp, @Res);
6284 Header := IntToStr(Number) + '
\81F' + Res.FName + '
\81F' + Res.FDateTime + #13#10;
6285 if ReplaceTag then begin
6286 Header := CustomStringReplace(Header, '</b>', '',true);
6287 Header := CustomStringReplace(Header, '<b>', '',true);
6288 Header := CustomStringReplace(Header, '<br>', '',true);
6289 Header := DeleteFontTag(Header);
6291 //if ThreadItem.IsBoardPlugInAvailable then begin
6292 if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
6293 Body := CustomStringReplace(Res.FBody, '<br>', #13#10,true);
6294 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6296 Body := CustomStringReplace(Res.FBody, ' <br> ', #13#10,true);
6297 Body := CustomStringReplace(Body, ' <br>', #13#10,true);
6298 Body := CustomStringReplace(Body, '<br> ', #13#10,true);
6299 Body := CustomStringReplace(Body, '<br>', #13#10,true);
6302 Body := CustomStringReplace(Body, '</a>', '',true);
6304 Body := HTMLCreater.DeleteLink(Body);
6305 if ReplaceTag then begin
6306 Body := CustomStringReplace(Body, '<', '<');
6307 Body := CustomStringReplace(Body, '>', '>');
6308 Body := CustomStringReplace(Body, '"', '"');
6309 Body := CustomStringReplace(Body, '&', '&');
6310 //Body := CustomStringReplace(Body, ' ', ' ');
6313 Header := Header + Body;
6315 Clipboard.SetTextBuf( PChar(Header) );
6321 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
6323 AddRoundNameMenu(dummy1);
6324 AddMenuSameBoardThread;
6326 //!
\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Á
6327 procedure TGikoForm.AddMenuSameBoardThread;
6332 SameBoardThreadItem.Clear;
6333 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6334 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6335 if (FActiveContent.Thread.ParentBoard =
6336 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6337 //
\8e©
\95ª
\82Í
\8aO
\82·
6338 if FActiveContent.Thread <>
6339 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6340 Item := TMenuItem.Create(Self);
6341 Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
6342 Item.OnClick := SameBoardThreadSubItemOnClick;
6343 SameBoardThreadItem.Add(Item);
6347 //
\89½
\82à
\96³
\82¢
\82È
\82ç
\8eg
\97p
\82Å
\82«
\82È
\82¢
\82æ
\82¤
\82É
\82·
\82é
6348 SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
6350 //!
\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
6351 procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
6354 MenuItem: TMenuItem;
6356 if Sender is TMenuItem then begin
6359 MenuItem := TMenuItem(Sender);
6360 for i := 0 to BrowserTab.Tabs.Count - 1 do begin
6361 //
\93¯
\82¶
\94Â
\82©
\82Ç
\82¤
\82©
6362 if (FActiveContent.Thread.ParentBoard =
6363 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
6364 if FActiveContent.Thread <>
6365 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
6366 if (SameBoardThreadItem.Items[j] = MenuItem) then begin
6367 MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
6379 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
6381 FavoriteDM.URLReplace(oldURLs, newURLs);
6384 procedure TGikoForm.RoundListURLReplace(oldURLs: TStringList; newURLs: TStringList);
6386 RoundList.URLReplace(oldURLs, newURLs);
6389 procedure TGikoForm.TabFileURLReplace(oldURLs: TStringList; newURLs: TStringList);
6391 Filename = 'tab.sav';
6392 bFilename = '~tab.sav';
6398 oldBoardName: string;
6400 newBoardName: string;
6401 TabList: TStringList;
6404 if oldURLs.Count <> newURLs.Count then begin
6407 if FileExists(GikoSys.GetAppDir + 'tab.sav') then begin
6408 TabList := TStringList.Create;
6410 TabList.LoadFromFile(GikoSys.GetAppDir + Filename);
6412 //
\82±
\82±
\82©
\82ç
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6413 //
\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
6414 for i := 0 to oldURLs.Count - 1 do begin
6415 tmpURL := Copy(oldURLs[i], 1, Length(oldURLs[i]) -1);
6416 oldHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6417 oldBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6418 tmpURL := Copy(newURLs[i], 1, Length(newURLs[i]) -1);
6419 newHost := Copy(tmpURL, 1, LastDelimiter('/', tmpURL) );
6420 newBoardName := Copy(tmpURL, LastDelimiter('/', tmpURL), Length(tmpURL) ) + '/';
6422 for j := 0 to TabList.Count - 1 do begin
6423 tempString := TabList[j];
6424 if ( AnsiPos(oldBoardName, tempString) <> 0 ) and ( AnsiPos(oldHost, tempString ) <> 0 ) then begin
6425 tempString := StringReplace(tempString, oldHost, newHost,[]);
6426 TabList[j] := tempString;
6430 //
\82±
\82±
\82Ü
\82Å
\81AThread
\82ÌURL
\82Ì
\95Ï
\8dX
6432 if FileExists( GikoSys.GetAppDir + Filename) then begin
6433 if FileExists( GikoSys.GetAppDir + bFilename) then
6434 DeleteFile(GikoSys.GetAppDir + bFilename);
6436 //
\83o
\83b
\83N
\83A
\83b
\83v
\82ð
\8dì
\82é
\81B
6437 RenameFile(GikoSys.GetAppDir + Filename, GikoSys.GetAppDir + bFilename);
6440 TabList.SaveToFile(GikoSys.GetAppDir + Filename);
6448 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82é
6449 procedure TGikoForm.OnMinimize;
6451 if FActiveContent <> nil then begin
6452 FIsMinimize := mtMinimizing;
6453 FActiveContent.Thread.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
6457 ///
\8dÅ
\8f¬
\89»
\82³
\82ê
\82½ (OnResized
\82©
\82ç
\8cÄ
\82Î
\82ê
\82é)
6458 procedure TGikoForm.OnMinimized;
6460 FIsMinimize := mtMinimized;
6464 procedure TGikoForm.BrowserTabResize(Sender: TObject);
6466 CoolBarResized( Sender, BrowserCoolBar );
6469 // *************************************************************************
6470 // ExternalBoardPlugInMain
6471 //
\83v
\83\89\83O
\83C
\83\93\83\81\83j
\83\85\81[
\82Ì
\8d\80\96Ú
\82ª
\8eÀ
\8ds
\82³
\82ê
\82½
6472 // *************************************************************************
6473 procedure TGikoForm.OnPlugInMenuItem( Sender : TObject );
6476 boardPlugIn : TBoardPlugIn;
6479 if not (Sender is TMenuItem) then
6482 item := TMenuItem( Sender );
6483 if not Assigned( Pointer( item.Tag ) ) then
6486 //
\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·
6487 boardPlugIn := TBoardPlugIn( item.Tag );
6488 boardPlugIn.PlugInMenu( item.Handle );
6491 // TreeView
\82ª
\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6492 procedure TGikoForm.TreeClick( Node : TTreeNode );
6498 if FTreeType = gttHistory then begin
6500 if TObject( Node.Data ) is TFavoriteThreadItem then
6501 if GetActiveContent <> TFavoriteThreadItem( Node.Data ).Item then
6502 FavoriteClick( Node );
6505 //
\8c»
\8dÝ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\82Æ
\93¯
\82¶
\82È
\82ç
\8dÄ
\95`
\89æ
\82µ
\82È
\82¢
6506 if ActiveList = Node.Data then
6509 ActiveListColumnSave;
6511 if TObject(Node.Data) is TBBS then begin
6512 SetActiveList(Node.data);
6513 end else if TObject(Node.Data) is TCategory then begin
6514 SetActiveList(Node.data);
6515 end else if TObject(Node.Data) is TBoard then begin
6516 if not TBoard(Node.Data).IsThreadDatRead then begin
6517 Screen.Cursor := crHourGlass;
6519 if not TBoard(Node.Data).IsThreadDatRead then
6520 GikoSys.ReadSubjectFile(Node.Data);
6522 Screen.Cursor := crDefault;
6525 Sort.SetSortDate(Now());
6526 SetActiveList(Node.data);
6529 if TObject( Node.Data ) is TBoard then begin // not TCategory
6530 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
6531 if GikoSys.Setting.ListWidthState = glsMax then begin
6532 GikoDM.BrowserMinAction.Execute;
6533 if GikoForm.Visible then
6537 if GikoSys.Setting.ListHeightState = glsMax then begin
6538 GikoDM.BrowserMinAction.Execute;
6539 if GikoForm.Visible then
6547 // TreeView
\82ª
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82³
\82ê
\82½
6548 procedure TGikoForm.TreeDoubleClick( Node : TTreeNode );
6551 ThreadItem : TThreadItem;
6552 shiftDown : Boolean;
6555 if Node = nil then Exit;
6557 shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
6559 if FTreeType = gtt2ch then begin
6560 if not (TObject(Node.Data) is TBoard) then Exit;
6561 Board := TBoard(Node.Data);
6562 DownloadList(Board, shiftDown);
6563 end else if FTreeType = gttHistory then begin
6564 if not (TObject(Node.Data) is TFavoriteThreadItem) then Exit;
6565 ThreadItem := TFavoriteThreadItem(Node.Data).Item;
6566 DownloadContent(ThreadItem, shiftDown);
6570 // *************************************************************************
6571 //!
\83c
\83\8a\81[
\83r
\83\85\81[
\82ÌKeyDown
\83C
\83x
\83\93\83g
6572 // *************************************************************************
6573 procedure TGikoForm.TreeViewKeyDown(Sender: TObject; var Key: Word;
6574 Shift: TShiftState);
6576 if Key = VK_BACK then begin
6577 // UpFolderButtonClick(Sender);
6578 end else if Key = VK_SPACE then begin
6579 TreeDoubleClick( TreeView.Selected );
6580 end else if Key = VK_RETURN then begin
6581 TreeClick( TreeView.Selected );
6582 //
\97\9a\97ð
\82Ì
\8fê
\8d\87\81A
\8fÁ
\82³
\82ê
\82Ä
\82¢
\82é
\82Ì
\82Å
\83`
\83F
\83b
\83N
\82·
\82é
6583 if (TreeView.Selected <> nil) then begin
6584 TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
6588 //!
\82¨
\8bC
\82É
\93ü
\82è
\82ÌMouseDown
\83C
\83x
\83\93\83g
6589 procedure TGikoForm.FavoriteTreeViewMouseDown(Sender: TObject;
6590 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
6592 favItem : TTreeNode;
6593 favThreadItem : TFavoriteThreadItem;
6599 if not (ssAlt in Shift) and (FavoriteTreeView.Selected <> nil) and
6600 (FavoriteTreeView.Selected = FavoriteTreeView.GetNodeAt(X, Y)) then begin
6601 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
6602 rect := FavoriteTreeView.Selected.DisplayRect(true);
6603 //
\83A
\83C
\83R
\83\93\95ª
\8d¶
\82É
\82¸
\82ç
\82·
6604 if ((rect.Left - FavoriteTreeView.Indent <= X) and (rect.Right >= X)) and
6605 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
6606 if ssDouble in Shift then begin
6607 FClickNode := FavoriteTreeView.Selected;
6608 GikoDM.FavoriteTreeViewReloadActionExecute(Sender);
6612 TObject(FavoriteTreeView.Selected));
6619 favItem := FavoriteTreeView.GetNodeAt( X, Y );
6620 if favItem = nil then Exit;
6622 if TObject( favItem.Data ) is TFavoriteThreadItem then begin
6623 favThreadItem := TFavoriteThreadItem( favItem.Data );
6624 if favThreadItem.Item <> nil then
6625 InsertBrowserTab( favThreadItem.Item, False );
6632 procedure TGikoForm.MessagePanelResize(Sender: TObject);
6635 if FIsIgnoreResize <> rtNone then
6638 if GikoSys.Setting.ListOrientation = gloVertical then begin
6639 if GikoSys.Setting.ListHeightState = glsMin then begin
6640 //
\8dÅ
\8f¬
\95\
\8e¦
\82É
\82·
\82é
6641 ViewPanel.Height := ThreadMainPanel.Height - BrowserCoolBar.Height - 7;
6647 procedure TGikoForm.OnResized;
6652 FOldFormWidth := Width;
6653 FIsIgnoreResize := rtNone;
6658 //
\8dÅ
\8f¬
\89»
\92\86\82Å
\82 \82é
6659 PostMessage( Handle, USER_MINIMIZED, 0, 0 );
6664 //
\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)
6665 if FActiveContent <> nil then begin
6666 doc := Idispatch( olevariant(FActiveContent.Browser.ControlInterface).Document) as IHTMLDocument2;
6667 doc.Body.ScrollTop := FActiveContent.Thread.ScrollTop;
6669 FIsMinimize := mtNone;
6674 // *************************************************************************
6675 //!
\83X
\83\8c\83b
\83h
\83u
\83\89\83E
\83U
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6676 // *************************************************************************
6677 function TGikoForm.WebBrowserClick(Sender: TObject): WordBool;
6684 stlist : TStringList;
6688 FOleInPlaceActiveObject: IOleInPlaceActiveObject;
6692 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then
6693 FOleInPlaceActiveObject := FActiveContent.Browser.ControlInterface as IOleInPlaceActiveObject;
6694 FOleInPlaceActiveObject.OnFrameWindowActivate(True);
6697 p.x := p.x - FActiveContent.Browser.ClientOrigin.x;
6698 p.y := p.y - FActiveContent.Browser.ClientOrigin.y;
6699 e := IHTMLDocument2(FActiveContent.Browser.Document).elementFromPoint(p.x, p.y);
6700 if (Assigned(e)) then begin
6701 if (e.className = 'date') or (e.id = 'date') then begin
6703 if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
6704 AID := Copy(AID, AnsiPos('id', AnsiLowerCase(AID)) - 1, 11);
6705 if AnsiPos(' be:', AnsiLowerCase(AID)) > 0 then begin
6706 AID := Copy(AID, 1, AnsiPos(' BE:', AnsiLowerCase(AID)) - 1)
6709 stlist := TStringList.Create;
6711 stList.DelimitedText := AID;
6713 for i := 0 to stList.Count - 1 do
6714 if Length(WideString(stList[i])) = 8 then begin
6715 if GikoSys.NotDateorTimeString(stList[i]) then begin
6724 count := GikoSys.GetSameIDResCount(AID, FActiveContent.Thread);
6726 if not (GikoSys.Setting.LimitResCountMessage) then begin
6728 end else if (count > LIMIT) then begin
6729 if (GikoUtil.MsgBox(Handle,
6730 IntToStr(LIMIT) + '
\8cÂ
\88È
\8fã
\82 \82è
\82Ü
\82·
\82ª
\81A
\82·
\82×
\82Ä
\95\
\8e¦
\82µ
\82Ü
\82·
\82©
\81H',
6731 'ID
\83|
\83b
\83v
\83A
\83b
\83v
\8cx
\8d\90',
6732 MB_YESNO or MB_ICONQUESTION) = ID_YES) then begin
6736 body := GikoSys.GetSameIDResAnchor(AID, FActiveContent.Thread, limited);
6737 FActiveContent.IDAnchorPopup(body);
6746 //
\83X
\83\8c\83b
\83h
\88ê
\97\97\82ð
\8dÅ
\91å
\89»
\82µ
\82Ä
\83t
\83H
\81[
\83J
\83X
\82ð
\93\96\82Ä
\82é
6747 procedure TGikoForm.SelectTimerTimer(Sender: TObject);
6749 SelectTimer.Interval := 0;
6750 if not (ListView.Selected = nil) then
6751 if( FActiveContent = nil) or
6752 (GetActiveContent <> TThreadItem(ListView.Selected.Data) ) then begin
6757 /// ListView
\82Ì
\83J
\83\89\83\80\95\9d\82¨
\82æ
\82Ñ
\88Ê
\92u
\82Ì
\95Û
\91¶
6758 procedure TGikoForm.ActiveListColumnSave;
6760 ActivListObj : TObject;
6761 i, id, idx : Integer;
6762 BBSOrder : TGikoBBSColumnList;
6763 CategoryOrder : TGikoCategoryColumnList;
6764 BoardOrder : TGikoBoardColumnList;
6767 ActivListObj := ActiveList;
6768 if ActivListObj is TBBS then begin
6769 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6770 BBSOrder := TGikoBBSColumnList.Create;
6772 for i := 0 to ListView.Columns.Count - 1 do begin
6773 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6774 idx := ListView.Column[ i ].Tag;
6775 id := Ord( GikoSys.Setting.BBSColumnOrder[ idx ] );
6776 BBSOrder.Add( TGikoBBSColumnID( id ) );
6777 //
\95\9d\82Ì
\95Û
\91¶
6778 GikoSys.Setting.BBSColumnWidth[ id ] := ListView.Column[ i ].Width;
6780 for i := 0 to ListView.Columns.Count - 1 do
6781 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6782 GikoSys.Setting.BBSColumnOrder[ i ] := BBSOrder[ i ];
6786 end else if ActivListObj is TCategory then begin
6787 //=====
\94Â
\83\8a\83X
\83g =====
6788 CategoryOrder := TGikoCategoryColumnList.Create;
6790 for i := 0 to ListView.Columns.Count - 1 do begin
6791 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6792 idx := ListView.Column[ i ].Tag;
6793 id := Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] );
6794 CategoryOrder.Add( TGikoCategoryColumnID( id ) );
6795 //
\95\9d\82Ì
\95Û
\91¶
6796 GikoSys.Setting.CategoryColumnWidth[ id ] := ListView.Column[ i ].Width;
6798 for i := 0 to ListView.Columns.Count - 1 do
6799 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6800 GikoSys.Setting.CategoryColumnOrder[ i ] := CategoryOrder[ i ];
6804 end else if ActivListObj is TBoard then begin
6805 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6806 BoardOrder := TGikoBoardColumnList.Create;
6808 for i := 0 to ListView.Columns.Count - 1 do begin
6809 //
\8f\87\8f\98\82Ì
\8eæ
\93¾
6810 idx := ListView.Column[ i ].Tag;
6811 id := Ord( GikoSys.Setting.BoardColumnOrder[ idx ] );
6812 BoardOrder.Add( TGikoBoardColumnID( id ) );
6813 //
\95\9d\82Ì
\95Û
\91¶
6814 GikoSys.Setting.BoardColumnWidth[ id ] := ListView.Column[ i ].Width;
6816 for i := 0 to ListView.Columns.Count - 1 do
6817 //
\8f\87\8f\98\82Ì
\95Û
\91¶
6818 GikoSys.Setting.BoardColumnOrder[ i ] := BoardOrder[ i ];
6826 procedure TGikoForm.ListViewColumnRightClick(Sender: TObject;
6827 Column: TListColumn; Point: TPoint);
6833 //
\83|
\83b
\83v
\83A
\83b
\83v
\83\81\83j
\83\85\81[
\82ð
\83N
\83\8a\83A
6834 for i := ListColumnPopupMenu.Items.Count - 1 downto 0 do
6835 ListColumnPopupMenu.Items.Items[ i ].Free;
6837 //
\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¢)
6838 if TObject( FActiveList ) is TBBS then begin
6840 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
6841 for i := 1 to Length( GikoBBSColumnCaption ) - 1 do begin
6842 item := TMenuItem.Create( ListColumnPopupMenu );
6843 item.Caption := GikoBBSColumnCaption[ i ];
6845 item.OnClick := ListColumnPopupMenuOnClick;
6846 for j := GikoSys.Setting.BBSColumnOrder.Count - 1 downto 0 do begin
6847 if GikoSys.Setting.BBSColumnOrder[ j ] = TGikoBBSColumnID( i ) then begin
6848 item.Checked := True;
6852 ListColumnPopupMenu.Items.Add( item );
6855 end else if TObject( FActiveList ) is TCategory then begin
6857 //=====
\94Â
\83\8a\83X
\83g =====
6858 for i := 1 to Length( GikoCategoryColumnCaption ) - 1 do begin
6859 item := TMenuItem.Create( ListColumnPopupMenu );
6860 item.Caption := GikoCategoryColumnCaption[ i ];
6862 item.OnClick := ListColumnPopupMenuOnClick;
6863 for j := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 0 do begin
6864 if GikoSys.Setting.CategoryColumnOrder[ j ] = TGikoCategoryColumnID( i ) then begin
6865 item.Checked := True;
6869 ListColumnPopupMenu.Items.Add( item );
6872 end else if TObject( FActiveList ) is TBoard then begin
6874 //=====
\83X
\83\8c\83\8a\83X
\83g =====
6875 for i := 1 to Length( GikoBoardColumnCaption ) - 1 do begin
6876 item := TMenuItem.Create( ListColumnPopupMenu );
6877 item.Caption := GikoBoardColumnCaption[ i ];
6879 item.OnClick := ListColumnPopupMenuOnClick;
6880 for j := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 0 do begin
6881 if GikoSys.Setting.BoardColumnOrder[ j ] = TGikoBoardColumnID( i ) then begin
6882 item.Checked := True;
6886 ListColumnPopupMenu.Items.Add( item );
6891 //
\83\81\83j
\83\85\81[
\82Ì
\95\
\8e¦
6892 Point := ListView.ClientToScreen( Point );
6893 if ListColumnPopupMenu.Items.Count > 0 then
6894 ListColumnPopupMenu.Popup( Point.X, Point.Y );
6898 /// ListColumnPopupMenu
\83A
\83C
\83e
\83\80\82Ì
\83N
\83\8a\83b
\83N
\83C
\83x
\83\93\83g
6899 procedure TGikoForm.ListColumnPopupMenuOnClick( Sender : TObject );
6906 if not (Sender is TMenuItem) then
6909 ActiveListColumnSave;
6910 item := TMenuItem( Sender );
6912 if TObject( FActiveList ) is TBBS then
6913 orderList := GikoSys.Setting.BBSColumnOrder
6914 else if TObject( FActiveList ) is TCategory then
6915 orderList := GikoSys.Setting.CategoryColumnOrder
6916 else if TObject( FActiveList ) is TBoard then
6917 orderList := GikoSys.Setting.BoardColumnOrder
6921 if item.Checked then begin
6922 //
\83J
\83\89\83\80\82Ì
\8dí
\8f\9c
6923 for i := orderList.Count - 1 downto 0 do begin
6924 if Integer( orderList[ i ] ) = item.Tag then begin
6925 orderList.Delete( i );
6930 //
\83J
\83\89\83\80\82Ì
\92Ç
\89Á
6931 orderList.Add( Pointer( item.Tag ) );
6934 SetActiveList( FActiveList );
6938 procedure TGikoForm.OnGestureStart(Sender: TObject);
6943 procedure TGikoForm.OnGestureMove(Sender: TObject);
6950 //
\83}
\83E
\83X
\88Ê
\92u
\82Ì
\8eæ
\93¾
6952 //
\83R
\83\93\83|
\81[
\83l
\83\93\83g
\96¼
\8eæ
\93¾
6953 s := MouseGesture.GetGestureStr;
6955 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6956 if Action <> nil then
6957 ActStr := '
\81i' + Action.Caption + '
\81j';
6958 s := '
\83W
\83F
\83X
\83`
\83\83\81[: ' + s + ActStr;
6959 StatusBar.Panels[1].Text := s;
6962 procedure TGikoForm.OnGestureEnd(Sender: TObject);
6967 s := MouseGesture.GetGestureStr;
6969 Action := GikoSys.Setting.Gestures.GetGestureAction(s);
6970 if Action <> nil then
6972 StatusBar.Panels[1].Text := '';
6975 procedure TGikoForm.ListViewCustomDrawItem(Sender: TCustomListView;
6976 Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
6978 ThreadItem: TThreadItem;
6980 DefaultDraw := true;
6981 if TObject(Item.Data) is TThreadItem then begin
6982 ThreadItem := TThreadItem(Item.Data);
6983 if ( FUseOddResOddColor ) and ( ThreadItem.Count <> 0 ) and ( ThreadItem.AllResCount <> ThreadItem.Count) then begin
6984 ListView.Canvas.Brush.Color := FOddColor;
6985 //
\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
6986 if (GikoSys.Setting.UnFocusedBold) and
6987 (Item.Selected) and (not ListView.Focused) then begin
6988 ListView.Canvas.Font.Style := [fsBold];
6991 ListView.Canvas.Brush.Color := FListViewBackGroundColor;
6994 if ThreadItem.UnRead then
6995 ListView.Canvas.Font.Style := [fsBold];
7000 procedure TGikoForm.FormActivate(Sender: TObject);
7002 if GikoSys.Setting.GestureEnabled then begin
7003 GikoSys.Setting.Gestures.ClearGesture;
7004 GikoSys.Setting.Gestures.LoadGesture(
7005 GikoSys.Setting.GetGestureFileName, GikoDM.GikoFormActionList );
7006 MouseGesture.UnHook;
7007 MouseGesture.OnGestureStart := OnGestureStart;
7008 MouseGesture.OnGestureMove := OnGestureMove;
7009 MouseGesture.OnGestureEnd := OnGestureEnd;
7010 MouseGesture.SetHook(Handle);
7012 //MouseGesture.UnHook;
7013 MouseGesture.OnGestureStart := nil;
7014 MouseGesture.OnGestureMove := nil;
7015 MouseGesture.OnGestureEnd := nil;
7019 procedure TGikoForm.BrowserPanelResize(Sender: TObject);
7021 if (FIsMinimize <> mtMinimizing) then begin
7022 if (FActiveContent <> nil) and (FActiveContent.Browser <> nil) then begin
7023 MoveWindow(FActiveContent.Browser.Handle, 0, 0, BrowserPanel.ClientWidth, BrowserPanel.ClientHeight, false);
7027 procedure TGikoForm.CoolBarResized(Sender: TObject; CoolBar: TCoolBar);
7032 affectedBand : TCoolBand;
7035 if (FOldFormWidth = Width) and not IsIconic( Handle ) and (FIsIgnoreResize = rtNone) then begin
7036 FIsIgnoreResize := rtResizing;
7037 PostMessage( Handle, USER_RESIZED, 0, 0 );
7039 //
\95Ï
\8dX
\82³
\82ê
\82½
\83N
\81[
\83\8b\83o
\81[
\82Ì
\92l
\82ð
\95Û
\91¶
7040 if CoolBar = MainCoolBar then begin
7041 for i := 0 to MAIN_COOLBAND_COUNT - 1 do begin
7042 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7043 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7044 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7045 GikoSys.Setting.MainCoolSet[i] := CoolSet;
7047 end else if CoolBar = ListCoolBar then begin
7048 for i := 0 to LIST_COOLBAND_COUNT - 1 do begin
7049 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7050 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7051 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7052 GikoSys.Setting.ListCoolSet[i] := CoolSet;
7054 end else if CoolBar = BrowserCoolBar then begin
7055 for i := 0 to BROWSER_COOLBAND_COUNT - 1 do begin
7056 CoolSet.FCoolID := CoolBar.Bands[i].ID;
7057 CoolSet.FCoolWidth := CoolBar.Bands[i].Width;
7058 CoolSet.FCoolBreak := CoolBar.Bands[i].Break;
7059 GikoSys.Setting.BrowserCoolSet[i] := CoolSet;
7062 if not (Sender is TToolBar) or (CoolBar = nil) then
7064 toolbar := TToolBar( Sender );
7065 //
\95\9d\82Ì
\95Ï
\8dX
\82³
\82ê
\82½
\83o
\83\93\83h
\82ð
\8c©
\82Â
\82¯
\82é
7066 affectedBand := nil;
7067 for i := CoolBar.Bands.Count - 1 downto 0 do begin
7068 if CoolBar.Bands[ i ].Control.Handle = toolbar.Handle then begin
7069 band := CoolBar.Bands[ i ];
7070 if band.Break or (i = 0) then begin
7071 if i + 1 < CoolBar.Bands.Count then
7072 if not CoolBar.Bands[ i + 1 ].Break then
7073 affectedBand := CoolBar.Bands[ i + 1 ];
7076 affectedBand := CoolBar.Bands[ i - 1 ];
7081 //
\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·
7082 if CoolBar = MainCoolBar then begin
7083 coolSet := GikoSys.Setting.MainCoolSet[ band.ID ];
7084 coolSet.FCoolWidth := toolbar.Width + 25;
7085 GikoSys.Setting.MainCoolSet[ band.ID ] := coolSet;
7086 if affectedBand <> nil then begin
7087 coolSet := GikoSys.Setting.MainCoolSet[ affectedBand.ID ];
7088 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7089 GikoSys.Setting.MainCoolSet[ affectedBand.ID ] := coolSet;
7091 end else if CoolBar = ListCoolBar then begin
7092 coolSet := GikoSys.Setting.ListCoolSet[ band.ID ];
7093 coolSet.FCoolWidth := toolbar.Width + 25;
7094 GikoSys.Setting.ListCoolSet[ band.ID ] := coolSet;
7095 if affectedBand <> nil then begin
7096 coolSet := GikoSys.Setting.ListCoolSet[ affectedBand.ID ];
7097 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7098 GikoSys.Setting.ListCoolSet[ affectedBand.ID ] := coolSet;
7100 end else if CoolBar = BrowserCoolBar then begin
7101 coolSet := GikoSys.Setting.BrowserCoolSet[ band.ID ];
7102 coolSet.FCoolWidth := toolbar.Width + 25;
7103 GikoSys.Setting.BrowserCoolSet[ band.ID ] := coolSet;
7104 if affectedBand <> nil then begin
7105 coolSet := GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ];
7106 coolSet.FCoolWidth := affectedBand.Control.Width + 25;
7107 GikoSys.Setting.BrowserCoolSet[ affectedBand.ID ] := coolSet;
7114 procedure TGikoForm.MenuToolBarResize(Sender: TObject);
7116 CoolBarResized( Sender, MainCoolBar );
7119 procedure TGikoForm.ListToolBarResize(Sender: TObject);
7121 CoolBarResized( Sender, ListCoolBar );
7124 procedure TGikoForm.BrowserToolBarResize(Sender: TObject);
7126 CoolBarResized( Sender, BrowserCoolBar );
7129 //
\82±
\82Ì
\83\8c\83X
\82 \82Ú
\81`
\82ñ
7130 procedure TGikoForm.IndividualAbon(Atag, Atype : Integer);
7132 ThreadItem : TThreadItem;
7133 ReadList : TStringList;
7134 wordCount : TWordCount;
7136 ThreadItem := GetActiveContent(True);
7137 ReadList := TStringList.Create;
7138 wordCount := TWordCount.Create;
7140 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7141 {$IFDEF SPAM_FILTER_ENABLED}
7142 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7143 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7144 GikoSys.SpamCountWord( ReadList[ ATag - 1 ], wordCount );
7145 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7146 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7148 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7149 GikoSys.FAbon.AddIndividualAbon(Atag, Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7154 FActiveContent.Repaint := true;
7155 if ThreadItem <> nil then
7156 InsertBrowserTab( ThreadItem, True );
7158 //
\93¯
\88êID
\82ðNG
\83\8f\81[
\83h
\82É
\93o
\98^
7159 procedure TGikoForm.AddIDtoNGWord(invisible : boolean);
7161 ThreadItem : TThreadItem;
7163 {$IFDEF SPAM_FILTER_ENABLED}
7165 ReadList : TStringList;
7166 wordCount : TWordCount;
7170 No := KokoPopupMenu.Tag;
7171 if No = 0 then Exit;
7172 ThreadItem := GetActiveContent(True);
7173 if ThreadItem = nil then Exit;
7175 id := GikoSys.GetResID(No, ThreadItem);
7176 if (id <> '') and (not IsNoValidID(id)) then begin
7177 if (GikoSys.FAbon.AddToken(id, invisible)) then begin
7178 GikoSys.FAbon.ReLoadFromNGwordFile;
7179 FActiveContent.Repaint := True;
7182 ShowMessage('ID
\82ð
\8eæ
\93¾
\82Å
\82«
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B');
7184 {$IFDEF SPAM_FILTER_ENABLED}
7185 body := TStringList.Create;
7187 GikoSys.GetSameIDRes(id, ThreadItem, body);
7188 ReadList := TStringList.Create;
7189 wordCount := TWordCount.Create;
7191 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7192 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7193 for i := 0 to body.Count - 1 do begin
7194 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7195 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7196 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7206 if (FActiveContent.Repaint) then begin
7207 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7208 if ThreadItem <> nil then
7209 InsertBrowserTab( ThreadItem, True );
7213 //
\93¯
\88êID
\82Ì
\82 \82Ú
\81`
\82ñ
7214 procedure TGikoForm.IndividualAbonID(Atype : Integer);
7216 ThreadItem : TThreadItem;
7219 ReadList : TStringList;
7220 wordCount : TWordCount;
7222 No := KokoPopupMenu.Tag;
7223 if No = 0 then Exit;
7224 ThreadItem := GetActiveContent(True);
7225 if ThreadItem = nil then Exit;
7226 body := TStringList.Create;
7228 GikoSys.GetSameIDRes(No, ThreadItem, body);
7230 ReadList := TStringList.Create;
7231 wordCount := TWordCount.Create;
7233 ThreadItem.ScrollTop := OleVariant(IHTMLDocument2(FActiveContent.Browser.Document)).Body.ScrollTop;
7234 {$IFDEF SPAM_FILTER_ENABLED}
7235 //
\83X
\83p
\83\80\82É
\90Ý
\92è
7236 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
7238 for i := 0 to body.Count - 1 do begin
7239 {$IFDEF SPAM_FILTER_ENABLED}
7240 GikoSys.SpamCountWord( ReadList[ i ], wordCount );
7241 GikoSys.SpamForget( wordCount, False ); //
\83n
\83\80\82ð
\89ð
\8f\9c
7242 GikoSys.SpamLearn( wordCount, True ); //
\83X
\83p
\83\80\82É
\90Ý
\92è
7244 //
\82 \82Ú
\81[
\82ñ
\82É
\90Ý
\92è
7245 GikoSys.FAbon.AddIndividualAbon(StrToInt(body[i]), Atype, ChangeFileExt(ThreadItem.GetThreadFileName, '.NG'));
7251 FActiveContent.Repaint := true;
7252 if ThreadItem <> nil then
7253 InsertBrowserTab( ThreadItem, True );
7260 procedure TGikoForm.KokoPopupMenuPopup(Sender: TObject);
7262 firstElement: IHTMLElement;
7263 document: IHTMLDocument2;
7265 document := FActiveContent.Browser.Document as IHTMLDocument2;
7266 if Assigned(document) then
7267 firstElement := document.all.item('idSearch', 0) as IHTMLElement;
7268 if Assigned(firstElement) then
7269 if firstElement.style.visibility <> 'hidden' then
7270 firstElement.style.visibility := 'hidden';
7273 procedure TGikoForm.RepaintAllTabsBrowser();
7276 ThreadItem: TThreadItem;
7278 for i := BrowserTab.Tabs.Count - 1 downto 0 do
7279 TBrowserRecord(BrowserTab.Tabs.Objects[i]).Repaint := true;
7281 ThreadItem := GetActiveContent;
7282 if ThreadItem <> nil then
7283 InsertBrowserTab( ThreadItem, True );
7287 //ListView
\82Ì
\91I
\91ð
\8fó
\91Ô
\82ð
\89ð
\8f\9c\82·
\82é
7288 procedure TGikoForm.ListViewKeyUp(Sender: TObject; var Key: Word;
7289 Shift: TShiftState);
7291 //
\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Ì
7292 //
\96³
\8cø
\8e\9e\8aÔ
\82ÌTimer
\82Ì
\8f\88\97\9d
7293 //
\82Æ
\82è
\82 \82¦
\82¸
\81A
\83^
\83C
\83}
\81[
\82ð
\92â
\8e~
\82·
\82é
\81B
7294 SelectTimer.Interval := 0;
7295 if not (GikoSys.Setting.BrowserTabVisible) then begin
7296 if (GetActiveList is TBoard) then begin
7297 //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
7298 if not ((ssShift in Shift) or (ssAlt in Shift) or (ssCtrl in Shift)) and
7299 (( Key = VK_LEFT) or (Key = VK_RIGHT) or
7300 (Key = VK_UP) or (Key = VK_DOWN)) then
7301 SelectTimer.Interval := GikoSys.Setting.SelectInterval;
7305 // *************************************************************************
7306 //!
\82¨
\8bC
\82É
\93ü
\82è
\82Ì
\95Ò
\8fW
\8aJ
\8en
\83C
\83x
\83\93\83g
7307 // *************************************************************************
7308 procedure TGikoForm.FavoriteTreeViewEditing(Sender: TObject;
7309 Node: TTreeNode; var AllowEdit: Boolean);
7311 //
\95Ò
\8fW
\91O
\82Ì
\95¶
\8e\9a\97ñ
\82ð
\88ê
\8e\9e\95Û
\91¶
\82·
\82é
7312 FOrigenCaption := Node.Text;
7314 // *************************************************************************
7315 //! Application
\82ÌMainForm
\82ð
\8eæ
\93¾
\82·
\82é
7316 // *************************************************************************
7317 function TGikoForm.GetMainForm(): TComponent;
7319 Result := Application.MainForm;
7321 // *************************************************************************
7322 //!
\8c»
\8dÝ
\82Ì
\83J
\81[
\83\
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
7323 // *************************************************************************
7324 function TGikoForm.GetScreenCursor(): TCursor;
7326 Result := Screen.Cursor;
7328 // *************************************************************************
7329 //!
\83J
\81[
\83\
\83\8b\82ð
\90Ý
\92è
\82·
\82é
7330 // *************************************************************************
7331 procedure TGikoForm.SetScreenCursor(Cursor : TCursor);
7333 if (Screen.Cursor <> Cursor) then
7334 Screen.Cursor := Cursor;
7336 // *************************************************************************
7337 //!
\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
7338 // *************************************************************************
7339 procedure TGikoForm.CabinetCloseSpeedButtonClick(Sender: TObject);
7341 //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Ì
7342 //
\8cÄ
\82Ñ
\8fo
\82µ
\82É
\82µ
\82½
\81@by
\82à
\82¶
\82ã
7343 if GikoDM.CabinetVisibleAction.Enabled then begin
7344 GikoDM.CabinetVisibleAction.Execute;
7347 // *************************************************************************
7348 //!
\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
7349 // *************************************************************************
7350 procedure TGikoForm.FavoriteArrangeToolButtonClick(Sender: TObject);
7352 if GikoDM.FavoriteArrangeAction.Enabled then begin
7353 GikoDM.FavoriteArrangeAction.Execute;
7356 // *************************************************************************
7357 //!
\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
7358 // *************************************************************************
7359 procedure TGikoForm.GikoApplicationEventsMessage(var Msg: tagMSG;
7360 var Handled: Boolean);
7364 //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ß
7365 if Self.Active then begin
7367 //
\83L
\81[
\93ü
\97Í
\82·
\82×
\82Ä
7368 WM_KEYFIRST..WM_KEYLAST :
7370 //
\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ç
7371 if (Msg.message <> WM_KEYUP)
7372 and (Msg.message <> WM_CHAR)
7373 and (Msg.message <> WM_SYSKEYUP) then begin
7374 wmMsg.Msg := Msg.message;
7375 wmMsg.CharCode := Word(Msg.wParam);
7376 wmMsg.KeyData := Msg.lParam;
7377 //
\83t
\83H
\81[
\83\80\82Ì
\83V
\83\87\81[
\83g
\83J
\83b
\83g
\82Ì
\8f\88\97\9d\82É
\93]
\91\97
7378 Self.OnShortCut(wmMsg, Handled);
7384 // *************************************************************************
7385 //!
\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
7386 // *************************************************************************
7387 procedure TGikoForm.GikoApplicationEventsDeactivate(Sender: TObject);
7389 Application.ProcessMessages;
7390 if not Application.Terminated then begin
7391 if PreviewTimer.Enabled then
7392 PreviewTimer.Enabled := False;
7393 //
\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
7394 if (FResPopupBrowser <> nil) then
7395 FResPopupBrowser.Clear;
7397 //
\83v
\83\8c\83r
\83\85\81[
\82ð
\89B
\82·
7398 if FPreviewBrowser <> nil then
7399 ShowWindow(FPreviewBrowser.Handle, SW_HIDE);
7403 // *************************************************************************
7404 //!
\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
7405 // *************************************************************************
7406 procedure TGikoForm.GikoApplicationEventsException(Sender: TObject;
7411 if (Sender <> nil) then begin
7412 s := ' [' + Sender.ClassName + ']' + #13#10;
7414 s := ' [ Sender is nil ] ' + #13#10;
7417 MsgBox(Handle, s, '
\8f\88\97\9d\82³
\82ê
\82È
\82©
\82Á
\82½
\97á
\8aO', MB_OK or MB_ICONSTOP);
7419 // *************************************************************************
7420 //!
\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¬
7421 // *************************************************************************
7422 procedure TGikoForm.CreateControlThread();
7424 //
\83_
\83E
\83\93\83\8d\81[
\83h
\83I
\83u
\83W
\83F
\83N
\83g
7425 FControlThread := TThreadControl.Create(True);
7426 FControlThread.MaxThreadCount := 1;
7427 FControlThread.Resume;
7428 FControlThread.OnDownloadEnd := DownloadEnd;
7429 FControlThread.OnDownloadMsg := DownloadMsg;
7430 FControlThread.OnWork := Work;
7431 FControlThread.OnWorkBegin := WorkBegin;
7432 FControlThread.OnWorkEnd := WorkEnd;
7434 // *************************************************************************
7435 //!
\83u
\83\89\83E
\83U
\82Ì
\90¶
\90¬
7436 // *************************************************************************
7437 procedure TGikoForm.CreateBrowsers(count: Integer);
7440 newBrowser: TWebBrowser;
7442 BrowserNullTab := TBrowserRecord.Create;
7443 BrowserNullTab.Browser := Browser;
7444 BrowserNullTab.Browser.Navigate(BLANK_HTML);
7446 FBrowsers := TList.Create;
7447 for i := 0 to count -1 do begin
7448 FBrowsers.Add(TWebBrowser.Create(BrowserPanel));
7449 newBrowser := FBrowsers[FBrowsers.Count - 1];
7450 TOleControl(newBrowser).Parent := BrowserPanel;
7451 TOleControl(newBrowser).Align := alNone;
7452 TOleControl(newBrowser).Left := 0;
7453 TOleControl(newBrowser).Top := 0;
7454 newBrowser.RegisterAsDropTarget := False;
7455 newBrowser.OnDocumentComplete := BrowserDocumentComplete;
7456 newBrowser.OnBeforeNavigate2 := BrowserBeforeNavigate2;
7457 newBrowser.OnEnter := BrowserEnter;
7458 newBrowser.OnNewWindow2 := BrowserNewWindow2;
7459 newBrowser.OnStatusTextChange := BrowserStatusTextChange;
7460 newBrowser.Navigate(BLANK_HTML);
7461 ShowWindow(newBrowser.Handle, SW_HIDE);
7463 BrowserNullTab.Browser.BringToFront;
7464 ShowWindow(BrowserNullTab.Browser.Handle, SW_SHOW);
7466 //
\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Ì
7467 //
\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Å
7468 //
\82±
\82±
\82Å
\8fI
\82í
\82ç
\82¹
\82Ä
\82¨
\82
7469 while (Browser.ReadyState <> READYSTATE_COMPLETE) and
7470 (Browser.ReadyState <> READYSTATE_INTERACTIVE) do begin
7471 Application.ProcessMessages;
7474 // *************************************************************************
7475 //!
\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é
7476 // *************************************************************************
7477 procedure TGikoForm.SetSelectComboBox();
7479 DUMMYCOMPNAME = 'SelectComboBoxDummy';
7482 ToolButton: TToolButton;
7484 //ListToolBar
\82É
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\8di
\8d\9e\82ÝComboBox
\82ð
\94z
\92u
7485 SelectComboBoxPanel.Visible := False;
7487 for i := ListToolBar.ControlCount - 1 downto 0 do
7489 if ListToolBar.Controls[ i ].Action = GikoDM.SelectItemAction then
7491 SelectComboBoxPanel.Left := ListToolBar.Controls[ i ].Left;
7492 SelectComboBoxPanel.Width := GikoSys.Setting.SelectComboBoxWidth;
7493 SelectComboBoxPanel.Parent := ListToolBar;
7494 SelectComboBoxPanel.Visible := True;
7496 SelectComboBox.Left := 0;
7497 SelectComboBox.Top := 0;
7498 SelectComboBox.Height := SelectComboBoxPanel.ClientHeight;
7499 SelectComboBox.Width := SelectComboBoxPanel.Width -
7500 SelectComboBoxSplitter.Width;
7502 //
\88ê
\82Â
\8c©
\82¦
\82È
\82¢
\83{
\83^
\83\93\82ð
\93Ë
\82Á
\8d\9e\82Þ
7503 ToolButton := TToolButton(ListToolBar.FindComponent(DUMMYCOMPNAME));
7504 if ToolButton = nil then begin
7505 ToolButton := TToolButton.Create(ListToolBar);
7506 ToolButton.Name := DUMMYCOMPNAME;
7508 ToolButton.Style := tbsSeparator;
7509 ToolButton.Width := 0;
7510 ToolButton.Left := ListToolBar.Controls[ i ].Left;
7511 ListToolBar.InsertControl(ToolButton);
7512 ToolButton.Visible := False;
7514 //
\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·
7515 if (i + 1) < ListToolBar.ControlCount then
7516 if ListToolBar.Controls[ i + 1 ] is TToolButton then
7517 if TToolButton( ListToolBar.Controls[ i + 1 ] ).Style = tbsSeparator then
7518 ListToolBar.Controls[ i + 1 ].Visible := False;
7521 //
\83X
\83\8c\83b
\83h
\8di
\8d\9e\83{
\83^
\83\93\82ð
\89B
\82·
7522 ListToolBar.Controls[ i ].Visible := False;
7530 //!
\83L
\83\83\83r
\83l
\83b
\83g
\82Ì
\83}
\83E
\83X
\83_
\83E
\83\93\83C
\83x
\83\93\83g
7531 procedure TGikoForm.TreeViewMouseDown(Sender: TObject;
7532 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
7539 if (TreeView.Selected <> nil) and
7540 (TreeView.Selected = TreeView.GetNodeAt(X, Y)) then begin
7541 //
\83}
\83E
\83X
\82ªnode
\82Ì
\8fã
\82É
\82¢
\82é
\82©
7542 rect := TreeView.Selected.DisplayRect(true);
7543 //
\83A
\83C
\83R
\83\93\95ª
\82¾
\82¯
\8d¶
\82É
\82¸
\82ç
\82·
7544 if ((rect.Left - TreeView.Indent <= X) and (rect.Right >= X)) and
7545 ((rect.Bottom >= Y) and (rect.Top <= Y)) then begin
7546 //
\83N
\83\8a\83b
\83N
\82Æ
\83_
\83u
\83\8b\83N
\83\8a\83b
\83N
\82ð
\83R
\83R
\82Å
\94»
\92è
7547 if ssDouble in Shift then begin
7548 TreeDoubleClick( TreeView.Selected );
7550 TreeClick(TreeView.Selected);
7557 //! ActionList
\82ÌGroupIndex
\82Ì
\95Û
\91¶
7558 procedure TGikoForm.GetGroupIndex(ActionList: TActionList);
7562 if ActionList <> nil then begin
7563 SetLength(FActionListGroupIndexes, ActionList.ActionCount);
7565 for i := 0 to ActionList.ActionCount - 1 do begin
7567 FActionListGroupIndexes[i] :=
7568 TCustomAction(ActionList.Actions[i]).GroupIndex;
7569 TCustomAction(ActionList.Actions[i]).GroupIndex
7572 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7578 //! ActionList
\82ÌGroupIndex
\82Ì
\90Ý
\92è
7579 procedure TGikoForm.SetGroupIndex(ActionList: TActionList);
7583 if ActionList <> nil then begin
7584 if Length( FActionListGroupIndexes ) = ActionList.ActionCount then begin
7585 for i := 0 to ActionList.ActionCount - 1 do begin
7587 TCustomAction(ActionList.Actions[i]).GroupIndex
7588 := FActionListGroupIndexes[i];
7590 ;//Cast
\82Å
\82«
\82È
\82¢
\82Æ
\82«
\91Î
\8dô
7596 //!
\82±
\82Ì
\83\8c\83X
\82ÌURL
\8eæ
\93¾
7597 procedure TGikoForm.GetResURLMenuClick(Sender: TObject);
7601 //! ListView
\81i
\83X
\83\8c\83b
\83h
\88ê
\97\97\81j
\82ð
\8dX
\90V
\82·
\82é
7602 procedure TGikoForm.RefreshListView(Thread: TThreadItem);
7604 //Thread
\82Ì
\94Â
\82Æ
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\94Â
\82ª
\93¯
\82¶
\82È
\82ç
\95`
\89æ
\82ð
\8dX
\90V
\82·
\82é
7605 if (FActiveList is TBoard) and (TBoard(ActiveList) = Thread.ParentBoard) then begin
7610 procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7611 MousePos: TPoint; var Handled: Boolean);
7614 coolBar: TGikoCoolBar;
7617 if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7618 coolBar := TGikoCoolBar(Sender);
7619 if (coolBar = MainCoolBar) then begin
7620 FToolBarSettingSender := tssMain;
7621 end else if (coolBar = ListCoolBar) then begin
7622 FToolBarSettingSender := tssList;
7623 end else if (coolBar = BrowserCoolBar) then begin
7624 FToolBarSettingSender := tssBrowser;
7626 FToolBarSettingSender := tssNone;
7628 pos := coolBar.ClientToScreen( MousePos );
7629 MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7634 procedure TGikoForm.TaskTrayIconMessage(var Msg: TMsg);
7636 //
\8d¶
\83N
\83\8a\83b
\83N
\82È
\82ç
\95\9c\8c³
\82·
\82é
7637 if (Msg.wParam = WM_LBUTTONUP) then begin
7641 //!
\83^
\83X
\83N
\83g
\83\8c\83C
\82É
\83A
\83C
\83R
\83\93\93o
\98^
\81\95\83t
\83H
\81[
\83\80\89B
\82µ
7642 procedure TGikoForm.StoredTaskTray;
7645 if (FIconData.uID = 0) then begin
7646 FIconData.cbSize := SizeOf(TNotifyIconData);
7647 FIconData.uID := Self.Handle;
7648 FIconData.Wnd := Handle;
7649 FIconData.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
7650 FIconData.uCallbackMessage := USER_TASKTRAY;
7651 FIconData.hIcon := Application.Icon.Handle; {
\83A
\83C
\83R
\83\93\8ew
\92è}
7652 FIconData.szTip := '
\83M
\83R
\83i
\83r'; {
\83q
\83\93\83g
\95¶
\8e\9a\97ñ}
7653 Shell_NotifyIcon(NIM_ADD, @FIconData);
7654 ShowEditors(SW_HIDE);
7655 ShowWindow(Self.Handle, SW_HIDE);
7660 //!
\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¦
7661 procedure TGikoForm.UnStoredTaskTray;
7665 Shell_NotifyIcon(NIM_DELETE, @FIconData);
7666 SetForegroundWindow(Application.Handle);
7671 // Action
\82©
\82ç
\8ai
\94[
\82µ
\82½
\82Æ
\82«
\82ÍTag
\82Ì
\92l
\82Í0
\88È
\8aO
7672 if (GikoDM.StoredTaskTrayAction.Tag = 0) then begin
7673 ShowWindow(Self.Handle, SW_RESTORE);
7675 ShowWindow(Self.Handle, SW_SHOW);
7677 ShowEditors(SW_SHOW);
7678 GikoDM.StoredTaskTrayAction.Tag := 0;
7682 \brief
\83\8c\83X
\83G
\83f
\83B
\83^
\82Ì
\95\
\8e¦
\94ñ
\95\
\8e¦
7683 \param nCmdShow Windows.ShowWindow
\82É
\91\97\82é
\83p
\83\89\83\81\81[
\83^
\82Æ
\93¯
\82¶
7685 procedure TGikoForm.ShowEditors(nCmdShow: Integer);
7689 //
\83\8c\83X
\83G
\83f
\83B
\83^
\82ð
\92T
\82·
7690 for i := 0 to Screen.CustomFormCount - 1 do begin
7691 if TObject(Screen.CustomForms[i]) is TEditorForm then
7692 ShowWindow(Screen.CustomForms[i].Handle, nCmdShow);
7696 //!
\83|
\83b
\83v
\83A
\83b
\83v
\83u
\83\89\83E
\83U
\8dì
\90¬
7697 procedure TGikoForm.CreateResPopupBrowser;
7699 if (FResPopupBrowser = nil) then begin
7700 FResPopupBrowser := TResPopupBrowser.Create(BrowserPanel);
7703 //!
\8aO
\82©
\82ç
\82ÌD&D
\8f\88\97\9d
7704 procedure TGikoForm.WMDropFiles(var Msg: TWMDropFiles);
7706 FileName: Array[0..MAX_PATH] of Char;
7710 datList: TStringList;
7712 //
\95\
\8e¦
\82µ
\82Ä
\82¢
\82é
\82Ì
\94Â
\82Ì
\82Æ
\82«
\88È
\8aO
\82Í
\8b\91\94Û
7713 if GetActiveList is TBoard then begin
7714 Board := TBoard(GetActiveList);
7715 if MsgBox(Handle, Board.Title
7716 + '
\94Â
\82É
\93ü
\82ê
\82Ä
\82¢
\82¢
\82Å
\82·
\82©
\81H', '
\83M
\83R
\83i
\83r', MB_YESNO or MB_ICONQUESTION) = IDYES then begin
7717 //
\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
7718 datList := TStringList.Create;
7720 Cnt := DragQueryFile(Msg.Drop, $FFFFFFFF, FileName, SizeOf(FileName));
7721 for K := 0 to Cnt - 1 do begin
7722 DragQueryFile(Msg.Drop, K, FileName, SizeOf(FileName));
7723 {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}
7724 //
\83t
\83@
\83C
\83\8b\82Ì
\83`
\83F
\83b
\83N
7725 if (isValidFile(FileName)) then begin
7726 LogFolder := ExtractFilePath(Board.FilePath);
7727 if (FileExists( LogFolder + ExtractFileName(FileName))) then begin
7728 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);
7730 if (not DirectoryExists(LogFolder)) then begin
7731 if (not GikoSys.ForceDirectoriesEx(LogFolder) ) then begin
7732 GikoUtil.MsgBox(Handle, LogFolder + '
\82Ì
\90¶
\90¬
\82É
\8e¸
\94s
\82µ
\82Ü
\82µ
\82½
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7735 if (not Windows.CopyFile(FileName, PChar(LogFolder + ExtractFileName(FileName)), true)) then begin
7736 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);
7738 datList.Add(ExtractFileName(FileName));
7743 DragFinish(Msg.Drop);
7744 if (datList.Count > 0) then begin
7745 GikoSys.AddOutofIndexDat(Board, datList, False);
7746 ShowMessage(IntToStr(datList.Count) + '
\8cÂ
\82Ìdat
\83t
\83@
\83C
\83\8b\82ª
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82µ
\82½
\81B' );
7747 if GikoForm.TreeView.Visible then
7748 GikoForm.TreeView.Refresh;
7749 if GikoForm.ListView.Visible then
7750 GikoForm.ListView.Refresh;
7752 ShowMessage('
\88ê
\82Â
\82à
\83R
\83s
\81[
\82³
\82ê
\82Ü
\82¹
\82ñ
\82Å
\82µ
\82½
\81B' );
7760 ShowMessage('
\94Â
\82ð
\95\
\8e¦
\82µ
\82Ä
\82
\82¾
\82³
\82¢
\81B');
7763 //!
\83t
\83@
\83C
\83\8b\83`
\83F
\83b
\83N
7764 function TGikoForm.isValidFile(FileName: String) : boolean;
7769 //
\91¶
\8dÝ
\82·
\82é
\82©
\81A
\8ag
\92£
\8eqdat
\81A
\83t
\83@
\83C
\83\8b\96¼
7770 if ( not FileExists(FileName) ) then begin
7772 GikoUtil.MsgBox(Handle, FileName + '
\82Í
\91¶
\8dÝ
\82µ
\82Ü
\82¹
\82ñ
\81B', '
\83G
\83\89\81[', MB_ICONSTOP or MB_OK);
7773 end else if (ExtractFileExt(ExtractFileName(FileName)) <> '.dat' ) then begin
7775 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);
7777 //
\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
7779 dt := GikoSys.GetCreateDateFromName(FileName);
7780 if ((UnixToDateTime(ZERO_DATE) + OffsetFromUTC) = dt) then begin
7782 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);
7786 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);
7791 procedure TGikoForm.ResPopupClearTimerTimer(Sender: TObject);
7793 ResPopupClearTimer.Enabled := False;
7794 if ResPopupClearTimer.Tag = 0 then begin
7795 FResPopupBrowser.Clear;
7797 FResPopupBrowser.CurrentBrowser.ChildClear;