Develop and Download Open Source Software

Browse CVS Repository

Diff of /gikonavigoeson/gikonavi/GikoDataModule.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.29.2.1 by h677, Mon Jan 2 04:08:46 2006 UTC revision 1.80 by h677, Sun Nov 20 10:18:23 2011 UTC
# Line 11  uses Line 11  uses
11          SHDocVw_TLB,          SHDocVw_TLB,
12          MSHTML_TLB,          MSHTML_TLB,
13  {$IFEND}  {$IFEND}
14    ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs;    ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15      ActiveX, GikoSystem, MoveHistoryItem, HistoryList;
16    
17  const  const
18          CAPTION_NAME: string = 'ギコナビ';          CAPTION_NAME: string = 'ギコナビ';
# Line 32  const Line 33  const
33          TOOL_ICON_FAV_BOARD                     = 31;           //!< お気に入り板アイコン          TOOL_ICON_FAV_BOARD                     = 31;           //!< お気に入り板アイコン
34          TOOL_ICON_FAV_THREAD            = 32;           //!< お気に入りスレアイコン          TOOL_ICON_FAV_THREAD            = 32;           //!< お気に入りスレアイコン
35    
36            //! HTTP
37            PROTOCOL_HTTP : string = 'http://';
38          //! ギコナビサイトのURL          //! ギコナビサイトのURL
39          URL_GIKONAVI: string = 'http://gikonavi.sourceforge.jp/';          URL_GIKONAVI: string = 'gikonavi.sourceforge.jp/';
40          //! MonazillaサイトのURL          //! MonazillaサイトのURL
41          URL_MONAZILLA: string = 'http://www.monazilla.org/';          URL_MONAZILLA: string = 'www.monazilla.org/';
42          //! 2ちゃんねるのURL          //! 2ちゃんねるのURL
43          URL_2ch: string = 'http://www.2ch.net/';          URL_2ch: string = 'www.2ch.net/';
44          //! ギコナビWikiのURL          //! ギコナビWikiのURL
45          URL_Wiki: string = 'http://gikowiki.dyndns.info/index.php?FAQ';          URL_Wiki: string = 'sourceforge.jp/projects/gikonavi/wiki/FAQ';
46    
47          SELECTCOMBOBOX_NAME: string = ''; // 'スレッド絞込検索';          SELECTCOMBOBOX_NAME: string = ''; // 'スレッド絞込検索';
48          SELECTCOMBOBOX_COLOR: TColor = clWindow;          SELECTCOMBOBOX_COLOR: TColor = clWindow;
49    
50    
51  type  type
52    
53    TGikoDM = class(TDataModule)    TGikoDM = class(TDataModule)
54          GikoFormActionList: TActionList;          GikoFormActionList: TActionList;
55          OnlyAHundredResAction: TAction;          OnlyAHundredResAction: TAction;
# Line 189  type Line 193  type
193          TabsSaveAction: TAction;          TabsSaveAction: TAction;
194          TabsOpenAction: TAction;          TabsOpenAction: TAction;
195          BrowsBoradHeadAction: TAction;          BrowsBoradHeadAction: TAction;
         TabAutoSaveAction: TAction;  
         TabAutoLoadAction: TAction;  
196          JumpToNumOfResAction: TAction;          JumpToNumOfResAction: TAction;
197          FavoriteTreeViewCollapseAction: TAction;          FavoriteTreeViewCollapseAction: TAction;
198          RightTabCloseAction: TAction;          RightTabCloseAction: TAction;
# Line 212  type Line 214  type
214          ToobarImageList: TImageList;          ToobarImageList: TImageList;
215      SaveDialog: TSaveDialog;      SaveDialog: TSaveDialog;
216      ThreadSizeCalcForFileAction: TAction;      ThreadSizeCalcForFileAction: TAction;
217        SetInputAssistAction: TAction;
218        OpenFindDialogAction: TAction;
219        ArchiveItemAction: TAction;
220        LiveItemAction: TAction;
221        FavoriteTreeViewItemNameCopyAction: TAction;
222        CloseAllEditorAction: TAction;
223        PrevMoveHistory: TAction;
224        NextMoveHistory: TAction;
225        ClickActiveElementAction: TAction;
226        VKDownAction: TAction;
227        VKUpAction: TAction;
228        VKRightAction: TAction;
229        VKLeftAction: TAction;
230        StoredTaskTrayAction: TAction;
231        AllImageLinkToClipbordAction: TAction;
232        NewImageLinkToClipBoardAction: TAction;
233        SetForcusForAddresBarAction: TAction;
234        NewBoardSearchAction: TAction;
235        NGWordEditFormAction: TAction;
236        ScrollPageDownAction: TAction;
237        ScrollPageUpAction: TAction;
238        AllLinkToClipboardAction: TAction;
239        NewLinkToClipboardAction: TAction;
240        AddIDtoNGWord0Action: TAction;
241        AddIDtoNGWord1Action: TAction;
242        ExtractSameIDAction: TAction;
243        ShowTabListAction: TAction;
244        DereferenceResAction: TAction;
245        UpdateGikonaviAction: TAction;
246        konoURLPATHAction: TAction;
247        konoURLQueryAction: TAction;
248        PopupMenuSettingAction: TAction;
249          procedure EditNGActionExecute(Sender: TObject);          procedure EditNGActionExecute(Sender: TObject);
250          procedure ReloadActionExecute(Sender: TObject);          procedure ReloadActionExecute(Sender: TObject);
251          procedure GoFowardActionExecute(Sender: TObject);          procedure GoFowardActionExecute(Sender: TObject);
# Line 299  type Line 333  type
333          procedure SelectItemSaveForDatExecute(Sender: TObject);          procedure SelectItemSaveForDatExecute(Sender: TObject);
334          procedure TabsSaveActionExecute(Sender: TObject);          procedure TabsSaveActionExecute(Sender: TObject);
335          procedure TabsOpenActionExecute(Sender: TObject);          procedure TabsOpenActionExecute(Sender: TObject);
         procedure TabAutoSaveActionExecute(Sender: TObject);  
         procedure TabAutoLoadActionExecute(Sender: TObject);  
336          procedure BeLogInOutActionExecute(Sender: TObject);          procedure BeLogInOutActionExecute(Sender: TObject);
         procedure BeLogInOutActionUpdate(Sender: TObject);  
337          procedure KokomadeActionExecute(Sender: TObject);          procedure KokomadeActionExecute(Sender: TObject);
338          procedure ZenbuActionExecute(Sender: TObject);          procedure ZenbuActionExecute(Sender: TObject);
339          procedure KokoResActionExecute(Sender: TObject);          procedure KokoResActionExecute(Sender: TObject);
# Line 394  type Line 425  type
425          procedure AllSelectActionExecute(Sender: TObject);          procedure AllSelectActionExecute(Sender: TObject);
426          procedure AllSelectActionUpdate(Sender: TObject);          procedure AllSelectActionUpdate(Sender: TObject);
427      procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);      procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);
428        procedure SetInputAssistActionExecute(Sender: TObject);
429        procedure OpenFindDialogActionExecute(Sender: TObject);
430        procedure ArchiveItemActionExecute(Sender: TObject);
431        procedure LiveItemActionExecute(Sender: TObject);
432        procedure FavoriteTreeViewItemNameCopyActionExecute(Sender: TObject);
433        procedure CloseAllEditorActionExecute(Sender: TObject);
434        procedure CloseAllEditorActionUpdate(Sender: TObject);
435        procedure PrevMoveHistoryUpdate(Sender: TObject);
436        procedure PrevMoveHistoryExecute(Sender: TObject);
437        procedure NextMoveHistoryUpdate(Sender: TObject);
438        procedure NextMoveHistoryExecute(Sender: TObject);
439        procedure ClickActiveElementActionExecute(Sender: TObject);
440        procedure VKDownActionExecute(Sender: TObject);
441        procedure VKUpActionExecute(Sender: TObject);
442        procedure VKRightActionExecute(Sender: TObject);
443        procedure VKLeftActionExecute(Sender: TObject);
444        procedure StoredTaskTrayActionExecute(Sender: TObject);
445        procedure LeftTabSelectActionUpdate(Sender: TObject);
446        procedure RightmostTabSelectActionUpdate(Sender: TObject);
447        procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
448        procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
449        procedure SetForcusForAddresBarActionExecute(Sender: TObject);
450        procedure NewBoardSearchActionExecute(Sender: TObject);
451        procedure ScrollPageDownActionExecute(Sender: TObject);
452        procedure ScrollPageUpActionExecute(Sender: TObject);
453        procedure AllLinkToClipboardActionExecute(Sender: TObject);
454        procedure NewLinkToClipboardActionExecute(Sender: TObject);
455        procedure AddIDtoNGWord0ActionExecute(Sender: TObject);
456        procedure AddIDtoNGWord1ActionExecute(Sender: TObject);
457        procedure ExtractSameIDActionExecute(Sender: TObject);
458        procedure ShowTabListActionExecute(Sender: TObject);
459        procedure DereferenceResActionExecute(Sender: TObject);
460        procedure UpdateGikonaviActionExecute(Sender: TObject);
461        procedure konoURLPATHActionExecute(Sender: TObject);
462        procedure konoURLQueryActionExecute(Sender: TObject);
463        procedure konoURLQueryActionUpdate(Sender: TObject);
464        procedure PopupMenuSettingActionExecute(Sender: TObject);
465    private    private
466          { Private 宣言 }          { Private 宣言 }
467          procedure ClearResFilter;          procedure ClearResFilter;
# Line 406  type Line 474  type
474          procedure SelectThreadSaveToFile(dat: Boolean);          procedure SelectThreadSaveToFile(dat: Boolean);
475          function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;          function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;
476          procedure RecalcThreadSize(limit : Integer);          procedure RecalcThreadSize(limit : Integer);
477            procedure ClearSelectComboBox;
478        procedure ClearMailAllEditor();
479        procedure ClearNameTextAllEditor();
480        procedure MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
481        procedure BackToHistory(item: TMoveHistoryItem);
482        function GetActiveThreadLinks : IHTMLElementCollection;
483        procedure GetLinkURLs(links : IHTMLElementCollection;
484            URLs : TStringList; const Start: Integer; Exts : TStringList);
485    public    public
486          { Public 宣言 }          { Public 宣言 }
487          procedure RepaintStatusBar;          procedure RepaintStatusBar;
488        function EditorFormExists(): boolean;
489        procedure GetTabURLs(AStringList: TStringList);
490        procedure OpenURLs(AStringList: TStringList);
491    published    published
492          { Published 宣言 }          { Published 宣言 }
493          //! TActionでGetActiveContentがnil以外で有効になる          //! TActionでGetActiveContentがnil以外で有効になる
494          procedure DependActiveCntentActionUpdate(Sender: TObject);          procedure DependActiveCntentActionUpdate(Sender: TObject);
495          //! TActionでGetActiveContentがnil以外かつログを持っていると有効になる          //! TActionでGetActiveContentがnil以外かつログを持っていると有効になる
496          procedure DependActiveCntentLogActionUpdate(Sender: TObject);          procedure DependActiveCntentLogActionUpdate(Sender: TObject);
497          //! TActionでActiveListがTBoardで有効になる          //! TActionでActiveListがTBoard(非特殊板)で有効になる
498          procedure DependActiveListTBoardActionUpdate(Sender: TObject);          procedure DependActiveListTBoardActionUpdate(Sender: TObject);
499            //! TActionでActiveListがTBoardで有効になる
500            procedure DependActiveListTBoardWithSpeciapActionUpdate(Sender: TObject);
501    end;    end;
502    
503  var  var
# Line 427  implementation Line 508  implementation
508    
509  uses  uses
510          Windows, Math, Clipbrd,          Windows, Math, Clipbrd,
511          Giko, GikoSystem, GikoUtil, BoardGroup,          Giko, GikoUtil, BoardGroup,
512          FavoriteArrange, Favorite, MojuUtils,          FavoriteArrange, Favorite, MojuUtils,
513          Editor, ListSelect, Search, Option, Round,          Editor, ListSelect, Search, Option, Round,
514          KeySetting, Gesture, Kotehan, ToolBarSetting,          KeySetting, Gesture, Kotehan, ToolBarSetting,
515          ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,          ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,
516          GikoBayesian, About, ShellAPI,          GikoBayesian, About, ShellAPI,
517          RoundName, RoundData, Menus, ListViewUtils,          RoundName, RoundData, Menus, ListViewUtils,
518          ThreadControl, GikoMessage;          ThreadControl, GikoMessage, InputAssist,
519        DefaultFileManager, Forms, NewBoardURL, UpdateCheck,
520        PopupMenuSetting;
521    
522    const
523            MSG_ERROR : string = 'エラー';
524    
525  {$R *.dfm}  {$R *.dfm}
526  // *************************************************************************  // *************************************************************************
# Line 454  begin Line 539  begin
539                                                                          and (GikoForm.GetActiveContent.IsLogFile);                                                                          and (GikoForm.GetActiveContent.IsLogFile);
540  end;  end;
541  // *************************************************************************  // *************************************************************************
542  //! TActionでActiveListがTBoardで有効になる  //! TActionでActiveListがTBoard(非特殊板)で有効になる
543  // *************************************************************************  // *************************************************************************
544  procedure TGikoDM.DependActiveListTBoardActionUpdate(Sender: TObject);  procedure TGikoDM.DependActiveListTBoardActionUpdate(Sender: TObject);
545  begin  begin
546            TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard) and
547            (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
548    end;
549    // *************************************************************************
550    //! TActionでActiveListがTBoardで有効になる
551    // *************************************************************************
552    procedure TGikoDM.DependActiveListTBoardWithSpeciapActionUpdate(Sender: TObject);
553    begin
554          TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard);          TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard);
555  end;  end;
556  // *************************************************************************  // *************************************************************************
# Line 475  procedure TGikoDM.ReloadActionExecute(Se Line 568  procedure TGikoDM.ReloadActionExecute(Se
568  begin  begin
569          //リロードを実行 失敗したらメッセージ出力          //リロードを実行 失敗したらメッセージ出力
570          if GikoSys.FAbon.ReLoadFromNGwordFile =false then begin          if GikoSys.FAbon.ReLoadFromNGwordFile =false then begin
571                  MsgBox(GikoForm.Handle, 'NGワードファイルの再読み込みに失敗しました', 'エラー', MB_OK or MB_ICONEXCLAMATION);                  MsgBox(GikoForm.Handle, 'NGワードファイルの再読み込みに失敗しました',
572                            MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
573          end else begin          end else begin
574                  //全てのタブに再描画を設定                  //全てのタブに再描画を設定
575                  GikoForm.RepaintAllTabsBrowser();                  GikoForm.RepaintAllTabsBrowser();
# Line 488  procedure TGikoDM.GoFowardActionExecute( Line 582  procedure TGikoDM.GoFowardActionExecute(
582  begin  begin
583          //一つ後ろの読み込み 失敗したらメッセージ出力          //一つ後ろの読み込み 失敗したらメッセージ出力
584          if GikoSys.FAbon.GoBack =false then begin          if GikoSys.FAbon.GoBack =false then begin
585                  MsgBox(GikoForm.Handle, '一つ後ろのNGワードファイルの読み込みに失敗しました', 'エラー', MB_OK or MB_ICONEXCLAMATION);                  MsgBox(GikoForm.Handle, '一つ後ろのNGワードファイルの読み込みに失敗しました',
586                            MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
587          end else begin          end else begin
588                  //ステータスに表示されるNGワードファイル名を更新                  //ステータスに表示されるNGワードファイル名を更新
589                  RepaintStatusBar;                  RepaintStatusBar;
# Line 503  procedure TGikoDM.GoBackActionExecute(Se Line 598  procedure TGikoDM.GoBackActionExecute(Se
598  begin  begin
599          //一つ後ろの読み込み 失敗したらメッセージ出力          //一つ後ろの読み込み 失敗したらメッセージ出力
600          if GikoSys.FAbon.GoForward =false then begin          if GikoSys.FAbon.GoForward =false then begin
601                  MsgBox(GikoForm.Handle, '一つ前のNGワードファイルの読み込みに失敗しました', 'エラー', MB_OK or MB_ICONEXCLAMATION);                  MsgBox(GikoForm.Handle, '一つ前のNGワードファイルの読み込みに失敗しました',
602                            MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
603          end else begin          end else begin
604                  //ステータスに表示されるNGワードファイル名を更新                  //ステータスに表示されるNGワードファイル名を更新
605                  RepaintStatusBar;                  RepaintStatusBar;
# Line 530  end; Line 626  end;
626  //! アドレスバーに表示しているアドレスへ移動する  //! アドレスバーに表示しているアドレスへ移動する
627  // *************************************************************************  // *************************************************************************
628  procedure TGikoDM.MoveToActionExecute(Sender: TObject);  procedure TGikoDM.MoveToActionExecute(Sender: TObject);
 var  
         URL: string;  
         idx: Integer;  
629  begin  begin
630          //アドレスコンボボックスからURLを取得          //アドレスコンボボックスからURLを取得
         URL := Trim(GikoForm.AddressComboBox.Text);  
631          //URLに移動          //URLに移動
632          GikoForm.MoveToURL(URL);      MoveURLWithHistory( Trim(GikoForm.AddressComboBox.Text) );
         //以下、履歴の処理  
         idx := GikoForm.AddressComboBox.Items.IndexOf(URL);  
         if idx = -1 then begin  
                 GikoForm.AddressComboBox.Items.Insert(0, URL);  
                 if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then  
                         GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);  
         end else begin  
                 GikoForm.AddressComboBox.Items.Delete(idx);  
                 GikoForm.AddressComboBox.Items.Insert(0, URL);  
         end;  
633  end;  end;
634  // *************************************************************************  // *************************************************************************
635  //! お気に入りの追加ダイアログを開く  //! お気に入りの追加ダイアログを開く
# Line 714  begin Line 796  begin
796    
797  end;  end;
798  // *************************************************************************  // *************************************************************************
799  //! 選択されているスレッドのURLをコピーする  //! 選択されているお気に入りのURLをコピーする
800  // *************************************************************************  // *************************************************************************
801  procedure TGikoDM.FavoriteTreeViewURLCopyActionExecute(Sender: TObject);  procedure TGikoDM.FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
802  begin  begin
# Line 726  begin Line 808  begin
808          end;          end;
809  end;  end;
810  // *************************************************************************  // *************************************************************************
811  //! 選択されている板の名前をコピーする  //! 選択されているお気に入りの名前をコピーする
812  // *************************************************************************  // *************************************************************************
813  procedure TGikoDM.FavoriteTreeViewNameCopyActionExecute(Sender: TObject);  procedure TGikoDM.FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
814  begin  begin
# Line 736  begin Line 818  begin
818          if (TObject(GikoForm.ClickNode.Data) is TFavoriteItem) then begin          if (TObject(GikoForm.ClickNode.Data) is TFavoriteItem) then begin
819                  Clipboard.AsText :=                  Clipboard.AsText :=
820                          TFavoriteItem(GikoForm.ClickNode.Data).GetItemTitle + #13#10;                          TFavoriteItem(GikoForm.ClickNode.Data).GetItemTitle + #13#10;
821            end else begin
822                    Clipboard.AsText :=
823                            GikoForm.ClickNode.Text + #13#10;
824    
825          end;          end;
826  end;  end;
827  // *************************************************************************  // *************************************************************************
828  //! 選択されているスレッドの名前とURLをコピーする  //! 選択されているお気に入りの名前とURLをコピーする
829  // *************************************************************************  // *************************************************************************
830  procedure TGikoDM.FavoriteTreeViewNameURLCopyActionExecute(  procedure TGikoDM.FavoriteTreeViewNameURLCopyActionExecute(
831    Sender: TObject);    Sender: TObject);
# Line 757  begin Line 843  begin
843    
844  end;  end;
845  // *************************************************************************  // *************************************************************************
846  //! 選択されているスレッドを削除する  //! 選択されているお気に入りスレッドを削除する
847  // *************************************************************************  // *************************************************************************
848  procedure TGikoDM.FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);  procedure TGikoDM.FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
849  const  const
# Line 847  begin Line 933  begin
933    
934          GikoForm.ResRangeMenuSelect     := 100;          GikoForm.ResRangeMenuSelect     := 100;
935          OnlyAHundredResAction.Checked   := True;          OnlyAHundredResAction.Checked   := True;
936          // 表示範囲を設定する          // 表示範囲を設定する。設定値からとってくる。
937          SetResRange(100);      SetResRange(GikoSys.Setting.ResRangeExCount);
938  end;  end;
939  // *************************************************************************  // *************************************************************************
940  //! 未読レスのみ表示  //! 未読レスのみ表示
# Line 884  end; Line 970  end;
970  procedure TGikoDM.SetThreadAreaHorNormal;  procedure TGikoDM.SetThreadAreaHorNormal;
971  begin  begin
972          //通常表示にする          //通常表示にする
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0);  //描画停止  
973          GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;          GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;
974          BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;          BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
975          BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;          BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
976          GikoSys.Setting.ListWidthState := glsNormal;          GikoSys.Setting.ListWidthState := glsNormal;
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0);  //描画  
977  end;  end;
978  // *************************************************************************  // *************************************************************************
979  //! スレッド表示エリア最大/最小表示にする 注)ListOrientation = gloHorizontal   //! スレッド表示エリア最大/最小表示にする 注)ListOrientation = gloHorizontal 
980  // *************************************************************************  // *************************************************************************
981  procedure TGikoDM.SetThreadAreaHorizontal(gls : TGikoListState);  procedure TGikoDM.SetThreadAreaHorizontal(gls : TGikoListState);
982  begin  begin
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0);  //描画停止  
983          if GikoSys.Setting.ListWidthState = glsNormal then          if GikoSys.Setting.ListWidthState = glsNormal then
984                  GikoForm.BrowserSizeWidth := GikoForm.ViewPanel.Width;                  GikoForm.BrowserSizeWidth := GikoForm.ViewPanel.Width;
985          //最大表示          //最大表示
# Line 914  begin Line 994  begin
994                  BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;                  BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
995                  GikoSys.Setting.ListWidthState := glsMin;                  GikoSys.Setting.ListWidthState := glsMin;
996          end;          end;
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0);  //描画  
997  end;  end;
998  // *************************************************************************  // *************************************************************************
999  //! スレッド表示エリア通常表示にする 注)ListOrientation = gloVertical  //! スレッド表示エリア通常表示にする 注)ListOrientation = gloVertical
# Line 923  end; Line 1001  end;
1001  procedure TGikoDM.SetThreadAreaVerNormal;  procedure TGikoDM.SetThreadAreaVerNormal;
1002  begin  begin
1003          //通常表示にする          //通常表示にする
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0);  //描画停止  
1004          GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;          GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;
1005          BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;          BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1006          BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;          BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1007          GikoSys.Setting.ListHeightState := glsNormal;          GikoSys.Setting.ListHeightState := glsNormal;
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0);  //描画  
1008  end;  end;
1009  // *************************************************************************  // *************************************************************************
1010  //! スレッド表示エリア最大/最小表示にする 注)ListOrientation = gloVertical  //! スレッド表示エリア最大/最小表示にする 注)ListOrientation = gloVertical
1011  // *************************************************************************  // *************************************************************************
1012  procedure TGikoDM.SetThreadAreaVertical(gls : TGikoListState);  procedure TGikoDM.SetThreadAreaVertical(gls : TGikoListState);
1013  begin  begin
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 0, 0);  //描画停止  
1014          if GikoSys.Setting.ListHeightState = glsNormal then          if GikoSys.Setting.ListHeightState = glsNormal then
1015                  GikoForm.BrowserSizeHeight := GikoForm.ViewPanel.Height;                  GikoForm.BrowserSizeHeight := GikoForm.ViewPanel.Height;
1016          if (gls = glsMin) then begin          if (gls = glsMin) then begin
# Line 952  begin Line 1024  begin
1024                  BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;                  BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1025                  GikoSys.Setting.ListHeightState := glsMax;                  GikoSys.Setting.ListHeightState := glsMax;
1026          end;          end;
         if GikoForm.ActiveContent <> nil then  
                 SendMessage(GikoForm.ActiveContent.Browser.Handle, WM_SETREDRAW, 1, 0);  //描画  
1027  end;  end;
1028  // *************************************************************************  // *************************************************************************
1029  //! スレッド表示エリアを大きく表示する  //! スレッド表示エリアを大きく表示する
# Line 1247  begin Line 1317  begin
1317                                          if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', ThreadItem.Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then                                          if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', ThreadItem.Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
1318                                                  Exit;                                                  Exit;
1319                          GikoForm.DeleteTab(TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[idx]));                          GikoForm.DeleteTab(TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[idx]));
1320                GikoForm.DeleteHistory(ThreadItem);
1321                          ThreadItem.DeleteLogFile;                          ThreadItem.DeleteLogFile;
1322                          if ThreadItem.ParentBoard = GikoForm.ActiveList then                          if ThreadItem.ParentBoard = GikoForm.ActiveList then
1323                                  GikoForm.ListView.Refresh;                                  GikoForm.ListView.Refresh;
# Line 1264  begin Line 1335  begin
1335          end;          end;
1336  end;  end;
1337  // *************************************************************************  // *************************************************************************
1338    //! 左のタブを選択するのUpdateイベント
1339    // *************************************************************************
1340    procedure TGikoDM.LeftTabSelectActionUpdate(Sender: TObject);
1341    begin
1342        if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1343            LeftmostTabSelectActionUpdate(Sender);
1344        end else begin
1345            TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1346        end;
1347    end;
1348    
1349    // *************************************************************************
1350  //! タブの数が1以上で、タブのインデックスが0以外で有効になるUpdateイベント  //! タブの数が1以上で、タブのインデックスが0以外で有効になるUpdateイベント
1351  // *************************************************************************  // *************************************************************************
1352  procedure TGikoDM.LeftmostTabSelectActionUpdate(Sender: TObject);  procedure TGikoDM.LeftmostTabSelectActionUpdate(Sender: TObject);
# Line 1283  begin Line 1366  begin
1366                  end else if GikoForm.BrowserTab.TabIndex > 0 then begin                  end else if GikoForm.BrowserTab.TabIndex > 0 then begin
1367                          GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex - 1;                          GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex - 1;
1368                          GikoForm.BrowserTab.OnChange(nil);                          GikoForm.BrowserTab.OnChange(nil);
1369                  end;                  end else begin
1370                if (GikoSys.Setting.LoopBrowserTabs) and
1371                    (GikoForm.BrowserTab.TabIndex = 0) then begin
1372                            GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1373                            GikoForm.BrowserTab.OnChange(nil);
1374                end;
1375            end;
1376          end;          end;
1377  end;  end;
1378  // *************************************************************************  // *************************************************************************
# Line 1298  begin Line 1387  begin
1387                  end else if GikoForm.BrowserTab.TabIndex < (GikoForm.BrowserTab.Tabs.Count - 1) then begin                  end else if GikoForm.BrowserTab.TabIndex < (GikoForm.BrowserTab.Tabs.Count - 1) then begin
1388                          GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex + 1;                          GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex + 1;
1389                          GikoForm.BrowserTab.OnChange(nil);                          GikoForm.BrowserTab.OnChange(nil);
1390                  end;                  end else begin
1391                if (GikoSys.Setting.LoopBrowserTabs) and
1392                    (GikoForm.BrowserTab.TabIndex = (GikoForm.BrowserTab.Tabs.Count - 1)) then begin
1393                            GikoForm.BrowserTab.TabIndex := 0;
1394                            GikoForm.BrowserTab.OnChange(nil);
1395                end;
1396            end;
1397          end;          end;
1398  end;  end;
1399  // *************************************************************************  // *************************************************************************
1400  //! タブの数が1以上で、タブが右端以外で有効になるUpdateイベント  //! 右のタブを選択するUpdateイベント
1401  // *************************************************************************  // *************************************************************************
1402  procedure TGikoDM.RightTabSelectActionUpdate(Sender: TObject);  procedure TGikoDM.RightTabSelectActionUpdate(Sender: TObject);
1403  begin  begin
1404          TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)      if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1405                                                                  and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);          RightmostTabSelectActionUpdate(Sender);
1406        end else begin
1407            TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1408        end;
1409  end;  end;
1410    
1411  // *************************************************************************  // *************************************************************************
1412  //! 一番右のタブを選択する  //! 一番右のタブを選択する
1413  // *************************************************************************  // *************************************************************************
# Line 1320  begin Line 1419  begin
1419          end;          end;
1420  end;  end;
1421  // *************************************************************************  // *************************************************************************
1422    //! 一番右のタブを選択するのUpdateイベント
1423    // *************************************************************************
1424    procedure TGikoDM.RightmostTabSelectActionUpdate(Sender: TObject);
1425    begin
1426            TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1427                                                                    and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1428    
1429    end;
1430    // *************************************************************************
1431  //! 選択されているスレッドをお気に入りに追加  //! 選択されているスレッドをお気に入りに追加
1432  // *************************************************************************  // *************************************************************************
1433  procedure TGikoDM.ThreadFavoriteAddActionExecute(Sender: TObject);  procedure TGikoDM.ThreadFavoriteAddActionExecute(Sender: TObject);
# Line 1499  end; Line 1607  end;
1607  ////////////////////////////////スレッドまでおしまい/////////////////////  ////////////////////////////////スレッドまでおしまい/////////////////////
1608  procedure TGikoDM.DataModuleCreate(Sender: TObject);  procedure TGikoDM.DataModuleCreate(Sender: TObject);
1609  begin  begin
1610        // GikoDMよりも早く初期化される必要があるファイルがいるとこける!!
1611        // 初期化順番に注意すること!!
1612        //初回起動時の初期化ファイル設定
1613        TDefaultFileManager.CopyDefaultFiles(
1614            GikoSys.GetAppDir + 'defaultFiles.ini');
1615  end;  end;
1616  // *************************************************************************  // *************************************************************************
1617  //! ログ検索ダイアログを表示する  //! ログ検索ダイアログを表示する
# Line 1901  var Line 2014  var
2014          Dlg: TNewBoardDialog;          Dlg: TNewBoardDialog;
2015          Msg: string;          Msg: string;
2016  begin  begin
2017          if GikoForm.EditorFormExists then begin          if (EditorFormExists) then begin
2018                  Msg := 'レスエディタを全て閉じてください';                  Msg := 'レスエディタを全て閉じてください';
2019                  MsgBox(GikoForm.Handle, Msg, 'エラー', MB_OK or MB_ICONSTOP);                  MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
2020                  Exit;                  Exit;
2021          end;          end;
2022          Dlg := TNewBoardDialog.Create(GikoForm);          Dlg := TNewBoardDialog.Create(GikoForm);
# Line 1956  begin Line 2069  begin
2069                          GikoForm.DeleteHistory(ThreadItem);                          GikoForm.DeleteHistory(ThreadItem);
2070                          GikoForm.DeleteTab(ThreadItem);                          GikoForm.DeleteTab(ThreadItem);
2071                          ThreadItem.DeleteLogFile;                          ThreadItem.DeleteLogFile;
   
                         GikoForm.TreeView.Refresh;      // UnRead の表示を更新  
2072                  end;                  end;
2073            GikoForm.TreeView.Refresh;      // UnRead の表示を更新
2074                  GikoForm.ListView.Refresh;                  GikoForm.ListView.Refresh;
2075          finally          finally
2076                  List.Free;                  List.Free;
# Line 2000  begin Line 2112  begin
2112                  if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then                  if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2113                          Exit;                          Exit;
2114          GikoSys.Setting.NameList.Clear;          GikoSys.Setting.NameList.Clear;
2115          GikoForm.AllEditroFormNameTextClearClear;          ClearNameTextAllEditor
2116  end;  end;
2117  // *************************************************************************  // *************************************************************************
2118  //! レスエディタのメール履歴を消去する  //! レスエディタのメール履歴を消去する
# Line 2014  begin Line 2126  begin
2126                  if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then                  if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2127                          Exit;                          Exit;
2128          GikoSys.Setting.MailList.Clear;          GikoSys.Setting.MailList.Clear;
2129          GikoForm.AllEditroFormMailTextClearClear;          ClearMailAllEditor;
2130  end;  end;
2131  // *************************************************************************  // *************************************************************************
2132  //! ギコナビを終了する  //! ギコナビを終了する
# Line 2119  end; Line 2231  end;
2231  //! タブの順番を保存  //! タブの順番を保存
2232  // *************************************************************************  // *************************************************************************
2233  procedure TGikoDM.TabsSaveActionExecute(Sender: TObject);  procedure TGikoDM.TabsSaveActionExecute(Sender: TObject);
2234    const
2235            Filename = 'tab.sav';
2236            bFilename = '~tab.sav';
2237    var
2238            SaveStringList: TStringList;
2239  begin  begin
2240          if not GikoForm.SaveTabURLs then begin          SaveStringList := TStringList.Create;
2241                  if TabsSaveAction.Tag = 0 then          try
2242                          ShowMessage('保存するタブがありません')                  GetTabURLs(SaveStringList);
2243                  else if TabsSaveAction.Tag = 1 then          try
2244                          GikoDM.TabsOpenAction.Tag := -1;              if FileExists( GikoSys.GetAppDir + Filename) then begin
2245          end;                  CopyFile(PChar(GikoSys.GetAppDir + Filename),
2246  end;                      PChar(GikoSys.GetAppDir + bFilename), False);
2247  // *************************************************************************              end;
2248  //! タブの順番を復元          except
2249  // *************************************************************************          end;
2250  procedure TGikoDM.TabsOpenActionExecute(Sender: TObject);          SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
2251  begin          finally
2252          if TabsOpenAction.Tag <> -1 then begin                  SaveStringList.Free;
                 if not GikoForm.LoadTabURLs then begin  
                         if TabsOpenAction.Tag = 0 then  
                                 ShowMessage('表示するタブがありません。');  
                 end;  
2253          end;          end;
2254  end;  end;
2255  // *************************************************************************  // *************************************************************************
2256  //! タブの順番を自動保存  //! ブラウザタブに設定されているスレッドのURL取得
2257  // *************************************************************************  // *************************************************************************
2258  procedure TGikoDM.TabAutoSaveActionExecute(Sender: TObject);  procedure TGikoDM.GetTabURLs(AStringList: TStringList);
2259  begin  var
2260          GikoForm.SaveTabURLs;    rec : TBrowserRecord;
2261      i : Integer;
2262    begin
2263        for i := 0 to GikoForm.BrowserTab.Tabs.Count -1 do begin
2264            try
2265                rec := TBrowserRecord( GikoForm.BrowserTab.Tabs.Objects[ i ] );
2266                if( rec <> nil) and (rec.Thread <> nil) then
2267                    AStringList.Add( rec.Thread.URL );
2268            except
2269            end;
2270        end;
2271    end;
2272    // *************************************************************************
2273    //! 指定されたURLを開き,先頭のタブにフォーカスする
2274    // *************************************************************************
2275    procedure TGikoDM.OpenURLs(AStringList: TStringList);
2276    var
2277        GikoTab                     : TGikoTabAppend;
2278        i, bound : Integer;
2279            item        : TThreadItem;
2280    begin
2281        if (AStringList <> nil) then begin
2282            GikoTab := GikoSys.Setting.BrowserTabAppend;
2283            try
2284                bound    := AStringList.Count - 1;
2285                if bound > -1 then begin
2286                    GikoSys.Setting.BrowserTabAppend := gtaLast;
2287                    for i := 0 to bound do begin
2288                        item := BBSsFindThreadFromURL( AStringList[ i ] );
2289                        if item <> nil then
2290                            GikoForm.InsertBrowserTab( item, false );
2291                    end;
2292                    //最初の1枚に設定
2293                    if (GikoSys.Setting.URLDisplay) and
2294                        (GikoForm.BrowserTab.Tabs.Count > 0) then begin
2295                                            GikoForm.AddressComboBox.Text :=
2296                            TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[0]).Thread.URL;
2297                    end;
2298                end;
2299            finally
2300                GikoSys.Setting.BrowserTabAppend := GikoTab;
2301            end;
2302        end;
2303  end;  end;
2304  // *************************************************************************  // *************************************************************************
2305  //! タブの順番を自動復元  //! タブの順番を復元
2306  // *************************************************************************  // *************************************************************************
2307  procedure TGikoDM.TabAutoLoadActionExecute(Sender: TObject);  procedure TGikoDM.TabsOpenActionExecute(Sender: TObject);
2308    const
2309            TABFILE = 'tab.sav';
2310    var
2311            URLs                            : TStringList;
2312            fileName                : string;
2313  begin  begin
2314          GikoForm.LoadTabURLs;      URLs := TStringList.Create();
2315            try
2316            fileName := GikoSys.GetAppDir + TABFILE;
2317                    if FileExists(fileName) then begin
2318                        try
2319                                    URLs.LoadFromFile(fileName);
2320                    if (URLs.Count = 0) then begin
2321                        // 空のファイルの場合,バックアップを削除しないために削除
2322                        SysUtils.DeleteFile(fileName);
2323                    end else begin
2324                        OpenURLs(URLs);
2325                    end;
2326                    except
2327                            on EFOpenError do ShowMessage('タブファイルが開けません');
2328                end;
2329            end;
2330            finally
2331            URLs.Free;
2332            end;
2333    
2334        if (GikoForm.BrowserTab.Tabs.Count = 0) and
2335            (TabsOpenAction.Tag <> 1) then  begin
2336            ShowMessage('表示するタブがありません。');
2337        end;
2338  end;  end;
2339  // *************************************************************************  // *************************************************************************
2340  //! Be2chにログイン/ログアウトする  //! Be2chにログイン/ログアウトする
2341  // *************************************************************************  // *************************************************************************
2342  procedure TGikoDM.BeLogInOutActionExecute(Sender: TObject);  procedure TGikoDM.BeLogInOutActionExecute(Sender: TObject);
2343    var
2344            TmpCursor: TCursor;
2345            msg : String;
2346  begin  begin
2347          GikoSys.Setting.BeLogin := not GikoSys.Setting.BeLogin;          if GikoSys.Belib.Connected then begin
2348  end;                  //ログアウト
2349  // *************************************************************************                  GikoSys.Belib.Disconnect;
2350  //! Be2chにログイン/ログアウトするのUpdateイベント                  BeLogInOutAction.Checked := False;
2351  // *************************************************************************                  GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmBeLogout), nil, gmiOK);
2352  procedure TGikoDM.BeLogInOutActionUpdate(Sender: TObject);          end else begin
2353  begin                  TmpCursor := GikoForm.ScreenCursor;
2354          if (GikoSys.Setting.BeUserID <> '') and (GikoSys.Setting.BeCode <> '') then begin                  GikoForm.ScreenCursor := crHourGlass;
2355                  if (GikoSys.Setting.BeLogin) then BeLogInOutAction.Checked := true                  try
2356                  else BeLogInOutAction.Checked := false;                          GikoSys.Belib.ClientUA := 'gikoNavi/1.00';
2357                  BeLogInOutAction.Enabled := true                          GikoSys.Belib.UserName := GikoSys.Setting.BeUserID;
2358          end else                          GikoSys.Belib.Password := GikoSys.Setting.BePassword;
2359                  BeLogInOutAction.Enabled := false;              if GikoSys.Setting.ReadProxy then begin
2360                                    GikoSys.Belib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
2361                                    GikoSys.Belib.ProxyPort := GikoSys.Setting.ReadProxyPort;
2362                            end else begin
2363                    GikoSys.Belib.ProxyAddress := '';
2364                                    GikoSys.Belib.ProxyPort := 0;
2365                end;
2366                if GikoSys.Belib.Connect then begin
2367                    GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmBeLogin) + GikoSys.Setting.BeUserID, nil, gmiOK);
2368                    BeLogInOutAction.Checked := True;
2369                end else begin
2370                    GikoForm.AddMessageList(GikoSys.Belib.ErrorMsg, nil, gmiNG);
2371                    GikoForm.PlaySound('Error');
2372                    BeLogInOutAction.Checked := False;
2373                            end;
2374                    finally
2375                            GikoForm.ScreenCursor := TmpCursor;
2376                    end;
2377            end;
2378  end;  end;
2379  ////////////////////////////////ファイルまでおしまい/////////////////////  ////////////////////////////////ファイルまでおしまい/////////////////////
2380  // *************************************************************************  // *************************************************************************
# Line 2182  var Line 2386  var
2386          ThreadItem: TThreadItem;          ThreadItem: TThreadItem;
2387  begin  begin
2388          No := GikoForm.KokoPopupMenu.Tag;          No := GikoForm.KokoPopupMenu.Tag;
2389          if No = 0 then Exit;          if No = 0
2390          ThreadItem := GikoForm.GetActiveContent;          then Exit;
2391          if ThreadItem = nil then Exit;          ThreadItem := GikoForm.KokoPopupThreadItem;
2392            if not Assigned(ThreadItem) then
2393            Exit;
2394          ThreadItem.Kokomade := No;          ThreadItem.Kokomade := No;
2395          GikoForm.ActiveContent.Thread.ScrollTop :=          GikoForm.ActiveContent.Thread.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
                 OleVariant(IHTMLDocument2(GikoForm.ActiveContent.Browser.Document)).Body.ScrollTop;  
2396          GikoForm.ActiveContent.Repaint := true;          GikoForm.ActiveContent.Repaint := true;
2397          GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);          GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);
2398          //INFO 2005/11/19 一旦隠蔽、必要ならGikoFormの方にメソッドを追加する          //INFO 2005/11/19 一旦隠蔽、必要ならGikoFormの方にメソッドを追加する
# Line 2200  procedure TGikoDM.ZenbuActionExecute(Sen Line 2405  procedure TGikoDM.ZenbuActionExecute(Sen
2405  var  var
2406          ThreadItem: TThreadItem;          ThreadItem: TThreadItem;
2407  begin  begin
2408          ThreadItem := GikoForm.GetActiveContent;          ThreadItem := GikoForm.GetActiveContent(True);
2409          if ThreadItem = nil then Exit;          if ThreadItem = nil then Exit;
2410          ThreadItem.Kokomade := -1;          ThreadItem.Kokomade := -1;
2411          GikoForm.ActiveContent.Thread.ScrollTop :=          GikoForm.ActiveContent.Thread.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
                 OleVariant(IHTMLDocument2(GikoForm.ActiveContent.Browser.Document)).Body.ScrollTop;  
2412          GikoForm.ActiveContent.Repaint := true;          GikoForm.ActiveContent.Repaint := true;
2413          GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);          GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);
2414          //INFO 2005/11/19 一旦隠蔽、必要ならGikoFormの方にメソッドを追加する          //INFO 2005/11/19 一旦隠蔽、必要ならGikoFormの方にメソッドを追加する
# Line 2221  var Line 2425  var
2425  begin  begin
2426          Number := GikoForm.KokoPopupMenu.Tag;          Number := GikoForm.KokoPopupMenu.Tag;
2427          if Number = 0 then Exit;          if Number = 0 then Exit;
2428          Item := GikoForm.GetActiveContent;          Item := GikoForm.KokoPopupThreadItem;
2429          if Item = nil then Exit;          if Item = nil then Exit;
2430    
2431          Editor := TEditorForm.Create(GikoForm);          Editor := TEditorForm.Create(GikoForm);
# Line 2241  end; Line 2445  end;
2445  //! 選択したレスをコピーする  //! 選択したレスをコピーする
2446  // *************************************************************************  // *************************************************************************
2447  procedure TGikoDM.SameIDResAnchorActionExecute(Sender: TObject);  procedure TGikoDM.SameIDResAnchorActionExecute(Sender: TObject);
2448    const
2449        LIMIT = 20;
2450  var  var
2451          ThreadItem : TThreadItem;          ThreadItem : TThreadItem;
2452          No, count, rc : Integer;          No : Integer;
2453          body : string;          AID: string;
         limited: boolean;  
2454  begin  begin
2455          No := GikoForm.KokoPopupMenu.Tag;          No := GikoForm.KokoPopupMenu.Tag;
2456          if No = 0 then Exit;          if No = 0 then Exit;
2457          ThreadItem := GikoForm.GetActiveContent;          ThreadItem := GikoForm.KokoPopupThreadItem;
2458          if ThreadItem = nil then Exit;          if ThreadItem = nil then Exit;
2459          count := GikoSys.GetSameIDResCount(No, GikoForm.ActiveContent.Thread);  
2460          limited := false;      AID := GikoSys.GetResID(No, ThreadItem);
2461          if count > 20 then begin      if not IsNoValidID(AID) then begin
2462                  rc := GikoUtil.MsgBox(GikoForm.Handle,          GikoForm.ShowSameIDAncher(AID);
2463                                  '20個以上ありますが、すべて表示しますか?',      end;
                                 'IDポップアップ警告',  
                                 MB_YESNO or MB_ICONQUESTION);  
                 limited := rc <> ID_YES;  
         end;  
         body := GikoSys.GetSameIDResAnchor(No, ThreadItem, limited);  
         GikoForm.ActiveContent.IDAnchorPopup(body);  
2464  end;  end;
2465  // *************************************************************************  // *************************************************************************
2466  //! このレスあぼ〜ん (通常)  //! このレスあぼ〜ん (通常)
# Line 2290  var Line 2489  var
2489  begin  begin
2490          IndividualForm := TIndividualAbonForm.Create(GikoForm);          IndividualForm := TIndividualAbonForm.Create(GikoForm);
2491          try          try
2492                  ThreadItem := GikoForm.GetActiveContent;                  ThreadItem := GikoForm.GetActiveContent(True);
2493                  ThreadItem.ScrollTop :=                  ThreadItem.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
                         OleVariant(IHTMLDocument2(GikoForm.ActiveContent.Browser.Document)).Body.ScrollTop;  
2494                  if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin                  if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
2495                          if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin                          if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
2496                                  ReadList                := TStringList.Create;                                  ReadList                := TStringList.Create;
# Line 2338  var Line 2536  var
2536  begin  begin
2537          IndividualForm := TIndividualAbonForm.Create(GikoForm);          IndividualForm := TIndividualAbonForm.Create(GikoForm);
2538          try          try
2539                  ThreadItem := GikoForm.GetActiveContent;                  ThreadItem := GikoForm.GetActiveContent(True);
2540                  ThreadItem.ScrollTop :=                  ThreadItem.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
                         OleVariant(IHTMLDocument2(GikoForm.ActiveContent.Browser.Document)).Body.ScrollTop;  
2541                  if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin                  if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
2542                          if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin                          if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
2543                                  if (IndividualForm.ShowModal = mrOK) then begin                                  if (IndividualForm.ShowModal = mrOK) then begin
# Line 2394  end; Line 2591  end;
2591  // *************************************************************************  // *************************************************************************
2592  procedure TGikoDM.GikoNaviWebPageActionExecute(Sender: TObject);  procedure TGikoDM.GikoNaviWebPageActionExecute(Sender: TObject);
2593  begin  begin
2594          GikoSys.OpenBrowser(URL_GIKONAVI, gbtAuto);          GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_GIKONAVI, gbtAuto);
2595  end;  end;
2596  // *************************************************************************  // *************************************************************************
2597  //! モナジラのウェブサイトを表示する  //! モナジラのウェブサイトを表示する
2598  // *************************************************************************  // *************************************************************************
2599  procedure TGikoDM.MonazillaWebPageActionExecute(Sender: TObject);  procedure TGikoDM.MonazillaWebPageActionExecute(Sender: TObject);
2600  begin  begin
2601          GikoSys.OpenBrowser(URL_MONAZILLA, gbtAuto);          GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_MONAZILLA, gbtAuto);
2602  end;  end;
2603  // *************************************************************************  // *************************************************************************
2604  //! 2ちゃんねるトップページを表示する  //! 2ちゃんねるトップページを表示する
2605  // *************************************************************************  // *************************************************************************
2606  procedure TGikoDM.BBS2chWebPageActionExecute(Sender: TObject);  procedure TGikoDM.BBS2chWebPageActionExecute(Sender: TObject);
2607  begin  begin
2608          GikoSys.OpenBrowser(URL_2ch, gbtAuto);          GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_2ch, gbtAuto);
2609  end;  end;
2610  // *************************************************************************  // *************************************************************************
2611  //! ギコナビのフォルダを開く  //! ギコナビのフォルダを開く
# Line 2445  begin Line 2642  begin
2642                          'ヘルプが見つかりませんでした' + #13#10 +                          'ヘルプが見つかりませんでした' + #13#10 +
2643                          'ヘルプファイルをギコナビのフォルダに置いてください' + #13#10 +                          'ヘルプファイルをギコナビのフォルダに置いてください' + #13#10 +
2644                          'ヘルプはギコナビのサイトに置いてあります',                          'ヘルプはギコナビのサイトに置いてあります',
2645                          'エラー',                          MSG_ERROR,
2646                          MB_ICONSTOP);                          MB_ICONSTOP);
2647                  Exit;                  Exit;
2648          end;          end;
# Line 2456  end; Line 2653  end;
2653  // *************************************************************************  // *************************************************************************
2654  procedure TGikoDM.WikiFAQWebPageActionExecute(Sender: TObject);  procedure TGikoDM.WikiFAQWebPageActionExecute(Sender: TObject);
2655  begin  begin
2656          GikoSys.OpenBrowser(URL_Wiki, gbtAuto);          GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_Wiki, gbtAuto);
2657  end;  end;
2658  ////////////////////////////////ヘルプまでおしまい/////////////////////  ////////////////////////////////ヘルプまでおしまい/////////////////////
2659  // *************************************************************************  // *************************************************************************
# Line 2484  end; Line 2681  end;
2681  // *************************************************************************  // *************************************************************************
2682  procedure TGikoDM.UpFolderActionUpdate(Sender: TObject);  procedure TGikoDM.UpFolderActionUpdate(Sender: TObject);
2683  begin  begin
2684          UpFolderAction.Enabled := not (GikoForm.GetActiveList is TBBS);          UpFolderAction.Enabled := not (GikoForm.GetActiveList is TBBS) and
2685            (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
2686  end;  end;
2687  // *************************************************************************  // *************************************************************************
2688  //! 表示 表示リストのモード変更  //! 表示 表示リストのモード変更
# Line 2499  begin Line 2697  begin
2697          end;          end;
2698  end;  end;
2699  // *************************************************************************  // *************************************************************************
2700    //! SelectComboBoxの値をクリアする
2701    // *************************************************************************
2702    procedure TGikoDM.ClearSelectComboBox;
2703    begin
2704            if GikoForm.SelectComboBoxPanel.Visible then begin
2705                    GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2706                    GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2707                    GikoForm.ListView.SetFocus;
2708            end;
2709    end;
2710    // *************************************************************************
2711  //! スレッドをすべて表示する  //! スレッドをすべて表示する
2712  // *************************************************************************  // *************************************************************************
2713  procedure TGikoDM.AllItemActionExecute(Sender: TObject);  procedure TGikoDM.AllItemActionExecute(Sender: TObject);
# Line 2511  begin Line 2720  begin
2720                  // SelectComboBox の履歴を更新しておく                  // SelectComboBox の履歴を更新しておく
2721                  GikoForm.ModifySelectList;                  GikoForm.ModifySelectList;
2722                  // SelectComboBox の値をクリア                  // SelectComboBox の値をクリア
2723                  if GikoForm.SelectComboBoxPanel.Visible then begin                  ClearSelectComboBox;
                         GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;  
                         GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;  
                         GikoForm.ListView.SetFocus;  
                 end;  
2724          except          except
2725          end;          end;
2726  end;  end;
# Line 2532  begin Line 2737  begin
2737                  // SelectComboBox の履歴を更新しておく                  // SelectComboBox の履歴を更新しておく
2738                  GikoForm.ModifySelectList;                  GikoForm.ModifySelectList;
2739                  // SelectComboBox の値をクリア                  // SelectComboBox の値をクリア
2740                  if GikoForm.SelectComboBoxPanel.Visible  then begin                  ClearSelectComboBox;
                         GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;  
                         GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;  
                         GikoForm.ListView.SetFocus;  
                 end;  
2741          except          except
2742          end;          end;
2743  end;  end;
# Line 2554  begin Line 2755  begin
2755                  // SelectComboBox の履歴を更新しておく                  // SelectComboBox の履歴を更新しておく
2756                  GikoForm.ModifySelectList;                  GikoForm.ModifySelectList;
2757                  // SelectComboBox の値をクリア                  // SelectComboBox の値をクリア
2758                  if GikoForm.SelectComboBoxPanel.Visible then begin                  ClearSelectComboBox;
                         GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;  
                         GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;  
                         GikoForm.ListView.SetFocus;  
                 end;  
2759          except          except
2760          end;          end;
2761  end;  end;
2762  // *************************************************************************  // *************************************************************************
2763    //! DAT落ちスレッドのみ表示する
2764    // *************************************************************************
2765    procedure TGikoDM.ArchiveItemActionExecute(Sender: TObject);
2766    begin
2767            try
2768                    if GikoForm.ViewType <> gvtArch then
2769                            GikoForm.SetListViewType(gvtArch);
2770                    GikoSys.Setting.ThreadRange     := gtrArch;
2771                    ArchiveItemAction.Checked := True;
2772                    // SelectComboBox の履歴を更新しておく
2773                    GikoForm.ModifySelectList;
2774                    // SelectComboBox の値をクリア
2775                    ClearSelectComboBox;
2776            except
2777            end;
2778    end;
2779    // *************************************************************************
2780    //! 生存スレッドのみ表示する
2781    // *************************************************************************
2782    procedure TGikoDM.LiveItemActionExecute(Sender: TObject);
2783    begin
2784            try
2785                    if GikoForm.ViewType <> gvtLive then
2786                            GikoForm.SetListViewType(gvtLive);
2787                    GikoSys.Setting.ThreadRange     := gtrLive;
2788                    LiveItemAction.Checked := True;
2789                    // SelectComboBox の履歴を更新しておく
2790                    GikoForm.ModifySelectList;
2791                    // SelectComboBox の値をクリア
2792                    ClearSelectComboBox;
2793            except
2794            end;
2795    end;
2796    
2797    // *************************************************************************
2798  //! スレッドの表示範囲を設定  //! スレッドの表示範囲を設定
2799  // *************************************************************************  // *************************************************************************
2800  procedure TGikoDM.ThreadRangeActionExecute(Sender: TObject);  procedure TGikoDM.ThreadRangeActionExecute(Sender: TObject);
# Line 2571  begin Line 2803  begin
2803          gtrAll: AllItemAction.Execute;          gtrAll: AllItemAction.Execute;
2804          gtrLog: LogItemAction.Execute;          gtrLog: LogItemAction.Execute;
2805          gtrNew: NewItemAction.Execute;          gtrNew: NewItemAction.Execute;
2806            gtrArch: ArchiveItemAction.Execute;
2807            gtrLive: LiveItemAction.Execute;
2808          end;          end;
2809  end;  end;
2810  // *************************************************************************  // *************************************************************************
# Line 2721  begin Line 2955  begin
2955          try          try
2956                  GikoForm.SelectListItem(List);                  GikoForm.SelectListItem(List);
2957                  for i := 0 to List.Count - 1 do begin                  for i := 0 to List.Count - 1 do begin
2958                          if TObject(List[i]) is TBoard then              if TObject(List[i]) is TCategory then
2959                    s := s + TCategory(List[i]).Title + #13#10
2960                            else if TObject(List[i]) is TBoard then
2961                                  s := s + TBoard(List[i]).Title + #13#10                                  s := s + TBoard(List[i]).Title + #13#10
2962                          else if TObject(List[i]) is TThreadItem then                          else if TObject(List[i]) is TThreadItem then
2963                                  s := s + TThreadItem(List[i]).Title + #13#10;                                  s := s + TThreadItem(List[i]).Title + #13#10;
# Line 2737  end; Line 2973  end;
2973  // *************************************************************************  // *************************************************************************
2974  procedure TGikoDM.SelectItemNameCopyActionUpdate(Sender: TObject);  procedure TGikoDM.SelectItemNameCopyActionUpdate(Sender: TObject);
2975  begin  begin
2976          if ((GikoForm.GetActiveList is TBoard) or          if ((GikoForm.GetActiveList is TBBS) or
2977            (GikoForm.GetActiveList is TBoard) or
2978                  (GikoForm.GetActiveList is TCategory))and (GikoForm.ListView.SelCount > 0) then                  (GikoForm.GetActiveList is TCategory))and (GikoForm.ListView.SelCount > 0) then
2979                  TAction(Sender).Enabled := True                  TAction(Sender).Enabled := True
2980          else          else
# Line 2779  var Line 3016  var
3016          shiftDown: Boolean;          shiftDown: Boolean;
3017  begin  begin
3018          shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);          shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
3019        GikoForm.ActiveListColumnSave;
3020          if GikoForm.GetActiveList is TCategory then begin          if GikoForm.GetActiveList is TCategory then begin
3021                  List := TList.Create;                  List := TList.Create;
3022                  try                  try
# Line 2807  procedure TGikoDM.SelectListReloadAction Line 3045  procedure TGikoDM.SelectListReloadAction
3045  begin  begin
3046          if (GikoForm.GetActiveList is TCategory) and (GikoForm.ListView.SelCount > 0) then          if (GikoForm.GetActiveList is TCategory) and (GikoForm.ListView.SelCount > 0) then
3047                  TAction(Sender).Enabled := True                  TAction(Sender).Enabled := True
3048          else if GikoForm.GetActiveList is TBoard then          else if GikoForm.GetActiveList is TBoard then begin
3049                  TAction(Sender).Enabled := True                  TAction(Sender).Enabled :=
3050          else              (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
3051            end else
3052                  TAction(Sender).Enabled := False;                  TAction(Sender).Enabled := False;
3053  end;  end;
3054  // *************************************************************************  // *************************************************************************
# Line 2903  begin Line 3142  begin
3142          cnt := RoundList.Count[grtBoard];          cnt := RoundList.Count[grtBoard];
3143          cnt := cnt + RoundList.Count[grtItem];          cnt := cnt + RoundList.Count[grtItem];
3144          if cnt > 500 then begin          if cnt > 500 then begin
3145                          MsgBox(GikoForm.Handle, '巡回は500以上登録できません', 'エラー', MB_OK or MB_ICONSTOP);                          MsgBox(GikoForm.Handle, '巡回は500以上登録できません', MSG_ERROR, MB_OK or MB_ICONSTOP);
3146                          Exit;                          Exit;
3147          end;          end;
3148    
# Line 3007  end; Line 3246  end;
3246  // *************************************************************************  // *************************************************************************
3247  procedure TGikoDM.LogFolderOpenActionUpdate(Sender: TObject);  procedure TGikoDM.LogFolderOpenActionUpdate(Sender: TObject);
3248  begin  begin
3249          if ((GikoForm.GetActiveList is TBoard) or (GikoForm.GetActiveList is TCategory))          if (((GikoForm.GetActiveList is TBoard) and
3250                  and (GikoForm.ListView.SelCount > 0) then          (GikoForm.GetActiveList <> BoardGroup.SpecialBoard))
3251            or (GikoForm.GetActiveList is TCategory))
3252                    and (GikoForm.ListView.SelCount > 0) then
3253                  TAction(Sender).Enabled := True                  TAction(Sender).Enabled := True
3254          else          else
3255                  TAction(Sender).Enabled := False;                  TAction(Sender).Enabled := False;
# Line 3562  end; Line 3803  end;
3803  // *************************************************************************  // *************************************************************************
3804  procedure TGikoDM.SetFocusForBrowserActionExecute(Sender: TObject);  procedure TGikoDM.SetFocusForBrowserActionExecute(Sender: TObject);
3805  begin  begin
3806          GikoForm.ActiveContent.Browser.SetFocus;      GikoForm.ActiveContent.Browser.SetFocus;
3807  end;  end;
3808  // *************************************************************************  // *************************************************************************
3809  //! ブラウザにフォーカスを当てるUpdateイベント  //! ブラウザにフォーカスを当てるUpdateイベント
# Line 3780  begin Line 4021  begin
4021          GikoForm.ProgressBar.Position := 0;          GikoForm.ProgressBar.Position := 0;
4022          ShowMessage('計算終了しました。');          ShowMessage('計算終了しました。');
4023  end;  end;
4024    // *************************************************************************
4025    //! 入力アシストの設定フォームを呼び出す
4026    // *************************************************************************
4027    procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject);
4028    var
4029            form : TInputAssistForm;
4030    begin
4031            form := TInputAssistForm.Create(GikoForm);
4032            try
4033                    form.SetUpFromMain;
4034                    form.ShowModal;
4035            finally
4036                    form.Release;
4037            end;
4038    end;
4039    // *************************************************************************
4040    //! 現在表示しているスレッドの検索ダイアログを表示する
4041    // *************************************************************************
4042    procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
4043    begin
4044            if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
4045            GikoForm.ActiveContent.OpenFindDialog;
4046            end;
4047    end;
4048    
4049    // *************************************************************************
4050    //! 選択されているお気に入りの表示名をコピーする
4051    // *************************************************************************
4052    procedure TGikoDM.FavoriteTreeViewItemNameCopyActionExecute(
4053      Sender: TObject);
4054    begin
4055            if GikoForm.ClickNode = nil then Exit;
4056    
4057            Clipboard.AsText :=
4058                            GikoForm.ClickNode.Text + #13#10;
4059    end;
4060    
4061    // *************************************************************************
4062    //! 表示されているすべてのレスエディタを閉じる
4063    // *************************************************************************
4064    procedure TGikoDM.CloseAllEditorActionExecute(Sender: TObject);
4065    var
4066        i : Integer;
4067    begin
4068        if ( EditorFormExists ) then begin
4069            //スクリーン上の全てのフォームから、EditorFormを閉じる
4070                for i := Screen.CustomFormCount - 1 downto 0 do begin
4071                    if TObject(Screen.CustomForms[i]) is TEditorForm then begin
4072                    TEditorForm(Screen.CustomForms[i]).Close;
4073                    end;
4074                end;
4075        end;
4076    end;
4077    // *************************************************************************
4078    //! スクリーン上にレスエディタがいた場合,有効になる
4079    // *************************************************************************
4080    procedure TGikoDM.CloseAllEditorActionUpdate(Sender: TObject);
4081    begin
4082        if (Sender is TAction) then begin
4083            TAction(Sender).Enabled := EditorFormExists;
4084        end;
4085    end;
4086    // *************************************************************************
4087    //! スクリーン上にEditorFormがいるか
4088    // *************************************************************************
4089    function TGikoDM.EditorFormExists(): boolean;
4090    var
4091            i : Integer;
4092    begin
4093            Result := false;
4094            //スクリーン上の全てのフォームから、EditorFormを探す
4095            for i := Screen.CustomFormCount - 1 downto 0 do begin
4096                    if (Screen.CustomForms[i] is TEditorForm) then begin
4097                            Result := true;
4098                            Break;
4099                    end;
4100            end;
4101    end;
4102    
4103    // *************************************************************************
4104    //! スクリーン上にいるすべてのEditorFormから名前の履歴を削除する
4105    // *************************************************************************
4106    procedure TGikoDM.ClearNameTextAllEditor();
4107    var
4108            i : Integer;
4109    begin
4110            for i := 0 to Screen.CustomFormCount - 1 do begin
4111                    if (Screen.CustomForms[i] is TEditorForm) then begin
4112                            TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
4113            end;
4114            end;
4115    end;
4116    // *************************************************************************
4117    //! スクリーン上にいるすべてのEditorFormからメール履歴を削除する
4118    // *************************************************************************
4119    procedure TGikoDM.ClearMailAllEditor();
4120    var
4121            i : Integer;
4122    begin
4123            for i := 0 to Screen.CustomFormCount - 1 do begin
4124                    if TObject(Screen.CustomForms[i]) is TEditorForm then
4125                            TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
4126            end;
4127    end;
4128    
4129    // *************************************************************************
4130    //! リンク履歴を戻るの更新処理
4131    // *************************************************************************
4132    procedure TGikoDM.PrevMoveHistoryUpdate(Sender: TObject);
4133    begin
4134          PrevMoveHistory.Enabled :=
4135              (MoveHisotryManager.HisotryIndex > 0)
4136    end;
4137    // *************************************************************************
4138    //! リンク履歴を戻る
4139    // *************************************************************************
4140    procedure TGikoDM.PrevMoveHistoryExecute(Sender: TObject);
4141    begin
4142        if ( GikoForm.BrowserTab.TabIndex >= 0 ) then begin
4143            BackToHistory(MoveHisotryManager.getPrevItem
4144                (TBrowserRecord(GikoForm.BrowserTab.Tabs
4145                        .Objects[GikoForm.BrowserTab.TabIndex])));
4146        end else begin
4147            BackToHistory(MoveHisotryManager.getPrevItem( nil ) );
4148        end;
4149    end;
4150    //! リンク履歴処理
4151    procedure TGikoDM.BackToHistory(item: TMoveHistoryItem);
4152    var
4153        browser : TWebBrowser;
4154        doc : IHTMLDocument2;
4155    begin
4156        if ( item <> nil ) then begin
4157            if ( GikoForm.GetActiveContent = item.ThreadItem ) then begin
4158                browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4159                    .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4160                if (browser <> nil) then begin
4161                    try
4162                        doc := browser.ControlInterface.Document as IHTMLDocument2;
4163                        (doc.body as IHTMLElement2).ScrollTop := item.ScrollTop;
4164                    except
4165                    end;
4166                end;
4167            end else begin
4168                //URLに移動
4169                MoveURLWithHistory(item.ThreadItem.URL, True);
4170            end;
4171        end;
4172    end;
4173    //! 履歴処理つきURL移動
4174    procedure TGikoDM.MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
4175    var
4176        idx : Integer;
4177    begin
4178        //URLに移動
4179        GikoForm.MoveToURL(URL, KeyMask);
4180        //以下、履歴の処理
4181        idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
4182        if idx = -1 then begin
4183            GikoForm.AddressComboBox.Items.Insert(0, URL);
4184            if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4185                GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
4186        end else begin
4187            GikoForm.AddressComboBox.Items.Delete(idx);
4188            GikoForm.AddressComboBox.Items.Insert(0, URL);
4189        end;
4190    end;
4191    // *************************************************************************
4192    //! リンク履歴を進むの更新処理
4193    // *************************************************************************
4194    procedure TGikoDM.NextMoveHistoryUpdate(Sender: TObject);
4195    begin
4196        NextMoveHistory.Enabled :=
4197              (MoveHisotryManager.HisotryIndex < MoveHisotryManager.Count - 1);
4198    end;
4199    // *************************************************************************
4200    //! リンク履歴を進む
4201    // *************************************************************************
4202    procedure TGikoDM.NextMoveHistoryExecute(Sender: TObject);
4203    begin
4204        BackToHistory(MoveHisotryManager.getNextItem);
4205    end;
4206    // *************************************************************************
4207    //! アクティブ要素のクリック
4208    // *************************************************************************
4209    procedure TGikoDM.ClickActiveElementActionExecute(Sender: TObject);
4210    var
4211        browser : TWebBrowser;
4212        elem : IHTMLElement;
4213        doc : IHTMLDocument2;
4214    begin
4215        if (GikoForm.GetActiveContent <> nil) then begin
4216            if (GikoForm.BrowserTab.Tabs.Count > 0) and
4217                (GikoForm.BrowserTab.TabIndex >= 0) then begin
4218                browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4219                    .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4220                if (browser <> nil) then begin
4221                    try
4222                        doc := browser.ControlInterface.Document as IHTMLDocument2;
4223                        if Assigned(doc) then begin
4224                            elem := doc.activeElement;
4225                            if Assigned(elem) then begin
4226                                elem.click;
4227                            end;
4228                        end;
4229                    except
4230                    end;
4231                end;
4232    
4233            end;
4234        end;
4235    end;
4236    //! ↓キーのエミュレートアクション
4237    procedure TGikoDM.VKDownActionExecute(Sender: TObject);
4238    begin
4239        keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
4240        keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4241    end;
4242    //! ↑キーのエミュレートアクション
4243    procedure TGikoDM.VKUpActionExecute(Sender: TObject);
4244    begin
4245        keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
4246        keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4247    end;
4248    //! →キーのエミュレートアクション
4249    procedure TGikoDM.VKRightActionExecute(Sender: TObject);
4250    begin
4251        keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4252        keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4253    end;
4254    //! ←キーのエミュレートアクション
4255    procedure TGikoDM.VKLeftActionExecute(Sender: TObject);
4256    begin
4257        keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4258        keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4259    end;
4260    //! タスクトレイに格納する
4261    procedure TGikoDM.StoredTaskTrayActionExecute(Sender: TObject);
4262    begin
4263        GikoForm.StoredTaskTray;
4264        StoredTaskTrayAction.Tag := -1;
4265    end;
4266    
4267    {
4268    \breif  リンクイメージ取得
4269    イメージは,*.jpg, *.jpeg, *.gif, *.png
4270    }
4271    procedure TGikoDM.AllImageLinkToClipbordActionExecute(Sender: TObject);
4272    var
4273        links : IHTMLElementCollection;
4274        urls, exts : TStringList;
4275    begin
4276        links := GetActiveThreadLinks;
4277        if (links <> nil) then begin
4278            urls := TStringList.Create;
4279            exts := TStringList.Create;
4280            try
4281                exts.CaseSensitive := False;
4282                exts.Sorted := True;
4283                exts.Delimiter := ';';
4284                exts.DelimitedText := '.gif;.jpg;.jpeg;.png';
4285                GetLinkURLs(links, urls, 0, exts);
4286                Clipboard.SetTextBuf(urls.GetText);
4287            finally
4288                exts.Free;
4289                urls.Free;
4290            end;
4291        end;
4292    end;
4293    
4294    {
4295    \breif  新着レスのリンクイメージ取得
4296    イメージは,*.jpg, *.jpeg, *.gif, *.png
4297    }
4298    procedure TGikoDM.NewImageLinkToClipBoardActionExecute(Sender: TObject);
4299    var
4300        links : IHTMLElementCollection;
4301        urls, exts : TStringList;
4302        ThreadItem : TThreadItem;
4303    begin
4304        ThreadItem := GikoForm.GetActiveContent;
4305        links := GetActiveThreadLinks;
4306        if (ThreadItem <> nil) and (links <> nil) then begin
4307            urls := TStringList.Create;
4308            exts := TStringList.Create;
4309            try
4310                exts.CaseSensitive := False;
4311                exts.Sorted := True;
4312                exts.Delimiter := ';';
4313                exts.DelimitedText := '.gif;.jpg;.jpeg;.png';
4314    
4315                GetLinkURLs(links, urls,
4316                    (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
4317                Clipboard.SetTextBuf(urls.GetText);
4318            finally
4319                exts.Free;
4320                urls.Free;
4321            end;
4322        end;
4323    end;
4324    {
4325    \breif  リンクURL取得
4326    対象拡張子は、詳細設定で設定されている
4327    }
4328    procedure TGikoDM.AllLinkToClipboardActionExecute(Sender: TObject);
4329    var
4330        links : IHTMLElementCollection;
4331        urls, exts : TStringList;
4332    begin
4333        links := GetActiveThreadLinks;
4334        if (links <> nil) then begin
4335            urls := TStringList.Create;
4336            exts := TStringList.Create;
4337            try
4338                exts.CaseSensitive := False;
4339                exts.Sorted := True;
4340                exts.Delimiter := ';';
4341                exts.DelimitedText :=
4342                    MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
4343                GetLinkURLs(links, urls, 0, exts);
4344                Clipboard.SetTextBuf(urls.GetText);
4345            finally
4346                exts.Free;
4347                urls.Free;
4348            end;
4349        end;
4350    end;
4351    {
4352    \breif  新着レスリンクURL取得
4353    対象拡張子は、詳細設定で設定されている
4354    }
4355    procedure TGikoDM.NewLinkToClipboardActionExecute(Sender: TObject);
4356    var
4357        links : IHTMLElementCollection;
4358        urls, exts : TStringList;
4359        ThreadItem : TThreadItem;
4360    begin
4361        ThreadItem := GikoForm.GetActiveContent;
4362        links := GetActiveThreadLinks;
4363        if (ThreadItem <> nil) and (links <> nil) then begin
4364            urls := TStringList.Create;
4365            exts := TStringList.Create;
4366            try
4367                exts.CaseSensitive := False;
4368                exts.Sorted := True;
4369                exts.Delimiter := ';';
4370                exts.DelimitedText :=
4371                    MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
4372                GetLinkURLs(links, urls,
4373                    (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
4374                Clipboard.SetTextBuf(urls.GetText);
4375            finally
4376                exts.Free;
4377                urls.Free;
4378            end;
4379        end;
4380    end;
4381    
4382    {
4383    \brief  現在表示しているスレッドのすべてのリンクを取得する。
4384    \return IHTMLElementCollection  リンクのコレクション
4385    }
4386    function TGikoDM.GetActiveThreadLinks : IHTMLElementCollection;
4387    var
4388        browser : TWebBrowser;
4389        doc : IHTMLDocument2;
4390    begin
4391        Result := nil;
4392        if (GikoForm.GetActiveContent <> nil) then begin
4393            if (GikoForm.BrowserTab.Tabs.Count > 0) and
4394                (GikoForm.BrowserTab.TabIndex >= 0) then begin
4395                browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4396                    .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4397                if (browser <> nil) then begin
4398                    try
4399                        doc := browser.ControlInterface.Document as IHTMLDocument2;
4400                        if Assigned(doc) then begin
4401                            Result := doc.links;
4402                        end;
4403                    except
4404                        Result := nil;
4405                    end;
4406                end;
4407    
4408            end;
4409        end;
4410    end;
4411    {
4412    \brief  リンクのURLを取得する
4413    \param  links   取得するリンクの全体のコレクション
4414    \param  URLs    取得したURLの保存先
4415    \param  Start   設定したレス番号以降を取得( > 0)
4416    \param  Exts    取得するリンクの拡張子
4417    }
4418    procedure TGikoDM.GetLinkURLs(links : IHTMLElementCollection;
4419            URLs : TStringList; const Start: Integer; Exts : TStringList);
4420    var
4421        index ,i, j : Integer;
4422        item : IHTMLElement;
4423        url, ext : string;
4424    begin
4425        if (links <> nil) then begin
4426            index := 0;
4427            for i := 0 to links.length - 1 do begin
4428                item := links.item(i, 0) as IHTMLElement;
4429                if (item <> nil) then begin
4430                    url := item.getAttribute('href', 0);
4431                    // レスの番号を更新
4432                    if (Pos('menu:', url) > 0) then begin
4433                        index := StrToInt64Def(
4434                            Copy(url, 6, Length(url)), index + 1
4435                        );
4436                    end else begin
4437                        // 開始レス番号以降かチェック
4438                        if (index >= Start) then begin
4439                            ext := ExtractFileExt( AnsiLowerCase(url) );
4440                            // 拡張子をチェック
4441                            if Exts.Find(ext, j) then begin
4442                                urls.Add(url)
4443                            end;
4444                        end;
4445                    end;
4446                end;
4447            end;
4448        end;
4449    end;
4450    {
4451    \brief  アドレスバーにフォーカスを当てる
4452    \param  Sender   イベントの発生元
4453    }
4454    procedure TGikoDM.SetForcusForAddresBarActionExecute(Sender: TObject);
4455    begin
4456        if ( GikoForm.AddressToolBar.Visible ) then begin
4457            GikoForm.AddressComboBox.SetFocus;
4458        end
4459    end;
4460    {
4461    \brief  移転した板のURLを取得するダイアグラムを表示する
4462    }
4463    procedure TGikoDM.NewBoardSearchActionExecute(Sender: TObject);
4464    var
4465        form : TNewBoardURLForm;
4466            Msg: string;
4467    begin
4468            if (EditorFormExists) then begin
4469                    Msg := 'レスエディタを全て閉じてください';
4470                    MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4471                    Exit;
4472            end;
4473        form := TNewBoardURLForm.Create(Self);
4474        try
4475            form.ShowModal;
4476        finally
4477            form.Release;
4478        end;
4479    end;
4480    //! ブラウザを1ページ分スクロールさせる
4481    procedure TGikoDM.ScrollPageDownActionExecute(Sender: TObject);
4482    begin
4483        GikoForm.BrowserMovement(GikoForm.BrowserPanel.Height);
4484    end;
4485    //! ブラウザを1ページ分スクロールさせる
4486    procedure TGikoDM.ScrollPageUpActionExecute(Sender: TObject);
4487    begin
4488        GikoForm.BrowserMovement(-GikoForm.BrowserPanel.Height);
4489    end;
4490    
4491    
4492    //! このレスのIDをNGワードに追加する(透明)
4493    procedure TGikoDM.AddIDtoNGWord0ActionExecute(Sender: TObject);
4494    begin
4495        GikoForm.AddIDtoNGWord(true);
4496    end;
4497    //! このレスのIDをNGワードに追加する
4498    procedure TGikoDM.AddIDtoNGWord1ActionExecute(Sender: TObject);
4499    begin
4500        GikoForm.AddIDtoNGWord(false);
4501    end;
4502    //! クリップボードの文字列をIDとして同一IDレスアンカー表示
4503    procedure TGikoDM.ExtractSameIDActionExecute(Sender: TObject);
4504    var
4505        ID: String;
4506    begin
4507        ID := Trim(Clipboard.AsText);
4508        if (Length(ID) > 0) then begin
4509            if not IsNoValidID(ID) then begin
4510                GikoForm.ShowSameIDAncher(ID);
4511            end;
4512        end;
4513    end;
4514    //! タブのスレッド一覧を表示する
4515    procedure TGikoDM.ShowTabListActionExecute(Sender: TObject);
4516    var
4517        i : Integer;
4518    begin
4519        GikoForm.ListView.Items.BeginUpdate;
4520        GikoForm.ListView.Items.Clear;
4521        BoardGroup.SpecialBoard.Clear;
4522            for i := GikoForm.BrowserTab.Tabs.Count - 1 downto 0 do begin
4523            BoardGroup.SpecialBoard.Add(
4524                    TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Thread);
4525            end;
4526        GikoForm.ListView.Items.EndUpdate;
4527        GikoForm.SetActiveList(BoardGroup.SpecialBoard);
4528    end;
4529    //! 逆参照しているレスを追加する
4530    procedure TGikoDM.DereferenceResActionExecute(Sender: TObject);
4531    var
4532            i, currentNo, No : Integer;
4533        links : IHTMLElementCollection;
4534        threadItem : TThreadItem;
4535        item : IHTMLElement;
4536        url, url2 : string;
4537        resNo : TStringList;
4538        alreadyExist : Boolean;
4539            PathRec: TPathRec;
4540    begin
4541            No := GikoForm.KokoPopupMenu.Tag;
4542            if No = 0 then Exit;
4543    
4544        ThreadItem := GikoForm.KokoPopupThreadItem;
4545        // アクティブタブから全てのリンクを取得する
4546        links := GetActiveThreadLinks;
4547        if (ThreadItem <> nil) and (links <> nil) then begin
4548            resNo := TStringList.Create;
4549            try
4550                currentNo := 0;
4551                alreadyExist := False;
4552                // リンクを全て走査する
4553                for i := 0 to links.length - 1 do begin
4554                    item := links.item(i, 0) as IHTMLElement;
4555                    if (item <> nil) then begin
4556                        url := item.getAttribute('href', 0);
4557                        // レスの番号を更新
4558                        if (Pos('menu:', url) > 0) then begin
4559                            currentNo := StrToInt64Def(
4560                                Copy(url, 6, Length(url)), currentNo + 1
4561                            );
4562                            alreadyExist := False;
4563                        end else if (currentNo <> -1) and (not alreadyExist) then begin
4564                            // IE7対応
4565                            if Pos('about:..', url) = 1 then begin
4566                                url := 'about:blank..' + Copy( url, Length('about:..')+1, Length(url) )
4567                            end;
4568                            // 自分へのリンクからレスポップ用の番号取得
4569                            if Pos('about:blank..', url) = 1 then begin
4570                                // No 番へのリンクがあれば参照あり
4571                                url2 := THTMLCreate.GetRespopupURL(url, ThreadItem.URL);
4572                                            PathRec := Gikosys.Parse2chURL2(url2);
4573                                if (not PathRec.FNoParam) then begin
4574                                    Gikosys.GetPopupResNumber(url2,PathRec.FSt,PathRec.FTo);
4575                                            end;
4576                                // 対象レスもしくはそれを含むなら参照ありとする
4577                                if (PathRec.FSt = No) or
4578                                    ((PathRec.FSt <= No) and (PathRec.FTo >= No))  then begin
4579                                    alreadyExist := True;
4580                                    resNo.Add(IntToStr(currentNo));
4581                                end;
4582                            end;
4583                        end;
4584                    end;
4585                end;
4586                // 無制限なので-1固定
4587                GikoForm.ActiveContent.IDAnchorPopup(
4588                    GikoSys.CreateResAnchor(resNo, ThreadItem, -1));
4589            finally
4590                resNo.Clear;
4591                resNo.Free;
4592            end;
4593        end;
4594    end;
4595    
4596    procedure TGikoDM.UpdateGikonaviActionExecute(Sender: TObject);
4597    var
4598        form : TUpdateCheckForm;
4599            Msg: string;
4600        shutdown: boolean;
4601    begin
4602            if (EditorFormExists) then begin
4603                    Msg := 'レスエディタを全て閉じてください';
4604                    MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4605                    Exit;
4606            end;
4607        GikoForm.UpdateExePath := '';
4608        GikoForm.UpdateExeArgs := '';
4609        form := TUpdateCheckForm.Create(GikoForm);
4610        try
4611            form.ShowModal;
4612            shutdown := form.Allowshutdown;
4613            if shutdown then begin
4614                GikoForm.UpdateExePath := form.ExecPath;
4615                GikoForm.UpdateExeArgs := form.ExecArgs;
4616            end;
4617        finally
4618            form.Release;
4619        end;
4620        if shutdown then begin
4621            // ギコナビ終了
4622            GikoForm.Close;
4623        end;
4624    
4625    end;
4626    //! このレスのURLコピー(PATH_INFO)
4627    procedure TGikoDM.konoURLPATHActionExecute(Sender: TObject);
4628    var
4629        No : Integer;
4630        ThreadItem : TThreadItem;
4631        URL, Protocol, Host, Path, Document, Port, Bookmark : String;
4632    begin
4633            No := GikoForm.KokoPopupMenu.Tag;
4634            if No = 0 then Exit;
4635    
4636        ThreadItem := GikoForm.KokoPopupThreadItem;
4637        if (ThreadItem.ParentBoard.Is2ch) or not (Pos('?', ThreadItem.URL) > 0) then begin
4638            GikoSys.ParseURI(ThreadItem.URL,Protocol, Host, Path, Document, Port, Bookmark);
4639            URL := Protocol + '://' + Host + Path + IntToStr(No);
4640        end else begin
4641            if Pos('?', ThreadItem.URL) > 0 then begin
4642                URL := Copy(ThreadItem.URL, 1, Pos('?', ThreadItem.URL)-1);
4643                // まちBBS用処置
4644                URL := MojuUtils.CustomStringReplace(URL, 'read.pl', 'read.cgi');
4645                URL := URL + '/' + ThreadItem.ParentBoard.BBSID + '/' + ChangeFileExt(ThreadItem.FileName, '')  + '/' + IntToStr(No);
4646            end;
4647        end;
4648        Clipboard.SetTextBuf( PChar(URL) );
4649    end;
4650    //! このレスのURLコピー(Query_STRING)
4651    procedure TGikoDM.konoURLQueryActionExecute(Sender: TObject);
4652    var
4653        No : Integer;
4654        ThreadItem : TThreadItem;
4655        URL, Protocol, Host, Path, Document, Port, Bookmark : String;
4656    begin
4657            No := GikoForm.KokoPopupMenu.Tag;
4658            if No = 0 then Exit;
4659    
4660        ThreadItem := GikoForm.KokoPopupThreadItem;
4661        // 2chとしたらばは、レス番号をうまく処理してくれないので利用不可
4662        if ThreadItem.ParentBoard.Is2ch or not (Pos('?', ThreadItem.URL) > 0) then begin
4663            GikoSys.ParseURI(ThreadItem.URL, Protocol, Host, Path, Document, Port, Bookmark);
4664            URL := Protocol + '://' + Host + '/test/read.cgi?bbs=' + ThreadItem.ParentBoard.BBSID
4665                + '&key=' + ChangeFileExt(ThreadItem.FileName, '') + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
4666        end else begin
4667            URL := ThreadItem.URL;
4668            // まちBBS
4669            if Pos('&LAST=', URL) > 0 then begin
4670                URL := Copy(URL, 1, Pos('&LAST=', URL) - 1);
4671                URL := URL + '&START=' + IntToStr(No) + '&END=' + IntToStr(No);
4672            end;
4673            // その他外部板
4674            if Pos('&ls=', URL) > 0 then begin
4675                URL := Copy(URL, 1, Pos('&ls=', URL) - 1);
4676                URL := URL + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
4677            end;
4678    
4679        end;
4680        Clipboard.SetTextBuf( PChar(URL) );
4681    end;
4682    //! このレスのURLコピー(Query_STRING)の利用チェック
4683    procedure TGikoDM.konoURLQueryActionUpdate(Sender: TObject);
4684    const
4685            LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
4686    begin
4687        // 2chとしたらばは利用できないようにする(うまくレス指定できないので)
4688        konoURLQueryAction.Enabled := false;
4689        if (GikoForm.KokoPopupThreadItem <> nil) then begin
4690            konoURLQueryAction.Enabled := not GikoForm.KokoPopupThreadItem.ParentBoard.Is2ch;
4691            if konoURLQueryAction.Enabled then begin
4692                konoURLQueryAction.Enabled := not (Pos(LIVEDOOR_URL, GikoForm.KokoPopupThreadItem.URL) = 1);
4693            end;
4694        end;
4695    end;
4696    //! ポップアップメニュー設定ダイアログを開く
4697    procedure TGikoDM.PopupMenuSettingActionExecute(Sender: TObject);
4698    var
4699            Dlg: TPopupMenuSettingDialog;
4700    begin
4701            Dlg := TPopupMenuSettingDialog.Create(GikoForm, GikoFormActionList);
4702            try
4703                    Dlg.ShowModal;
4704            finally
4705                    Dlg.Release;
4706            end;
4707    end;
4708    
4709  end.  end.
4710    

Legend:
Removed from v.1.29.2.1  
changed lines
  Added in v.1.80

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26