OSDN Git Service

・板一覧更新の処理メッセージを追加
[gikonavigoeson/gikonavi.git] / GikoDataModule.pas
1 unit GikoDataModule;
2
3 interface
4
5 uses
6   SysUtils, Classes, ExtActns, StdActns, ActnList, ImgList, Controls,
7 {$IF Defined(DELPRO) }
8         SHDocVw,
9         MSHTML,
10 {$ELSE}
11         SHDocVw_TLB,
12         MSHTML_TLB,
13 {$IFEND}
14   ComCtrls, BrowserRecord, Graphics, Messages, Setting, Dialogs,
15   ActiveX, GikoSystem, MoveHistoryItem, HistoryList;
16
17 const
18         CAPTION_NAME: string = '\83M\83R\83i\83r';
19         USER_SETLINKBAR                                 = WM_USER + 2003;
20
21         ITEM_ICON_SORT1                                 = 12;           //!< \83\\81[\83g\83A\83C\83R\83\93
22         ITEM_ICON_SORT2                                 = 13;           //!< \83\\81[\83g\83A\83C\83R\83\93
23
24         //\83c\81[\83\8b\83o\81[\83A\83C\83R\83\93
25         TOOL_ICON_HEIGHT_MAX            = 16;           //!< \8d\82\82³\8dÅ\91å\83A\83C\83R\83\93
26         TOOL_ICON_HEIGHT_MIN            = 17;           //!< \8d\82\82³\8dÅ\8f¬\83A\83C\83R\83\93
27         TOOL_ICON_HEIGHT_NORMAL = 18;           //!< \8d\82\82³\95W\8f\80\83A\83C\83R\83\93
28         TOOL_ICON_WIDTH_MAX             = 19;           //!< \95\9d\8dÅ\91å\83A\83C\83R\83\93
29         TOOL_ICON_WIDTH_MIN             = 20;           //!< \95\9d\8dÅ\8f¬\83A\83C\83R\83\93
30         TOOL_ICON_WIDTH_NORMAL  = 21;           //!< \95\9d\95W\8f\80\83A\83C\83R\83\93
31
32         TOOL_ICON_FAV_FOLDER            = 30;           //!< \82¨\8bC\82É\93ü\82è\83t\83H\83\8b\83_\83A\83C\83R\83\93
33         TOOL_ICON_FAV_BOARD                     = 31;           //!< \82¨\8bC\82É\93ü\82è\94Â\83A\83C\83R\83\93
34         TOOL_ICON_FAV_THREAD            = 32;           //!< \82¨\8bC\82É\93ü\82è\83X\83\8c\83A\83C\83R\83\93
35
36         //! HTTP
37         PROTOCOL_HTTP : string = 'http://';
38         //! \83M\83R\83i\83r\83T\83C\83g\82ÌURL
39         URL_GIKONAVI: string = 'gikonavi.sourceforge.jp/';
40         //! \83M\83R\83i\83r(\94ð\93ï\8f\8a\94Å)\83T\83C\83g\82ÌURL
41         URL_GIKONAVIGO: string = 'gikonavigoeson.sourceforge.jp/';
42         //! Monazilla\83T\83C\83g\82ÌURL
43         URL_MONAZILLA: string = 'www.monazilla.org/';
44         //! 2\82¿\82á\82ñ\82Ë\82é\82ÌURL
45         URL_2ch: string = 'www.2ch.net/';
46         //! \83M\83R\83i\83rWiki\82ÌURL
47         URL_Wiki: string = 'sourceforge.jp/projects/gikonavi/wiki/FAQ';
48         //! \83M\83R\83i\83r(\94ð\93ï\8f\8a\94Å)Wiki\82ÌURL
49         URL_GoWiki: string = 'sourceforge.jp/projects/gikonavigoeson/wiki/FAQ';
50
51         SELECTCOMBOBOX_NAME: string = ''; // '\83X\83\8c\83b\83h\8di\8d\9e\8c\9f\8dõ';
52         SELECTCOMBOBOX_COLOR: TColor = clWindow;
53
54
55 type
56
57   TGikoDM = class(TDataModule)
58         GikoFormActionList: TActionList;
59         OnlyAHundredResAction: TAction;
60         OnlyKokoResAction: TAction;
61         LoginAction: TAction;
62         NewBoardAction: TAction;
63         LogDeleteAction: TAction;
64         KidokuAction: TAction;
65         StdToolBarVisibleAction: TAction;
66         AddressBarVisibleAction: TAction;
67         LinkBarVisibleAction: TAction;
68         ListToolBarVisibleAction: TAction;
69         SearchAction: TAction;
70         GikoNaviWebPageAction: TAction;
71         MonazillaWebPageAction: TAction;
72         BBS2chWebPageAction: TAction;
73         GikoFolderOpenAction: TAction;
74         AboutAction: TAction;
75         SelectTextClearAction: TAction;
76         NameTextClearAction: TAction;
77         MailTextClearAction: TAction;
78         ExitAction: TAction;
79         ListNameBarVisibleAction: TAction;
80         BrowserToolBarVisibleAction: TAction;
81         BrowserNameBarVisibleAction: TAction;
82         MsgBarVisibleAction: TAction;
83         MsgBarCloseAction: TAction;
84         StatusBarVisibleAction: TAction;
85         CabinetBBSAction: TAction;
86         CabinetHistoryAction: TAction;
87         OnlyNewResAction: TAction;
88         CabinetFavoriteAction: TAction;
89         CabinetVisibleAction: TAction;
90         ListNumberVisibleAction: TAction;
91         UpFolderAction: TAction;
92         CabinetCloseAction: TAction;
93         IconStyle: TAction;
94         LargeIconAction: TAction;
95         SmallIconAction: TAction;
96         ListIconAction: TAction;
97         DetailIconAction: TAction;
98         MidokuAction: TAction;
99         AllSelectAction: TAction;
100         AllItemAction: TAction;
101         LogItemAction: TAction;
102         NewItemAction: TAction;
103         ThreadRangeAction: TAction;
104         SelectItemAction: TAction;
105         StopAction: TAction;
106         OptionAction: TAction;
107         RoundAction: TAction;
108         BrowserMaxAction: TAction;
109         BrowserMinAction: TAction;
110         ScrollTopAction: TAction;
111         ScrollLastAction: TAction;
112         ScrollNewAction: TAction;
113         ScrollKokoAction: TAction;
114         EditorAction: TAction;
115         IEAction: TAction;
116         ShowThreadAction: TAction;
117         ShowBoardAction: TAction;
118         URLCopyAction: TAction;
119         NameCopyAction: TAction;
120         NameURLCopyAction: TAction;
121         ItemReloadAction: TAction;
122         ThreadEditorAction: TAction;
123         BoardIEAction: TAction;
124         SelectItemURLCopyAction: TAction;
125         SelectItemNameCopyAction: TAction;
126         SelectItemNameURLCopyAction: TAction;
127         SelectListReloadAction: TAction;
128         SelectThreadReloadAction: TAction;
129         BrowserTabCloseAction: TAction;
130         NotSelectTabCloseAction: TAction;
131         AllTabCloseAction: TAction;
132         KokomadeAction: TAction;
133         ZenbuAction: TAction;
134         KokoResAction: TAction;
135         TreeSelectBoradReload: TAction;
136         TreeSelectThreadReload: TAction;
137         TreeSelectURLCopy: TAction;
138         SelectReservAction: TAction;
139         SelectNewRoundName: TAction;
140         SelectDeleteRound: TAction;
141         KeySettingAction: TAction;
142         ArrangeAction: TAction;
143         ActiveLogDeleteAction: TAction;
144         TreeSelectNameURLCopy: TAction;
145         PaneInitAction: TAction;
146         LeftmostTabSelectAction: TAction;
147         LeftTabSelectAction: TAction;
148         RightTabSelectAction: TAction;
149         RightmostTabSelectAction: TAction;
150         FavoriteAddAction: TAction;
151         BoardFavoriteAddAction: TAction;
152         ThreadFavoriteAddAction: TAction;
153         TreeSelectFavoriteAddAction: TAction;
154         FavoriteArrangeAction: TAction;
155         MoveToAction: TAction;
156         BrowserTabVisibleAction: TAction;
157         BrowserTabTopAction: TAction;
158         BrowserTabBottomAction: TAction;
159         BrowserTabTabStyleAction: TAction;
160         BrowserTabButtonStyleAction: TAction;
161         BrowserTabFlatStyleAction: TAction;
162         GikoHelpAction: TAction;
163         KotehanAction: TAction;
164         ToolBarSettingAction: TAction;
165         SelectResAction: TAction;
166         AllResAction: TAction;
167         EditNGAction: TAction;
168         ReloadAction: TAction;
169         GoFowardAction: TAction;
170         GoBackAction: TAction;
171         TreeSelectSearchBoardName: TAction;
172         FavoriteTreeViewRenameAction: TAction;
173         FavoriteTreeViewNewFolderAction: TAction;
174         FavoriteTreeViewDeleteAction: TAction;
175         FavoriteTreeViewBrowseFolderAction: TAction;
176         FavoriteTreeViewReloadAction: TAction;
177         FavoriteTreeViewURLCopyAction: TAction;
178         FavoriteTreeViewNameCopyAction: TAction;
179         FavoriteTreeViewNameURLCopyAction: TAction;
180         FavoriteTreeViewLogDeleteAction: TAction;
181         ResRangeAction: TAction;
182         ExportFavoriteFile: TFileSaveAs;
183         FavoriteTreeViewBrowseBoardAction: TAction;
184         FavoriteTreeViewBrowseThreadAction: TAction;
185         UpBoardAction: TAction;
186         KoreCopy: TAction;
187         TreeSelectNameCopy: TAction;
188         SetFocusForBrowserAction: TAction;
189         SetFocusForThreadListAction: TAction;
190         SetFocusForCabinetAction: TAction;
191         FileRun1: TFileRun;
192         ThreadlistMaxAndFocusAction: TAction;
193         BrowserMaxAndFocusAction: TAction;
194         SelectItemSaveForHTML: TAction;
195         SelectItemSaveForDat: TAction;
196         LogFolderOpenAction: TAction;
197         TabsSaveAction: TAction;
198         TabsOpenAction: TAction;
199         BrowsBoradHeadAction: TAction;
200         JumpToNumOfResAction: TAction;
201         FavoriteTreeViewCollapseAction: TAction;
202         RightTabCloseAction: TAction;
203         LeftTabCloseAction: TAction;
204         SameIDResAnchorAction: TAction;
205         IndividualAbon1Action: TAction;
206         IndividualAbon0Action: TAction;
207         AntiIndividualAbonAction: TAction;
208         AntiIndividualAbonDlgAction: TAction;
209         IndividualAbonID1Action: TAction;
210         IndividualAbonID0Action: TAction;
211         MuteAction: TAction;
212         SortActiveColumnAction: TAction;
213         SortNextColumnAction: TAction;
214         SortPrevColumnAction: TAction;
215         BeLogInOutAction: TAction;
216         UnSelectedListViewAction: TAction;
217         WikiFAQWebPageAction: TAction;
218         ToobarImageList: TImageList;
219     SaveDialog: TSaveDialog;
220     ThreadSizeCalcForFileAction: TAction;
221     SetInputAssistAction: TAction;
222     OpenFindDialogAction: TAction;
223     ArchiveItemAction: TAction;
224     LiveItemAction: TAction;
225     FavoriteTreeViewItemNameCopyAction: TAction;
226     CloseAllEditorAction: TAction;
227     PrevMoveHistory: TAction;
228     NextMoveHistory: TAction;
229     ClickActiveElementAction: TAction;
230     VKDownAction: TAction;
231     VKUpAction: TAction;
232     VKRightAction: TAction;
233     VKLeftAction: TAction;
234     StoredTaskTrayAction: TAction;
235     AllImageLinkToClipbordAction: TAction;
236     NewImageLinkToClipBoardAction: TAction;
237     SetForcusForAddresBarAction: TAction;
238     NewBoardSearchAction: TAction;
239     NGWordEditFormAction: TAction;
240     ScrollPageDownAction: TAction;
241     ScrollPageUpAction: TAction;
242     AllLinkToClipboardAction: TAction;
243     NewLinkToClipboardAction: TAction;
244     AddIDtoNGWord0Action: TAction;
245     AddIDtoNGWord1Action: TAction;
246     ExtractSameIDAction: TAction;
247     ShowTabListAction: TAction;
248     DereferenceResAction: TAction;
249     UpdateGikonaviAction: TAction;
250     konoURLPATHAction: TAction;
251     konoURLQueryAction: TAction;
252     PopupMenuSettingAction: TAction;
253     GikoNaviGoesonWebPageAction: TAction;
254     GoWikiFAQWebPageAction: TAction;
255     ThreadSearchAction: TAction;
256     ThreadNgEditAction: TAction;
257         procedure EditNGActionExecute(Sender: TObject);
258         procedure ReloadActionExecute(Sender: TObject);
259         procedure GoFowardActionExecute(Sender: TObject);
260         procedure GoBackActionExecute(Sender: TObject);
261         procedure MoveToActionExecute(Sender: TObject);
262         procedure FavoriteAddActionExecute(Sender: TObject);
263         procedure FavoriteArrangeActionExecute(Sender: TObject);
264         procedure FavoriteTreeViewCollapseActionExecute(Sender: TObject);
265         procedure FavoriteTreeViewRenameActionExecute(Sender: TObject);
266         procedure FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
267         procedure FavoriteTreeViewDeleteActionExecute(Sender: TObject);
268         procedure FavoriteTreeViewBrowseFolderActionExecute(Sender: TObject);
269         procedure FavoriteTreeViewReloadActionExecute(Sender: TObject);
270         procedure FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
271         procedure FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
272         procedure FavoriteTreeViewNameURLCopyActionExecute(Sender: TObject);
273         procedure FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
274         procedure FavoriteTreeViewBrowseThreadActionExecute(Sender: TObject);
275         procedure OnlyAHundredResActionExecute(Sender: TObject);
276         procedure OnlyKokoResActionExecute(Sender: TObject);
277         procedure OnlyNewResActionExecute(Sender: TObject);
278         procedure BrowserMaxActionExecute(Sender: TObject);
279         procedure BrowserMinActionExecute(Sender: TObject);
280         procedure ScrollTopActionExecute(Sender: TObject);
281         procedure ScrollLastActionExecute(Sender: TObject);
282         procedure ScrollNewActionExecute(Sender: TObject);
283         procedure ScrollKokoActionExecute(Sender: TObject);
284         procedure ScrollKokoActionUpdate(Sender: TObject);
285         procedure EditorActionExecute(Sender: TObject);
286         procedure IEActionExecute(Sender: TObject);
287         procedure ShowThreadActionExecute(Sender: TObject);
288         procedure ShowBoardActionExecute(Sender: TObject);
289         procedure URLCopyActionExecute(Sender: TObject);
290         procedure NameCopyActionExecute(Sender: TObject);
291         procedure NameURLCopyActionExecute(Sender: TObject);
292         procedure ItemReloadActionExecute(Sender: TObject);
293         procedure BrowserTabCloseActionExecute(Sender: TObject);
294         procedure BrowserTabCloseActionUpdate(Sender: TObject);
295         procedure NotSelectTabCloseActionExecute(Sender: TObject);
296         procedure NotSelectTabCloseActionUpdate(Sender: TObject);
297         procedure AllTabCloseActionExecute(Sender: TObject);
298         procedure ActiveLogDeleteActionExecute(Sender: TObject);
299         procedure LeftmostTabSelectActionExecute(Sender: TObject);
300         procedure LeftmostTabSelectActionUpdate(Sender: TObject);
301         procedure LeftTabSelectActionExecute(Sender: TObject);
302         procedure RightTabSelectActionExecute(Sender: TObject);
303         procedure RightTabSelectActionUpdate(Sender: TObject);
304         procedure RightmostTabSelectActionExecute(Sender: TObject);
305         procedure ThreadFavoriteAddActionExecute(Sender: TObject);
306         procedure ThreadFavoriteAddActionUpdate(Sender: TObject);
307         procedure SelectResActionExecute(Sender: TObject);
308         procedure AllResActionExecute(Sender: TObject);
309         procedure ResRangeActionExecute(Sender: TObject);
310         procedure UpBoardActionExecute(Sender: TObject);
311         procedure JumpToNumOfResActionExecute(Sender: TObject);
312         procedure RightTabCloseActionExecute(Sender: TObject);
313         procedure RightTabCloseActionUpdate(Sender: TObject);
314         procedure LeftTabCloseActionExecute(Sender: TObject);
315         procedure DataModuleCreate(Sender: TObject);
316         procedure SearchActionExecute(Sender: TObject);
317         procedure OptionActionExecute(Sender: TObject);
318         procedure RoundActionExecute(Sender: TObject);
319         procedure KeySettingActionExecute(Sender: TObject);
320         procedure KotehanActionExecute(Sender: TObject);
321         procedure ToolBarSettingActionExecute(Sender: TObject);
322         procedure MuteActionExecute(Sender: TObject);
323         procedure TreeSelectBoradReloadExecute(Sender: TObject);
324         procedure TreeSelectThreadReloadExecute(Sender: TObject);
325         procedure TreeSelectURLCopyExecute(Sender: TObject);
326         procedure TreeSelectNameURLCopyExecute(Sender: TObject);
327         procedure TreeSelectFavoriteAddActionExecute(Sender: TObject);
328         procedure TreeSelectSearchBoardNameExecute(Sender: TObject);
329         procedure TreeSelectNameCopyExecute(Sender: TObject);
330         procedure LoginActionExecute(Sender: TObject);
331         procedure NewBoardActionExecute(Sender: TObject);
332         procedure LogDeleteActionExecute(Sender: TObject);
333         procedure LogDeleteActionUpdate(Sender: TObject);
334         procedure SelectTextClearActionExecute(Sender: TObject);
335         procedure NameTextClearActionExecute(Sender: TObject);
336         procedure MailTextClearActionExecute(Sender: TObject);
337         procedure ExitActionExecute(Sender: TObject);
338         procedure ExportFavoriteFileBeforeExecute(Sender: TObject);
339         procedure ExportFavoriteFileAccept(Sender: TObject);
340         procedure SelectItemSaveForHTMLExecute(Sender: TObject);
341         procedure SelectItemSaveForDatExecute(Sender: TObject);
342         procedure TabsSaveActionExecute(Sender: TObject);
343         procedure TabsOpenActionExecute(Sender: TObject);
344         procedure BeLogInOutActionExecute(Sender: TObject);
345         procedure KokomadeActionExecute(Sender: TObject);
346         procedure ZenbuActionExecute(Sender: TObject);
347         procedure KokoResActionExecute(Sender: TObject);
348         procedure KoreCopyExecute(Sender: TObject);
349         procedure SameIDResAnchorActionExecute(Sender: TObject);
350         procedure IndividualAbon1ActionExecute(Sender: TObject);
351         procedure IndividualAbon0ActionExecute(Sender: TObject);
352         procedure AntiIndividualAbonActionExecute(Sender: TObject);
353         procedure AntiIndividualAbonDlgActionExecute(Sender: TObject);
354         procedure IndividualAbonID1ActionExecute(Sender: TObject);
355         procedure IndividualAbonID0ActionExecute(Sender: TObject);
356         procedure GikoNaviWebPageActionExecute(Sender: TObject);
357         procedure MonazillaWebPageActionExecute(Sender: TObject);
358         procedure BBS2chWebPageActionExecute(Sender: TObject);
359         procedure GikoFolderOpenActionExecute(Sender: TObject);
360         procedure AboutActionExecute(Sender: TObject);
361         procedure GikoHelpActionExecute(Sender: TObject);
362         procedure WikiFAQWebPageActionExecute(Sender: TObject);
363         procedure ListNumberVisibleActionExecute(Sender: TObject);
364         procedure UpFolderActionExecute(Sender: TObject);
365         procedure UpFolderActionUpdate(Sender: TObject);
366         procedure IconStyleExecute(Sender: TObject);
367         procedure AllItemActionExecute(Sender: TObject);
368         procedure LogItemActionExecute(Sender: TObject);
369         procedure NewItemActionExecute(Sender: TObject);
370         procedure ThreadRangeActionExecute(Sender: TObject);
371         procedure SelectItemActionExecute(Sender: TObject);
372         procedure ThreadEditorActionExecute(Sender: TObject);
373         procedure BoardIEActionExecute(Sender: TObject);
374         procedure SelectItemURLCopyActionExecute(Sender: TObject);
375         procedure SelectItemURLCopyActionUpdate(Sender: TObject);
376         procedure SelectItemNameCopyActionExecute(Sender: TObject);
377         procedure SelectItemNameCopyActionUpdate(Sender: TObject);
378         procedure SelectItemNameURLCopyActionExecute(Sender: TObject);
379         procedure SelectListReloadActionExecute(Sender: TObject);
380         procedure SelectListReloadActionUpdate(Sender: TObject);
381         procedure SelectThreadReloadActionExecute(Sender: TObject);
382         procedure SelectThreadReloadActionUpdate(Sender: TObject);
383         procedure SelectReservActionExecute(Sender: TObject);
384         procedure SelectReservActionUpdate(Sender: TObject);
385         procedure SelectNewRoundNameExecute(Sender: TObject);
386         procedure SelectDeleteRoundExecute(Sender: TObject);
387         procedure BoardFavoriteAddActionExecute(Sender: TObject);
388         procedure BoardFavoriteAddActionUpdate(Sender: TObject);
389         procedure LogFolderOpenActionExecute(Sender: TObject);
390         procedure LogFolderOpenActionUpdate(Sender: TObject);
391         procedure BrowsBoradHeadActionExecute(Sender: TObject);
392         procedure SortActiveColumnActionExecute(Sender: TObject);
393         procedure SortNextColumnActionExecute(Sender: TObject);
394         procedure SortPrevColumnActionExecute(Sender: TObject);
395         procedure StdToolBarVisibleActionExecute(Sender: TObject);
396         procedure AddressBarVisibleActionExecute(Sender: TObject);
397         procedure LinkBarVisibleActionExecute(Sender: TObject);
398         procedure ListToolBarVisibleActionExecute(Sender: TObject);
399         procedure ListNameBarVisibleActionExecute(Sender: TObject);
400         procedure BrowserToolBarVisibleActionExecute(Sender: TObject);
401         procedure BrowserNameBarVisibleActionExecute(Sender: TObject);
402         procedure MsgBarVisibleActionExecute(Sender: TObject);
403         procedure MsgBarCloseActionExecute(Sender: TObject);
404         procedure StatusBarVisibleActionExecute(Sender: TObject);
405         procedure CabinetBBSActionExecute(Sender: TObject);
406         procedure CabinetHistoryActionExecute(Sender: TObject);
407         procedure CabinetFavoriteActionExecute(Sender: TObject);
408         procedure CabinetVisibleActionExecute(Sender: TObject);
409         procedure CabinetCloseActionExecute(Sender: TObject);
410         procedure LargeIconActionExecute(Sender: TObject);
411         procedure SmallIconActionExecute(Sender: TObject);
412         procedure ListIconActionExecute(Sender: TObject);
413         procedure DetailIconActionExecute(Sender: TObject);
414         procedure StopActionExecute(Sender: TObject);
415         procedure ArrangeActionExecute(Sender: TObject);
416         procedure PaneInitActionExecute(Sender: TObject);
417         procedure BrowserTabVisibleActionExecute(Sender: TObject);
418         procedure BrowserTabTopActionExecute(Sender: TObject);
419         procedure BrowserTabBottomActionExecute(Sender: TObject);
420         procedure BrowserTabTabStyleActionExecute(Sender: TObject);
421         procedure BrowserTabButtonStyleActionExecute(Sender: TObject);
422         procedure BrowserTabFlatStyleActionExecute(Sender: TObject);
423         procedure SetFocusForBrowserActionExecute(Sender: TObject);
424         procedure SetFocusForBrowserActionUpdate(Sender: TObject);
425         procedure SetFocusForThreadListActionExecute(Sender: TObject);
426         procedure SetFocusForCabinetActionExecute(Sender: TObject);
427         procedure SetFocusForCabinetActionUpdate(Sender: TObject);
428         procedure ThreadlistMaxAndFocusActionExecute(Sender: TObject);
429         procedure BrowserMaxAndFocusActionExecute(Sender: TObject);
430         procedure UnSelectedListViewActionExecute(Sender: TObject);
431         procedure KidokuActionExecute(Sender: TObject);
432         procedure MidokuActionExecute(Sender: TObject);
433         procedure AllSelectActionExecute(Sender: TObject);
434         procedure AllSelectActionUpdate(Sender: TObject);
435     procedure ThreadSizeCalcForFileActionExecute(Sender: TObject);
436     procedure SetInputAssistActionExecute(Sender: TObject);
437     procedure OpenFindDialogActionExecute(Sender: TObject);
438     procedure ArchiveItemActionExecute(Sender: TObject);
439     procedure LiveItemActionExecute(Sender: TObject);
440     procedure FavoriteTreeViewItemNameCopyActionExecute(Sender: TObject);
441     procedure CloseAllEditorActionExecute(Sender: TObject);
442     procedure CloseAllEditorActionUpdate(Sender: TObject);
443     procedure PrevMoveHistoryUpdate(Sender: TObject);
444     procedure PrevMoveHistoryExecute(Sender: TObject);
445     procedure NextMoveHistoryUpdate(Sender: TObject);
446     procedure NextMoveHistoryExecute(Sender: TObject);
447     procedure ClickActiveElementActionExecute(Sender: TObject);
448     procedure VKDownActionExecute(Sender: TObject);
449     procedure VKUpActionExecute(Sender: TObject);
450     procedure VKRightActionExecute(Sender: TObject);
451     procedure VKLeftActionExecute(Sender: TObject);
452     procedure StoredTaskTrayActionExecute(Sender: TObject);
453     procedure LeftTabSelectActionUpdate(Sender: TObject);
454     procedure RightmostTabSelectActionUpdate(Sender: TObject);
455     procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
456     procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
457     procedure SetForcusForAddresBarActionExecute(Sender: TObject);
458     procedure NewBoardSearchActionExecute(Sender: TObject);
459     procedure ScrollPageDownActionExecute(Sender: TObject);
460     procedure ScrollPageUpActionExecute(Sender: TObject);
461     procedure AllLinkToClipboardActionExecute(Sender: TObject);
462     procedure NewLinkToClipboardActionExecute(Sender: TObject);
463     procedure AddIDtoNGWord0ActionExecute(Sender: TObject);
464     procedure AddIDtoNGWord1ActionExecute(Sender: TObject);
465     procedure ExtractSameIDActionExecute(Sender: TObject);
466     procedure ShowTabListActionExecute(Sender: TObject);
467     procedure DereferenceResActionExecute(Sender: TObject);
468     procedure UpdateGikonaviActionExecute(Sender: TObject);
469     procedure konoURLPATHActionExecute(Sender: TObject);
470     procedure konoURLQueryActionExecute(Sender: TObject);
471     procedure konoURLQueryActionUpdate(Sender: TObject);
472     procedure PopupMenuSettingActionExecute(Sender: TObject);
473     procedure GikoNaviGoesonWebPageActionExecute(Sender: TObject);
474     procedure GoWikiFAQWebPageActionExecute(Sender: TObject);
475     procedure ThreadSearchActionExecute(Sender: TObject);
476     procedure ThreadNgEditActionExecute(Sender: TObject);
477   private
478         { Private \90é\8c¾ }
479         procedure ClearResFilter;
480         procedure SetResRange(range: Integer);
481         procedure SetThreadAreaHorNormal;
482         procedure SetThreadAreaHorizontal(gls : TGikoListState);
483         procedure SetThreadAreaVerNormal;
484         procedure SetThreadAreaVertical(gls : TGikoListState);
485         procedure SetThreadReadProperty(read: Boolean);
486         procedure SelectThreadSaveToFile(dat: Boolean);
487         function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;
488         procedure RecalcThreadSize(limit : Integer);
489         procedure ClearSelectComboBox;
490     procedure ClearMailAllEditor();
491     procedure ClearNameTextAllEditor();
492 //    procedure MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
493     procedure BackToHistory(item: TMoveHistoryItem);
494     function GetActiveThreadLinks : IHTMLElementCollection;
495     procedure GetLinkURLs(links : IHTMLElementCollection;
496         URLs : TStringList; const Start: Integer; Exts : TStringList);
497   public
498         { Public \90é\8c¾ }
499         procedure RepaintStatusBar;
500     function EditorFormExists(): boolean;
501     procedure GetTabURLs(AStringList: TStringList);
502     procedure OpenURLs(AStringList: TStringList);
503     procedure MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
504     procedure SaveThreadSearchSetting;
505   published
506         { Published \90é\8c¾ }
507         //! TAction\82ÅGetActiveContent\82ªnil\88È\8aO\82Å\97L\8cø\82É\82È\82é
508         procedure DependActiveCntentActionUpdate(Sender: TObject);
509         //! TAction\82ÅGetActiveContent\82ªnil\88È\8aO\82©\82Â\83\8d\83O\82ð\8e\9d\82Á\82Ä\82¢\82é\82Æ\97L\8cø\82É\82È\82é
510         procedure DependActiveCntentLogActionUpdate(Sender: TObject);
511         //! TAction\82ÅActiveList\82ªTBoard(\94ñ\93Á\8eê\94Â)\82Å\97L\8cø\82É\82È\82é
512         procedure DependActiveListTBoardActionUpdate(Sender: TObject);
513         //! TAction\82ÅActiveList\82ªTBoard\82Å\97L\8cø\82É\82È\82é
514         procedure DependActiveListTBoardWithSpeciapActionUpdate(Sender: TObject);
515   end;
516
517 var
518   GikoDM: TGikoDM;
519
520
521 implementation
522
523 uses
524         Windows, Math, Clipbrd,
525         Giko, GikoUtil, BoardGroup,
526         FavoriteArrange, Favorite, MojuUtils,
527         Editor, ListSelect, Search, Option, Round,
528         KeySetting, Gesture, Kotehan, ToolBarSetting,
529         ToolBarUtil, NewBoard, HTMLCreate, IndividualAbon,
530         GikoBayesian, About, ShellAPI,
531         RoundName, RoundData, Menus, ListViewUtils,
532         ThreadControl, GikoMessage, InputAssist,
533     DefaultFileManager, Forms, NewBoardURL, UpdateCheck,
534     PopupMenuSetting, ThreadSearch, ThreadNGEdt;
535
536 const
537         MSG_ERROR : string = '\83G\83\89\81[';
538
539 {$R *.dfm}
540 // *************************************************************************
541 //! TAction\82ÅGetActiveContent\82ªnil\88È\8aO\82Å\97L\8cø\82É\82È\82é
542 // *************************************************************************
543 procedure TGikoDM.DependActiveCntentActionUpdate(Sender: TObject);
544 begin
545         TAction(Sender).Enabled := (GikoForm.GetActiveContent <> nil);
546 end;
547 // *************************************************************************
548 //! TAction\82ÅGetActiveContent\82ªnil\88È\8aO\82©\82Â\83\8d\83O\82ð\8e\9d\82Á\82Ä\82¢\82é
549 // *************************************************************************
550 procedure TGikoDM.DependActiveCntentLogActionUpdate(Sender: TObject);
551 begin
552         TAction(Sender).Enabled := (GikoForm.GetActiveContent <> nil)
553                                                                         and (GikoForm.GetActiveContent.IsLogFile);
554 end;
555 // *************************************************************************
556 //! TAction\82ÅActiveList\82ªTBoard(\94ñ\93Á\8eê\94Â)\82Å\97L\8cø\82É\82È\82é
557 // *************************************************************************
558 procedure TGikoDM.DependActiveListTBoardActionUpdate(Sender: TObject);
559 begin
560         TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard) and
561         (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
562 end;
563 // *************************************************************************
564 //! TAction\82ÅActiveList\82ªTBoard\82Å\97L\8cø\82É\82È\82é
565 // *************************************************************************
566 procedure TGikoDM.DependActiveListTBoardWithSpeciapActionUpdate(Sender: TObject);
567 begin
568         TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard);
569 end;
570 // *************************************************************************
571 //! NG\83\8f\81[\83h\95Ò\8fW
572 // *************************************************************************
573 procedure TGikoDM.EditNGActionExecute(Sender: TObject);
574 begin
575         //\83e\83L\83X\83g\82É\8aÖ\98A\95t\82¯\82ç\82ê\82½\83A\83v\83\8a\82ÅNG\83\8f\81[\83h\83t\83@\83C\83\8b\82ð\83I\81[\83v\83\93
576         if (GikoSys.FAbon.EditNGwords(GikoForm) = True) then
577         ReloadAction.Execute;
578 end;
579 // *************************************************************************
580 //! NG\83\8f\81[\83h\93Ç\82Ý\8d\9e\82Ý\81i\8dÄ\93Ç\82Ý\8d\9e\82Ý\81j
581 // *************************************************************************
582 procedure TGikoDM.ReloadActionExecute(Sender: TObject);
583 begin
584         //\83\8a\83\8d\81[\83h\82ð\8eÀ\8ds\81@\8e¸\94s\82µ\82½\82ç\83\81\83b\83Z\81[\83W\8fo\97Í
585         if GikoSys.FAbon.ReLoadFromNGwordFile =false then begin
586                 MsgBox(GikoForm.Handle, 'NG\83\8f\81[\83h\83t\83@\83C\83\8b\82Ì\8dÄ\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82Ü\82µ\82½',
587                         MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
588         end else begin
589                 //\91S\82Ä\82Ì\83^\83u\82É\8dÄ\95`\89æ\82ð\90Ý\92è
590                 GikoForm.RepaintAllTabsBrowser();
591         end;
592 end;
593 // *************************************************************************
594 //! NG\83\8f\81[\83h\93Ç\82Ý\8d\9e\82Ý\81i\88ê\82Â\8cã\82ë\81j
595 // *************************************************************************
596 procedure TGikoDM.GoFowardActionExecute(Sender: TObject);
597 begin
598         //\88ê\82Â\8cã\82ë\82Ì\93Ç\82Ý\8d\9e\82Ý\81@\8e¸\94s\82µ\82½\82ç\83\81\83b\83Z\81[\83W\8fo\97Í
599         if GikoSys.FAbon.GoBack =false then begin
600                 MsgBox(GikoForm.Handle, '\88ê\82Â\8cã\82ë\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82Ü\82µ\82½',
601                         MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
602         end else begin
603                 //\83X\83e\81[\83^\83X\82É\95\\8e¦\82³\82ê\82éNG\83\8f\81[\83h\83t\83@\83C\83\8b\96¼\82ð\8dX\90V
604                 RepaintStatusBar;
605                 //\91S\82Ä\82Ì\83^\83u\82É\8dÄ\95`\89æ\82ð\90Ý\92è
606                 GikoForm.RepaintAllTabsBrowser();
607         end;
608 end;
609 // *************************************************************************
610 //! NG\83\8f\81[\83h\93Ç\82Ý\8d\9e\82Ý\81i\88ê\82Â\91O\81j
611 // *************************************************************************
612 procedure TGikoDM.GoBackActionExecute(Sender: TObject);
613 begin
614         //\88ê\82Â\8cã\82ë\82Ì\93Ç\82Ý\8d\9e\82Ý\81@\8e¸\94s\82µ\82½\82ç\83\81\83b\83Z\81[\83W\8fo\97Í
615         if GikoSys.FAbon.GoForward =false then begin
616                 MsgBox(GikoForm.Handle, '\88ê\82Â\91O\82ÌNG\83\8f\81[\83h\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\82É\8e¸\94s\82µ\82Ü\82µ\82½',
617                         MSG_ERROR, MB_OK or MB_ICONEXCLAMATION);
618         end else begin
619                 //\83X\83e\81[\83^\83X\82É\95\\8e¦\82³\82ê\82éNG\83\8f\81[\83h\83t\83@\83C\83\8b\96¼\82ð\8dX\90V
620                 RepaintStatusBar;
621                 //\91S\82Ä\82Ì\83^\83u\82É\8dÄ\95`\89æ\82ð\90Ý\92è
622                 GikoForm.RepaintAllTabsBrowser();
623         end;
624 end;
625 // *************************************************************************
626 //! NG\83\8f\81[\83h\82ð\95Ï\8dX\82µ\82½\8cã\82Ì\83X\83e\81[\83^\83X\83o\81[\82Ì\8dX\90V\8f\88\97\9d
627 // *************************************************************************
628 procedure TGikoDM.RepaintStatusBar;
629 var
630         s : String;
631 begin
632         //\83X\83e\81[\83^\83X\82É\95\\8e¦\82³\82ê\82éNG\83\8f\81[\83h\83t\83@\83C\83\8b\96¼\82ð\8dX\90V
633         s := GikoSys.FAbon.NGwordname;
634         GikoForm.StatusBar.Panels.Items[GiKo.NGWORDNAME_PANEL].Text := s;
635         //\83X\83e\81[\83^\83X\82Ì\95\\8e¦\83T\83C\83Y\82Ì\83\8a\83T\83C\83Y
636         GikoForm.StatusBar.Panels[GiKo.NGWORDNAME_PANEL].Width
637                 := Max(GikoForm.StatusBar.Canvas.TextWidth(s), 100);
638         GikoForm.StatusBarResize(nil);
639 end;
640 // *************************************************************************
641 //! \83A\83h\83\8c\83X\83o\81[\82É\95\\8e¦\82µ\82Ä\82¢\82é\83A\83h\83\8c\83X\82Ö\88Ú\93®\82·\82é
642 // *************************************************************************
643 procedure TGikoDM.MoveToActionExecute(Sender: TObject);
644 begin
645         //\83A\83h\83\8c\83X\83R\83\93\83{\83{\83b\83N\83X\82©\82çURL\82ð\8eæ\93¾
646         //URL\82É\88Ú\93®
647     MoveURLWithHistory( Trim(GikoForm.AddressComboBox.Text) );
648 end;
649 // *************************************************************************
650 //! \82¨\8bC\82É\93ü\82è\82Ì\92Ç\89Á\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
651 // *************************************************************************
652 procedure TGikoDM.FavoriteAddActionExecute(Sender: TObject);
653 begin
654         GikoForm.ShowFavoriteAddDialog(GikoForm.GetActiveContent);
655 end;
656 // *************************************************************************
657 //! \82¨\8bC\82É\93ü\82è\82Ì\90®\97\9d\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
658 // *************************************************************************
659 procedure TGikoDM.FavoriteArrangeActionExecute(Sender: TObject);
660 var
661         Dlg: TFavoriteArrangeDialog;
662 begin
663         Dlg := TFavoriteArrangeDialog.Create(GikoForm);
664         try
665                 Dlg.ShowModal;
666         finally
667                 Dlg.Release;
668         end;
669         //\83\8a\83\93\83N\83o\81[\82É\8dX\90V\82ð\93`\82¦\82é
670         PostMessage( GikoForm.Handle, USER_SETLINKBAR, 0, 0 );
671 end;
672 // *************************************************************************
673 //! \83c\83\8a\81[\82ð\91S\82Ä\95Â\82\82é
674 // *************************************************************************
675 procedure TGikoDM.FavoriteTreeViewCollapseActionExecute(Sender: TObject);
676 var
677         node    : TTreeNode;
678 begin
679         node := GikoForm.FavoriteTreeView.Items.GetFirstNode;
680         try
681                 //\83m\81[\83h\82ª\91±\82­\8cÀ\82è\81@\83m\81[\83h\82ð\8fk\8f¬\82³\82¹\82é
682                 while node <> nil do begin
683                         if node.HasChildren then
684                                 node.Expanded := False;
685                         node := node.GetNext;
686                 end;
687         except
688         end;
689 end;
690 // *************************************************************************
691 //! \82¨\8bC\82É\93ü\82è\82Ì\96¼\91O\82ð\95Ò\8fW\82·\82é
692 // *************************************************************************
693 procedure TGikoDM.FavoriteTreeViewRenameActionExecute(Sender: TObject);
694 var
695         node : TTreeNode;
696 begin
697
698         if GikoForm.ClickNode = nil then
699                 Exit;
700         if GikoForm.ClickNode.IsFirstNode then
701                 Exit;
702         if GikoForm.ClickNode.Text = Favorite.FAVORITE_LINK_NAME then
703                 Exit;
704         GikoForm.FavoriteTreeView.ReadOnly := False;
705         if (GikoForm.TreeType = gttFavorite) and (GikoForm.CabinetPanel.Visible) then begin
706                 node := GikoForm.ClickNode.Parent;
707                 while node <> nil do begin
708                         node.Expanded   := True;
709                         node                                    := node.Parent;
710                 end;
711                 GikoForm.ClickNode.EditText;
712         end else begin
713                 GikoForm.ClickNode.Text := InputBox( '\96¼\91O\82Ì\95Ï\8dX', '\82¨\8bC\82É\93ü\82è\82Ì\90V\82µ\82¢\96¼\91O\82ð\93ü\97Í\82µ\82Ä\82­\82¾\82³\82¢', GikoForm.ClickNode.Text );
714         end;
715         //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
716         FavoriteDM.Modified := true;
717         GikoForm.SetLinkBar;
718 end;
719 // *************************************************************************
720 //! \90V\82µ\82­\82¨\8bC\82É\93ü\82è\82É\83t\83H\83\8b\83_\82ð\8dì\90¬\82·\82é
721 // *************************************************************************
722 procedure TGikoDM.FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
723 var
724         NewFavFolder: TFavoriteFolder;
725         Node: TTreeNode;
726 begin
727
728         if GikoForm.ClickNode = nil then
729                 Exit;
730
731         try
732                 if not (TObject(GikoForm.ClickNode.Data) is TFavoriteFolder) then begin
733                         GikoForm.FavoriteTreeView.Selected := GikoForm.ClickNode.Parent;
734                         GikoForm.ClickNode := GikoForm.ClickNode.Parent;
735                 end;
736
737                 NewFavFolder := TFavoriteFolder.Create;
738                 Node := GikoForm.FavoriteTreeView.Items.AddChildObject(GikoForm.ClickNode, '\90V\82µ\82¢\83t\83H\83\8b\83_', NewFavFolder);
739                 Node.ImageIndex := 14;
740                 Node.SelectedIndex := 14;
741         //                      FClickNode.Selected.Expanded := True;
742                 GikoForm.FavoriteTreeView.Selected := Node;
743                 GikoForm.ClickNode := Node;
744                 //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
745                 FavoriteDM.Modified := true;
746                 FavoriteTreeViewRenameAction.Execute;
747         finally
748         end;
749
750 end;
751 // *************************************************************************
752 //! \82±\82Ì\82¨\8bC\82É\93ü\82è\82ð\8dí\8f\9c\82·\82é
753 // *************************************************************************
754 procedure TGikoDM.FavoriteTreeViewDeleteActionExecute(Sender: TObject);
755 const
756         DEL_LINK_MSG = '\81g\83\8a\83\93\83N\81h\82Í\83\8a\83\93\83N\83o\81[\97p\83t\83H\83\8b\83_\82Å\82·\81B\8dí\8f\9c\82µ\82Ä\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
757         DEL_MSG = '\81g^0\81h\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
758         DEL_TITLE = '\8dí\8f\9c\8am\94F';
759 begin
760
761         if GikoForm.ClickNode = nil then
762                 Exit;
763         if GikoForm.ClickNode.IsFirstNode then
764                 Exit;
765         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
766                 if GikoForm.ClickNode.Text = Favorite.FAVORITE_LINK_NAME then begin
767                         if MsgBox(GikoForm.Handle, DEL_LINK_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
768                                 Exit;
769                 end else begin
770                         if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', GikoForm.ClickNode.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
771                                 Exit;
772                 end;
773         end;
774
775         GikoForm.ClickNode.Delete;
776         //\8dX\90V\82µ\82½\82±\82Æ\82ð\8b³\82¦\82é
777         FavoriteDM.Modified := true;
778
779         GikoForm.SetLinkBar;
780
781 end;
782 // *************************************************************************
783 //! \82±\82Ì\83t\83H\83\8b\83_\82É\93ü\82Á\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82ð\91S\82Ä\8aJ\82­
784 // *************************************************************************
785 procedure TGikoDM.FavoriteTreeViewBrowseFolderActionExecute(
786   Sender: TObject);
787 begin
788         GikoForm.FavoriteBrowseFolder( GikoForm.ClickNode );
789 end;
790 // *************************************************************************
791 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
792 // *************************************************************************
793 procedure TGikoDM.FavoriteTreeViewReloadActionExecute(Sender: TObject);
794 var
795         FavThread: TFavoriteThreadItem;
796         FavBoard: TFavoriteBoardItem;
797         shiftDown: Boolean;
798 begin
799         if (GikoForm.ClickNode = nil) then Exit;
800
801         shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
802
803         if TObject( GikoForm.ClickNode.Data ) is TFavoriteThreadItem then begin
804                 FavThread := TFavoriteThreadItem( GikoForm.ClickNode.Data );
805                 if FavThread.Item <> nil then
806                         GikoForm.DownloadContent(FavThread.Item, shiftDown);
807         end else if TObject( GikoForm.ClickNode.Data ) is TFavoriteBoardItem then begin
808                 FavBoard := TFavoriteBoardItem( GikoForm.ClickNode.Data );
809                 GikoForm.DownloadList(FavBoard.Item, shiftDown);
810         end;
811
812 end;
813 // *************************************************************************
814 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82ÌURL\82ð\83R\83s\81[\82·\82é
815 // *************************************************************************
816 procedure TGikoDM.FavoriteTreeViewURLCopyActionExecute(Sender: TObject);
817 begin
818
819         if GikoForm.ClickNode = nil then Exit;
820
821         if (TObject(GikoForm.ClickNode.Data) is TFavoriteItem) then begin
822                 Clipboard.AsText := TFavoriteItem( GikoForm.ClickNode.Data ).URL + #13#10;
823         end;
824 end;
825 // *************************************************************************
826 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82Ì\96¼\91O\82ð\83R\83s\81[\82·\82é
827 // *************************************************************************
828 procedure TGikoDM.FavoriteTreeViewNameCopyActionExecute(Sender: TObject);
829 begin
830
831         if GikoForm.ClickNode = nil then Exit;
832
833         if (TObject(GikoForm.ClickNode.Data) is TFavoriteItem) then begin
834                 Clipboard.AsText :=
835                         TFavoriteItem(GikoForm.ClickNode.Data).GetItemTitle + #13#10;
836         end else begin
837                 Clipboard.AsText :=
838                         GikoForm.ClickNode.Text + #13#10;
839
840         end;
841 end;
842 // *************************************************************************
843 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82Ì\96¼\91O\82ÆURL\82ð\83R\83s\81[\82·\82é
844 // *************************************************************************
845 procedure TGikoDM.FavoriteTreeViewNameURLCopyActionExecute(
846   Sender: TObject);
847 var
848         favItem : TFavoriteItem;
849 begin
850
851         if GikoForm.ClickNode = nil then Exit;
852
853         if (TObject(GikoForm.ClickNode.Data) is TFavoriteItem) then begin
854                 favItem := TFavoriteItem(GikoForm.ClickNode.Data);
855                 Clipboard.AsText := favItem.GetItemTitle  + #13#10 +
856                                                         favItem.URL + #13#10;
857         end;
858
859 end;
860 // *************************************************************************
861 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\83X\83\8c\83b\83h\82ð\8dí\8f\9c\82·\82é
862 // *************************************************************************
863 procedure TGikoDM.FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
864 const
865         DEL_MSG = '\81g^0\81h\82Ì\83\8d\83O\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
866         DEL_TITLE = '\8dí\8f\9c\8am\94F';
867 var
868         ThreadItem: TThreadItem;
869         FavThread: TFavoriteThreadItem;
870 begin
871
872         if GikoForm.ClickNode = nil then Exit;
873         if not (TObject(GikoForm.ClickNode.Data) is TFavoriteThreadItem) then Exit;
874
875         FavThread := TFavoriteThreadItem( GikoForm.ClickNode.Data );
876         ThreadItem := FavThread.Item;
877
878         try
879                 if GikoSys.Setting.DeleteMsg then begin
880                         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
881                                 if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', GikoForm.ClickNode.Text, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
882                                         Exit;
883                 end;
884
885                 GikoForm.DeleteHistory(ThreadItem);
886                 GikoForm.DeleteTab(ThreadItem);
887                 ThreadItem.DeleteLogFile;
888
889                 GikoForm.ListView.Refresh;
890         finally
891         end;
892
893 end;
894 // *************************************************************************
895 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
896 // *************************************************************************
897 procedure TGikoDM.FavoriteTreeViewBrowseThreadActionExecute(
898   Sender: TObject);
899 var
900         threadItem      : TThreadItem;
901 begin
902
903         if GikoForm.ClickNode = nil then Exit;
904
905         if (TObject(GikoForm.ClickNode.Data) is TFavoriteThreadItem) then begin
906
907                 threadItem := TFavoriteThreadItem( GikoForm.ClickNode.Data ).Item;
908                 if threadItem = nil then
909                         Exit;
910                 GikoSys.OpenBrowser( threadItem.URL, gbtAuto );
911
912         end;
913 end;
914 //! \83\8c\83X\82Ì\8di\8d\9e\82Ý\83t\83B\83\8b\83^\81[\82ð\8bó\82É\82·\82é
915 procedure TGikoDM.ClearResFilter;
916 var
917         FilterList : TStringList;
918 begin
919         // \83t\83B\83\8b\83^\95\8e\9a\97ñ\82ð\8bó\82É\82·\82é
920         FilterList := TStringList.Create;
921         try
922                 GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
923                 GikoSys.FSelectResFilter.Reverse := False;
924         finally
925                 FilterList.Free;
926         end;
927         GikoForm.SelectResWord := '';
928 end;
929 // *************************************************************************
930 //! \83\8c\83X\82Ì\95\\8e¦\94Í\88Í\82ð\90Ý\92è\82·\82é
931 // *************************************************************************
932 procedure TGikoDM.SetResRange(range: Integer);
933 begin
934         if GikoSys.ResRange <> range then begin
935                 GikoSys.ResRange        := range;
936                 // \83t\83B\83\8b\83^\95\8e\9a\97ñ\82ð\8bó\82É\82·\82é
937                 ClearResFilter;
938                 GikoForm.RepaintAllTabsBrowser();
939         end;
940 end;
941 // *************************************************************************
942 //! \8dÅ\90V100\83\8c\83X\82Ì\82Ý\95\\8e¦
943 // *************************************************************************
944 procedure TGikoDM.OnlyAHundredResActionExecute(Sender: TObject);
945 begin
946         if (GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil)
947                 and (GikoForm.ActiveContent.Browser.Busy) then Exit;
948
949         GikoForm.ResRangeMenuSelect     := 100;
950         OnlyAHundredResAction.Checked   := True;
951         //\81@\95\\8e¦\94Í\88Í\82ð\90Ý\92è\82·\82é\81B\90Ý\92è\92l\82©\82ç\82Æ\82Á\82Ä\82­\82é\81B
952     SetResRange(GikoSys.Setting.ResRangeExCount);
953 end;
954 // *************************************************************************
955 //! \96¢\93Ç\83\8c\83X\82Ì\82Ý\95\\8e¦
956 // *************************************************************************
957 procedure TGikoDM.OnlyKokoResActionExecute(Sender: TObject);
958 begin
959         if (GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil)
960                 and (GikoForm.ActiveContent.Browser.Busy) then Exit;
961
962         GikoForm.ResRangeMenuSelect     := Ord( grrKoko );
963         OnlyKokoResAction.Checked       := True;
964
965         //\81@\95\\8e¦\94Í\88Í\82ð\90Ý\92è\82·\82é
966         SetResRange(Ord( grrKoko ));
967 end;
968 // *************************************************************************
969 //! \90V\92\85\83\8c\83X\82Ì\82Ý\95\\8e¦
970 // *************************************************************************
971 procedure TGikoDM.OnlyNewResActionExecute(Sender: TObject);
972 begin
973         if (GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil)
974                 and (GikoForm.ActiveContent.Browser.Busy) then Exit;
975
976         GikoForm.ResRangeMenuSelect     := Ord( grrNew );
977         OnlyNewResAction.Checked        := True;
978
979         //\81@\95\\8e¦\94Í\88Í\82ð\90Ý\92è\82·\82é
980         SetResRange(Ord( grrNew ));
981 end;
982 // *************************************************************************
983 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\92Ê\8fí\95\\8e¦\82É\82·\82é \92\8d)ListOrientation = gloHorizontal\81@
984 // *************************************************************************
985 procedure TGikoDM.SetThreadAreaHorNormal;
986 begin
987         //\92Ê\8fí\95\\8e¦\82É\82·\82é
988         GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;
989         BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
990         BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
991         GikoSys.Setting.ListWidthState := glsNormal;
992 end;
993 // *************************************************************************
994 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\8dÅ\91å/\8dÅ\8f¬\95\\8e¦\82É\82·\82é \92\8d)ListOrientation = gloHorizontal\81@
995 // *************************************************************************
996 procedure TGikoDM.SetThreadAreaHorizontal(gls : TGikoListState);
997 begin
998         if GikoSys.Setting.ListWidthState = glsNormal then
999                 GikoForm.BrowserSizeWidth := GikoForm.ViewPanel.Width;
1000         //\8dÅ\91å\95\\8e¦
1001         if (gls = glsMax) then begin
1002                 GikoForm.ViewPanel.Width := 1;
1003                 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1004                 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
1005                 GikoSys.Setting.ListWidthState := glsMax;
1006         end else if (gls = glsMin) then begin
1007                 GikoForm.ViewPanel.Width := GikoForm.ThreadMainPanel.Width - 80;
1008                 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
1009                 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
1010                 GikoSys.Setting.ListWidthState := glsMin;
1011         end;
1012 end;
1013 // *************************************************************************
1014 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\92Ê\8fí\95\\8e¦\82É\82·\82é \92\8d)ListOrientation = gloVertical
1015 // *************************************************************************
1016 procedure TGikoDM.SetThreadAreaVerNormal;
1017 begin
1018         //\92Ê\8fí\95\\8e¦\82É\82·\82é
1019         GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;
1020         BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1021         BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1022         GikoSys.Setting.ListHeightState := glsNormal;
1023 end;
1024 // *************************************************************************
1025 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\8dÅ\91å/\8dÅ\8f¬\95\\8e¦\82É\82·\82é \92\8d)ListOrientation = gloVertical
1026 // *************************************************************************
1027 procedure TGikoDM.SetThreadAreaVertical(gls : TGikoListState);
1028 begin
1029         if GikoSys.Setting.ListHeightState = glsNormal then
1030                 GikoForm.BrowserSizeHeight := GikoForm.ViewPanel.Height;
1031         if (gls = glsMin) then begin
1032                 GikoForm.ViewPanel.Height := GikoForm.ThreadMainPanel.Height - GikoForm.BrowserCoolBar.Height - 7;
1033                 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
1034                 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1035                 GikoSys.Setting.ListHeightState := glsMin;
1036         end else if (gls = glsMax) then begin
1037                 GikoForm.ViewPanel.Height := 1;
1038                 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
1039                 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
1040                 GikoSys.Setting.ListHeightState := glsMax;
1041         end;
1042 end;
1043 // *************************************************************************
1044 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\82ð\91å\82«\82­\95\\8e¦\82·\82é
1045 // *************************************************************************
1046 procedure TGikoDM.BrowserMaxActionExecute(Sender: TObject);
1047 begin
1048         if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1049                 case GikoSys.Setting.ListWidthState of
1050                         glsMax: begin
1051                                 //\92Ê\8fí\95\\8e¦\82É\82·\82é
1052                                 SetThreadAreaHorNormal;
1053                         end;
1054                         glsMin, glsNormal: begin
1055                                 //\8dÅ\91å\95\\8e¦\82É\82·\82é
1056                                 SetThreadAreaHorizontal(glsMax);
1057                         end;
1058                 end;
1059         end else begin
1060                 case GikoSys.Setting.ListHeightState of
1061                         glsMax: begin
1062                                 //\92Ê\8fí\95\\8e¦\82É\82·\82é
1063                                 SetThreadAreaVerNormal;
1064                         end;
1065                         glsMin, glsNormal: begin
1066                                 //\8dÅ\91å\95\\8e¦\82É\82·\82é
1067                                 SetThreadAreaVertical(glsMax);
1068                         end;
1069                 end;
1070         end;
1071 end;
1072 // *************************************************************************
1073 //! \83X\83\8c\83b\83h\95\\8e¦\83G\83\8a\83A\82ð\8f¬\82³\82­\95\\8e¦\82·\82é
1074 // *************************************************************************
1075 procedure TGikoDM.BrowserMinActionExecute(Sender: TObject);
1076 begin
1077         if GikoSys.Setting.ListOrientation = gloHorizontal then begin
1078                 case GikoSys.Setting.ListWidthState of
1079                         glsMax, glsNormal: begin
1080                                 //\8dÅ\8f¬\95\\8e¦\82É\82·\82é
1081                                 SetThreadAreaHorizontal(glsMin);
1082                         end;
1083                         glsMin: begin
1084                                 //\92Ê\8fí\95\\8e¦\82É\82·\82é
1085                                 SetThreadAreaHorNormal;
1086                         end;
1087                 end;
1088         end else begin
1089                 case GikoSys.Setting.ListHeightState of
1090                         glsMax, glsNormal: begin
1091                                 //\8dÅ\8f¬\95\\8e¦\82É\82·\82é
1092                                 SetThreadAreaVertical(glsMin);
1093                         end;
1094                         glsMin: begin
1095                                 //\92Ê\8fí\95\\8e¦\82É\82·\82é
1096                                 SetThreadAreaVerNormal;
1097                         end;
1098                 end;
1099         end;
1100 end;
1101 // *************************************************************************
1102 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\90æ\93ª\82Ö\88Ú\93®\82·\82é
1103 // *************************************************************************
1104 procedure TGikoDM.ScrollTopActionExecute(Sender: TObject);
1105 begin
1106         GikoForm.BrowserMovement('top');
1107 end;
1108 // *************************************************************************
1109 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\8dÅ\8cã\82Ö\88Ú\93®\82·\82é
1110 // *************************************************************************
1111 procedure TGikoDM.ScrollLastActionExecute(Sender: TObject);
1112 begin
1113         GikoForm.BrowserMovement('bottom');
1114 end;
1115 // *************************************************************************
1116 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\90V\92\85\82Ö\88Ú\93®\82·\82é
1117 // *************************************************************************
1118 procedure TGikoDM.ScrollNewActionExecute(Sender: TObject);
1119 begin
1120         GikoForm.BrowserMovement('new');
1121 end;
1122 // *************************************************************************
1123 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\83R\83R\82Ü\82Å\93Ç\82ñ\82¾\82Ö\88Ú\93®\82·\82é
1124 // *************************************************************************
1125 procedure TGikoDM.ScrollKokoActionExecute(Sender: TObject);
1126 begin
1127         GikoForm.BrowserMovement('koko');
1128 end;
1129 // *************************************************************************
1130 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\83R\83R\82Ü\82Å\93Ç\82ñ\82¾\82Ö\88Ú\93®\82·\82é\82ÌUpdate\83C\83x\83\93\83g
1131 // *************************************************************************
1132 procedure TGikoDM.ScrollKokoActionUpdate(Sender: TObject);
1133 begin
1134         ScrollKokoAction.Enabled := (GikoForm.GetActiveContent <> nil)
1135                                                                 and (GikoForm.GetActiveContent.IsLogFile)
1136                                                                 and (GikoForm.GetActiveContent.Kokomade <> -1);
1137 end;
1138 // *************************************************************************
1139 //! \83\8c\83X\8f\91\82«\8d\9e\82Ý\83E\83B\83\93\83h\83E\82ð\95\\8e¦\82·\82é
1140 // *************************************************************************
1141 procedure TGikoDM.EditorActionExecute(Sender: TObject);
1142 var
1143         Editor: TEditorForm;
1144         Item: TThreadItem;
1145 begin
1146         Item := GikoForm.GetActiveContent;
1147         if Item = nil then Exit;
1148         Editor := TEditorForm.Create(GikoForm.GetMainForm);
1149         Editor.SetThreadItem(Item);
1150         Editor.Show;
1151     Editor.SetFocusEdit;
1152 end;
1153 // *************************************************************************
1154 //! \83X\83\8c\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
1155 // *************************************************************************
1156 procedure TGikoDM.IEActionExecute(Sender: TObject);
1157 begin
1158         ShowThreadAction.Execute;
1159 end;
1160 // *************************************************************************
1161 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
1162 // *************************************************************************
1163 procedure TGikoDM.ShowThreadActionExecute(Sender: TObject);
1164 var
1165         ThreadItem: TThreadItem;
1166 begin
1167         ThreadItem := GikoForm.GetActiveContent;
1168         if ThreadItem = nil then Exit;
1169         GikoSys.OpenBrowser(ThreadItem.URL, gbtAuto);
1170 end;
1171 // *************************************************************************
1172 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\94Â\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
1173 // *************************************************************************
1174 procedure TGikoDM.ShowBoardActionExecute(Sender: TObject);
1175 var
1176         ThreadItem: TThreadItem;
1177 begin
1178         ThreadItem := GikoForm.GetActiveContent;
1179         if ThreadItem = nil then Exit;
1180         GikoSys.OpenBrowser(ThreadItem.ParentBoard.URL, gbtAuto);
1181 end;
1182 // *************************************************************************
1183 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82ÌURL\82ð\83R\83s\81[\82·\82é
1184 // *************************************************************************
1185 procedure TGikoDM.URLCopyActionExecute(Sender: TObject);
1186 var
1187         s: string;
1188 begin
1189         s := '';
1190         if TObject(GikoForm.GetActiveContent) is TBoard then
1191                 s := s + TBoard(GikoForm.GetActiveContent).URL + #13#10
1192         else if TObject(GikoForm.GetActiveContent) is TThreadItem then
1193                 s := s + TThreadItem(GikoForm.GetActiveContent).URL + #13#10;
1194         if s <> '' then
1195                 Clipboard.AsText := s;
1196 end;
1197 // *************************************************************************
1198 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\96¼\82ð\83R\83s\81[\82·\82é
1199 // *************************************************************************
1200 procedure TGikoDM.NameCopyActionExecute(Sender: TObject);
1201 var
1202         s: string;
1203 begin
1204         s := '';
1205         if TObject(GikoForm.GetActiveContent) is TBoard then
1206                 s := s + TBoard(GikoForm.GetActiveContent).Title + #13#10
1207         else if TObject(GikoForm.GetActiveContent) is TThreadItem then
1208                 s := s + TThreadItem(GikoForm.GetActiveContent).Title + #13#10;
1209         if s <> '' then
1210                 Clipboard.AsText := s;
1211 end;
1212 // *************************************************************************
1213 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\96¼\82ÆURL\82ð\83R\83s\81[\82·\82é
1214 // *************************************************************************
1215 procedure TGikoDM.NameURLCopyActionExecute(Sender: TObject);
1216 var
1217         s: string;
1218 begin
1219         s := '';
1220         if TObject(GikoForm.GetActiveContent) is TBoard then
1221                 s := s + TBoard(GikoForm.GetActiveContent).Title + #13#10 + TBoard(GikoForm.GetActiveContent).URL + #13#10
1222         else if TObject(GikoForm.GetActiveContent) is TThreadItem then
1223                 s := s + TThreadItem(GikoForm.GetActiveContent).Title + #13#10 + TThreadItem(GikoForm.GetActiveContent).URL + #13#10;
1224         if s <> '' then
1225                 Clipboard.AsText := s;
1226 end;
1227 // *************************************************************************
1228 //! \95\\8e¦\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
1229 // *************************************************************************
1230 procedure TGikoDM.ItemReloadActionExecute(Sender: TObject);
1231 var
1232         ThreadItem: TThreadItem;
1233         shiftDown: Boolean;
1234 begin
1235         ThreadItem := GikoForm.GetActiveContent;
1236         shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
1237         if ThreadItem <> nil then
1238                 GikoForm.DownloadContent(ThreadItem, shiftDown);
1239 end;
1240 // *************************************************************************
1241 //! \8c»\8dÝ\8aJ\82¢\82Ä\82¢\82é\83^\83u\82ð\95Â\82\82é
1242 // *************************************************************************
1243 procedure TGikoDM.BrowserTabCloseActionExecute(Sender: TObject);
1244 var
1245         idx: Integer;
1246 begin
1247         idx := GikoForm.BrowserTab.TabIndex;
1248         if idx <> -1 then begin
1249                 if GikoForm.BrowserTab.Tabs.Objects[idx] <> nil then begin
1250                         GikoForm.DeleteTab(TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[idx]));
1251                 end;
1252         end;
1253 end;
1254 // *************************************************************************
1255 //! \83^\83u\82ª\82P\82Â\88È\8fã\82 \82ê\82ª\97L\8cø\82É\82·\82éUpdate\83C\83x\83\93\83g
1256 // *************************************************************************
1257 procedure TGikoDM.BrowserTabCloseActionUpdate(Sender: TObject);
1258 begin
1259         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0);
1260 end;
1261 // *************************************************************************
1262 //! \8c»\8dÝ\8aJ\82¢\82Ä\82¢\82é\83^\83u\88È\8aO\82ð\95Â\82\82é
1263 // *************************************************************************
1264 procedure TGikoDM.NotSelectTabCloseActionExecute(Sender: TObject);
1265 var
1266         i: Integer;
1267         idx: Integer;
1268 begin
1269         idx := GikoForm.BrowserTab.TabIndex;
1270         if idx = -1 then Exit;
1271         GikoForm.BrowserTab.Tabs.BeginUpdate;
1272         for i := GikoForm.BrowserTab.Tabs.Count - 1 downto GikoForm.BrowserTab.TabIndex + 1 do begin
1273                 TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Free;
1274                 GikoForm.BrowserTab.Tabs.Delete(i);
1275         end;
1276         if idx > 0 then begin
1277                 for i := GikoForm.BrowserTab.TabIndex - 1 downto 0 do begin
1278                         TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Free;
1279                         GikoForm.BrowserTab.Tabs.Delete(i);
1280                 end;
1281         end;
1282         GikoForm.BrowserTab.Tabs.EndUpdate;
1283 end;
1284 // *************************************************************************
1285 //! \83^\83u\82ª\82Q\82Â\88È\8fã\82 \82ê\82ª\97L\8cø\82É\82·\82éUpdate\83C\83x\83\93\83g
1286 // *************************************************************************
1287 procedure TGikoDM.NotSelectTabCloseActionUpdate(Sender: TObject);
1288 begin
1289         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1290 end;
1291 // *************************************************************************
1292 //! \91S\82Ä\82Ì\83^\83u\82ð\95Â\82\82é
1293 // *************************************************************************
1294 procedure TGikoDM.AllTabCloseActionExecute(Sender: TObject);
1295 var
1296         i: Integer;
1297 begin
1298         if GikoSys.Setting.ShowDialogForAllTabClose then
1299                 if(MessageDlg('\91S\82Ä\82Ì\83^\83u\82ð\95Â\82\82Ä\82æ\82ë\82µ\82¢\82Å\82·\82©\81H', mtConfirmation,[mbOk, mbCancel], 0) = mrCancel ) then
1300                         Exit;
1301
1302         GikoForm.ActiveContent := nil;
1303         GikoForm.BrowserNullTab.Thread := nil;
1304         GikoForm.BrowserTab.OnChange := nil;
1305         GikoForm.BrowserTab.Tabs.BeginUpdate;
1306         for i := GikoForm.BrowserTab.Tabs.Count - 1 downto 0 do begin
1307                 TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Free;
1308         end;
1309         GikoForm.BrowserTab.Tabs.Clear;
1310         GikoForm.BrowserTab.Tabs.EndUpdate;
1311         GikoForm.BrowserTab.OnChange := GikoForm.BrowserTabChange;
1312         GikoForm.SetContent(GikoForm.BrowserNullTab);
1313         GikoForm.Caption := CAPTION_NAME ;
1314 end;
1315 // *************************************************************************
1316 //! \8c»\8dÝ\8aJ\82¢\82Ä\82¢\82é\83^\83u\82Ì\83X\83\8c\83b\83h\82ð\8dí\8f\9c\82·\82é
1317 // *************************************************************************
1318 procedure TGikoDM.ActiveLogDeleteActionExecute(Sender: TObject);
1319 const
1320         DEL_MSG = '\81g^0\81h\82Ì\83\8d\83O\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
1321         DEL_TITLE = '\8dí\8f\9c\8am\94F';
1322 var
1323         idx: Integer;
1324         ThreadItem: TThreadItem;
1325 begin
1326         idx := GikoForm.BrowserTab.TabIndex;
1327         if idx <> -1 then begin
1328                 if GikoForm.BrowserTab.Tabs.Objects[idx] <> nil then begin
1329                         ThreadItem := TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[idx]).Thread;
1330                         if GikoSys.Setting.DeleteMsg then
1331                                 if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
1332                                         if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', ThreadItem.Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
1333                                                 Exit;
1334                         GikoForm.DeleteTab(TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[idx]));
1335             GikoForm.DeleteHistory(ThreadItem);
1336                         ThreadItem.DeleteLogFile;
1337                         if ThreadItem.ParentBoard = GikoForm.ActiveList then
1338                                 GikoForm.ListView.Refresh;
1339                 end;
1340         end;
1341 end;
1342 // *************************************************************************
1343 //! \88ê\94Ô\8d\82Ì\83^\83u\82ð\91I\91ð\82·\82é
1344 // *************************************************************************
1345 procedure TGikoDM.LeftmostTabSelectActionExecute(Sender: TObject);
1346 begin
1347         if GikoForm.BrowserTab.Tabs.Count > 0 then begin
1348                 GikoForm.BrowserTab.TabIndex := 0;
1349                 GikoForm.BrowserTab.OnChange(nil);
1350         end;
1351 end;
1352 // *************************************************************************
1353 //! \8d\82Ì\83^\83u\82ð\91I\91ð\82·\82é\82ÌUpdate\83C\83x\83\93\83g
1354 // *************************************************************************
1355 procedure TGikoDM.LeftTabSelectActionUpdate(Sender: TObject);
1356 begin
1357     if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1358         LeftmostTabSelectActionUpdate(Sender);
1359     end else begin
1360         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1361     end;
1362 end;
1363
1364 // *************************************************************************
1365 //! \83^\83u\82Ì\90\94\82ª\82P\88È\8fã\82Å\81A\83^\83u\82Ì\83C\83\93\83f\83b\83N\83X\82ª\82O\88È\8aO\82Å\97L\8cø\82É\82È\82éUpdate\83C\83x\83\93\83g
1366 // *************************************************************************
1367 procedure TGikoDM.LeftmostTabSelectActionUpdate(Sender: TObject);
1368 begin
1369         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1370                                                                 and (GikoForm.BrowserTab.TabIndex <> 0);
1371 end;
1372 // *************************************************************************
1373 //! \8d\82Ì\83^\83u\82ð\91I\91ð\82·\82é
1374 // *************************************************************************
1375 procedure TGikoDM.LeftTabSelectActionExecute(Sender: TObject);
1376 begin
1377         if GikoForm.BrowserTab.Tabs.Count > 0 then begin
1378                 if GikoForm.BrowserTab.TabIndex = -1 then begin
1379                         GikoForm.BrowserTab.TabIndex := 0;
1380                         GikoForm.BrowserTab.OnChange(nil);
1381                 end else if GikoForm.BrowserTab.TabIndex > 0 then begin
1382                         GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex - 1;
1383                         GikoForm.BrowserTab.OnChange(nil);
1384                 end else begin
1385             if (GikoSys.Setting.LoopBrowserTabs) and
1386                 (GikoForm.BrowserTab.TabIndex = 0) then begin
1387                         GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1388                         GikoForm.BrowserTab.OnChange(nil);
1389             end;
1390         end;
1391         end;
1392 end;
1393 // *************************************************************************
1394 //! \89E\82Ì\83^\83u\82ð\91I\91ð\82·\82é
1395 // *************************************************************************
1396 procedure TGikoDM.RightTabSelectActionExecute(Sender: TObject);
1397 begin
1398         if GikoForm.BrowserTab.Tabs.Count > 0 then begin
1399                 if GikoForm.BrowserTab.TabIndex = -1 then begin
1400                         GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1401                         GikoForm.BrowserTab.OnChange(nil);
1402                 end else if GikoForm.BrowserTab.TabIndex < (GikoForm.BrowserTab.Tabs.Count - 1) then begin
1403                         GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.TabIndex + 1;
1404                         GikoForm.BrowserTab.OnChange(nil);
1405                 end else begin
1406             if (GikoSys.Setting.LoopBrowserTabs) and
1407                 (GikoForm.BrowserTab.TabIndex = (GikoForm.BrowserTab.Tabs.Count - 1)) then begin
1408                         GikoForm.BrowserTab.TabIndex := 0;
1409                         GikoForm.BrowserTab.OnChange(nil);
1410             end;
1411         end;
1412         end;
1413 end;
1414 // *************************************************************************
1415 //! \89E\82Ì\83^\83u\82ð\91I\91ð\82·\82éUpdate\83C\83x\83\93\83g
1416 // *************************************************************************
1417 procedure TGikoDM.RightTabSelectActionUpdate(Sender: TObject);
1418 begin
1419     if ( not GikoSys.Setting.LoopBrowserTabs ) then begin
1420         RightmostTabSelectActionUpdate(Sender);
1421     end else begin
1422         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1423     end;
1424 end;
1425
1426 // *************************************************************************
1427 //! \88ê\94Ô\89E\82Ì\83^\83u\82ð\91I\91ð\82·\82é
1428 // *************************************************************************
1429 procedure TGikoDM.RightmostTabSelectActionExecute(Sender: TObject);
1430 begin
1431         if GikoForm.BrowserTab.Tabs.Count > 0 then begin
1432                 GikoForm.BrowserTab.TabIndex := GikoForm.BrowserTab.Tabs.Count - 1;
1433                 GikoForm.BrowserTab.OnChange(nil);
1434         end;
1435 end;
1436 // *************************************************************************
1437 //! \88ê\94Ô\89E\82Ì\83^\83u\82ð\91I\91ð\82·\82é\82ÌUpdate\83C\83x\83\93\83g
1438 // *************************************************************************
1439 procedure TGikoDM.RightmostTabSelectActionUpdate(Sender: TObject);
1440 begin
1441         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 0)
1442                                                                 and (GikoForm.BrowserTab.TabIndex <> GikoForm.BrowserTab.Tabs.Count - 1);
1443
1444 end;
1445 // *************************************************************************
1446 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\82¨\8bC\82É\93ü\82è\82É\92Ç\89Á
1447 // *************************************************************************
1448 procedure TGikoDM.ThreadFavoriteAddActionExecute(Sender: TObject);
1449 begin
1450         if TObject(GikoForm.ListView.Selected.Data) is TThreadItem then
1451                 GikoForm.ShowFavoriteAddDialog(TObject(GikoForm.ListView.Selected.Data));
1452 end;
1453 // *************************************************************************
1454 //! \83X\83\8c\83b\83h\88ê\97\97\82Å\81A\83X\83\8c\82ª\82P\82Â\88È\8fã\91I\91ð\82³\82ê\82Ä\82¢\82é\97L\8cø\82É\82È\82éUpdate\83C\83x\83\93\83g
1455 // *************************************************************************
1456 procedure TGikoDM.ThreadFavoriteAddActionUpdate(Sender: TObject);
1457 begin
1458         TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard)
1459                                                                         and (GikoForm.ListView.SelCount > 0);
1460 end;
1461 // *************************************************************************
1462 //! \83\8c\83X\82Ì\93à\97e\82ð\8di\82è\8d\9e\82Þ
1463 // *************************************************************************
1464 procedure TGikoDM.SelectResActionExecute(Sender: TObject);
1465 var
1466         Dlg: TListSelectDialog;
1467         FilterList : TStringList;
1468         idx : Integer;
1469 begin
1470         Dlg := TListSelectDialog.Create(GikoForm);
1471         try
1472                 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
1473                 Dlg.SelectComboBox.Text := GikoForm.SelectResWord;
1474                 Dlg.ShowModal;
1475                 if Dlg.ModalResult = mrOK then begin
1476                         SelectResAction.Checked := True;
1477                         if Length( Dlg.SelectComboBox.Text ) = 0 then begin
1478                                 // \8bó\93ü\97Í\82Å OK \82Í\8di\82è\8d\9e\82Ý\89ð\8f\9c\82Æ\93¯\88Ó\8b`
1479                                 ResRangeAction.Execute;
1480                         end else begin
1481                                 GikoSys.ResRange := Ord( grrSelect );
1482
1483                                 // \8dÅ\8cã\82É\90Ý\92è\82µ\82½\82à\82Ì\82ð\8ao\82¦\82Ä\82¨\82­
1484                                 GikoForm.SelectResWord := Dlg.SelectComboBox.Text;
1485
1486                                 // \8c\9f\8dõ\97\9a\97ð\82Ì\8dX\90V
1487                                 idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
1488                                 if idx <> -1 then
1489                                         GikoSys.Setting.SelectTextList.Delete(idx);
1490                                 GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
1491                                 while Dlg.SelectComboBox.Items.Count > 100 do begin
1492                                         Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
1493                                 end;
1494
1495                                 try
1496                                         if GikoForm.SelectComboBoxPanel.Visible then
1497                                                 GikoForm.SelectComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1498                                 except
1499                                 end;
1500
1501                                 // \83t\83B\83\8b\83^\82Ì\90Ý\92è
1502                                 FilterList := TStringList.Create;
1503                                 try
1504                                         GikoSys.FSelectResFilter.Reverse := True;
1505                                         FilterList.Delimiter := ' '; //\8bæ\90Ø\82è\8eq\82ð\94¼\8ap\83X\83y\81[\83X\82É\90Ý\92è
1506                                         FilterList.DelimitedText := Dlg.SelectComboBox.Text;
1507
1508                                         GikoSys.FSelectResFilter.LoadFromStringList( FilterList );
1509                                 finally
1510                                         FilterList.Free;
1511                                 end;
1512                                 GikoForm.RepaintAllTabsBrowser();
1513                         end;
1514                 end else begin
1515                         // \83L\83\83\83\93\83Z\83\8b
1516                         if GikoSys.ResRange <> Ord( grrSelect ) then
1517                                 ResRangeAction.Execute;
1518                 end;
1519         finally
1520                 Dlg.Release;
1521         end;
1522
1523 end;
1524 // *************************************************************************
1525 //! \91S\82Ä\82Ì\83\8c\83X\82ð\95\\8e¦\82·\82é
1526 // *************************************************************************
1527 procedure TGikoDM.AllResActionExecute(Sender: TObject);
1528 begin
1529         if(GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil )
1530                 and (GikoForm.ActiveContent.Browser.Busy) then Exit;
1531
1532         GikoForm.ResRangeMenuSelect     := Ord( grrAll );
1533         AllResAction.Checked            := True;
1534
1535         //\81@\95\\8e¦\94Í\88Í\82ð\90Ý\92è\82·\82é
1536         SetResRange(Ord( grrAll ));
1537 end;
1538 // *************************************************************************
1539 //! \83\8c\83X\82Ì\95\\8e¦\94Í\88Í\82ð\90Ý\92è
1540 // *************************************************************************
1541 procedure TGikoDM.ResRangeActionExecute(Sender: TObject);
1542 begin
1543         case GikoForm.ResRangeMenuSelect of
1544         Ord( grrAll ):  AllResAction.Execute;
1545         Ord( grrKoko ): OnlyKokoResAction.Execute;
1546         Ord( grrNew ):  OnlyNewResAction.Execute;
1547         100:                    OnlyAHundredResAction.Execute;
1548         end;
1549
1550 end;
1551 // *************************************************************************
1552 //! \82±\82Ì\83X\83\8c\83b\83h\82ð\8aÜ\82Þ\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦
1553 // *************************************************************************
1554 procedure TGikoDM.UpBoardActionExecute(Sender: TObject);
1555 begin
1556         GikoForm.SelectTreeNode( GikoForm.GetActiveContent.ParentBoard, True );
1557 end;
1558 // *************************************************************************
1559 //! \8ew\92è\82µ\82½\94Ô\8d\86\82Ì\83\8c\83X\82É\94ò\82Ô
1560 // *************************************************************************
1561 procedure TGikoDM.JumpToNumOfResActionExecute(Sender: TObject);
1562 var
1563         str: string;
1564         res: integer;
1565 begin
1566         str := '1';
1567         if( InputQuery('\8ew\92è\82µ\82½\94Ô\8d\86\82Ì\83\8c\83X\82É\94ò\82Ô', '\94Ô\8d\86\82ð\93ü\97Í\82µ\82Ä\82­\82¾\82³\82¢', str) ) then begin
1568                 str := ZenToHan(str);
1569                 res := StrToIntDef(str, -1);
1570                 if (res > 0) and (res <= GikoForm.GetActiveContent.Count) then begin
1571                         GikoForm.ActiveContent.Move(IntToStr(res));
1572                         SetFocusForBrowserAction.Execute;
1573                 end else if res > GikoForm.GetActiveContent.Count then begin
1574                         GikoForm.ActiveContent.Move(IntToStr(GikoForm.GetActiveContent.Count));
1575                         SetFocusForBrowserAction.Execute;
1576                 end;
1577         end;
1578 end;
1579 // *************************************************************************
1580 //! \83A\83N\83e\83B\83u\82È\83^\83u\82æ\82è\89E\82ð\95Â\82\82é
1581 // *************************************************************************
1582 procedure TGikoDM.RightTabCloseActionExecute(Sender: TObject);
1583 var
1584         i: Integer;
1585         idx: Integer;
1586 begin
1587         idx := GikoForm.BrowserTab.TabIndex;
1588         if idx = -1 then Exit;
1589         GikoForm.BrowserTab.Tabs.BeginUpdate;
1590         for i := GikoForm.BrowserTab.Tabs.Count - 1 downto idx + 1 do begin
1591                 TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Free;
1592                 GikoForm.BrowserTab.Tabs.Delete(i);
1593         end;
1594         GikoForm.BrowserTab.Tabs.EndUpdate;
1595 end;
1596 // *************************************************************************
1597 //! \83^\83u\82Ì\90\94\82ª\82Q\88È\8fã\82Å\97L\8cø\82ÈUpdate\83C\83x\83\93\83g
1598 // *************************************************************************
1599 procedure TGikoDM.RightTabCloseActionUpdate(Sender: TObject);
1600 begin
1601         TAction(Sender).Enabled := (GikoForm.BrowserTab.Tabs.Count > 1);
1602 end;
1603 // *************************************************************************
1604 //! \83A\83N\83e\83B\83u\82È\83^\83u\82æ\82è\8d\82ð\95Â\82\82é
1605 // *************************************************************************
1606 procedure TGikoDM.LeftTabCloseActionExecute(Sender: TObject);
1607 var
1608         i: Integer;
1609         idx: Integer;
1610 begin
1611         idx := GikoForm.BrowserTab.TabIndex;
1612         if idx = -1 then Exit;
1613         GikoForm.BrowserTab.Tabs.BeginUpdate;
1614         if idx > 0 then begin
1615                 for i := idx - 1 downto 0 do begin
1616                         TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Free;
1617                         GikoForm.BrowserTab.Tabs.Delete(i);
1618                 end;
1619         end;
1620         GikoForm.BrowserTab.Tabs.EndUpdate;
1621 end;
1622 ////////////////////////////////\83X\83\8c\83b\83h\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
1623 procedure TGikoDM.DataModuleCreate(Sender: TObject);
1624 begin
1625     // GikoDM\82æ\82è\82à\91\81\82­\8f\89\8aú\89»\82³\82ê\82é\95K\97v\82ª\82 \82é\83t\83@\83C\83\8b\82ª\82¢\82é\82Æ\82±\82¯\82é\81I\81I
1626     // \8f\89\8aú\89»\8f\87\94Ô\82É\92\8d\88Ó\82·\82é\82±\82Æ\81I\81I
1627     //\8f\89\89ñ\8bN\93®\8e\9e\82Ì\8f\89\8aú\89»\83t\83@\83C\83\8b\90Ý\92è
1628     TDefaultFileManager.CopyDefaultFiles(GikoSys.Setting.GetDefaultFilesFileName);
1629 end;
1630 // *************************************************************************
1631 //! \83\8d\83O\8c\9f\8dõ\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
1632 // *************************************************************************
1633 procedure TGikoDM.SearchActionExecute(Sender: TObject);
1634 var
1635         chk: TObject;
1636 begin
1637
1638         if GikoForm.SearchDialog = nil then begin
1639                 if (GikoForm.GetActiveList is TCategory) or (GikoForm.GetActiveList is TBoard) then
1640                         chk := GikoForm.GetActiveList
1641                 else
1642                         chk := nil;
1643
1644                 GikoForm.SearchDialog := TSearchDialog.Create(GikoForm, chk);
1645                 GikoForm.SearchDialog.SearchComboBox.Items.Assign( GikoSys.Setting.SelectTextList );
1646         end;
1647
1648         try
1649                 GikoForm.SearchDialog.Show;
1650         except
1651         end;
1652 end;
1653 // *************************************************************************
1654 //! \83I\83v\83V\83\87\83\93\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
1655 // *************************************************************************
1656 procedure TGikoDM.OptionActionExecute(Sender: TObject);
1657 var
1658         Dlg: TOptionDialog;
1659 begin
1660         Dlg := TOptionDialog.Create(GikoForm);
1661         try
1662                 Dlg.ShowModal;
1663         finally
1664                 Dlg.Release;
1665         end;
1666 end;
1667 // *************************************************************************
1668 //! \8f\84\89ñ\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
1669 // *************************************************************************
1670 procedure TGikoDM.RoundActionExecute(Sender: TObject);
1671 var
1672         Dlg: TRoundDialog;
1673 begin
1674         Dlg := TRoundDialog.Create(GikoForm);
1675         try
1676                 Dlg.ShowModal;
1677         finally
1678                 Dlg.Release;
1679         end;
1680 end;
1681 // *************************************************************************
1682 //! \83L\81[\90Ý\92è\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
1683 // *************************************************************************
1684 procedure TGikoDM.KeySettingActionExecute(Sender: TObject);
1685 var
1686         Dlg: TKeySettingForm;
1687 begin
1688         Dlg := TKeySettingForm.Create(GikoForm);
1689         try
1690                 if Dlg.ShowModal = mrOk then begin
1691                         GikoSys.SaveKeySetting(GikoFormActionList, Setting.KEY_SETTING_FILE_NAME);
1692                         GikoSys.SaveKeySetting(Dlg.EditorForm.ActionList, Setting.EKEY_SETTING_FILE_NAME);
1693                         GikoSys.Setting.Gestures.SaveGesture( GikoSys.Setting.GetGestureFileName );
1694                 end;
1695
1696         finally
1697                 Dlg.Release;
1698                 MouseGesture.UnHook;
1699                 MouseGesture.OnGestureStart := GikoForm.OnGestureStart;
1700                 MouseGesture.OnGestureMove := GikoForm.OnGestureMove;
1701                 MouseGesture.OnGestureEnd := GikoForm.OnGestureEnd;
1702                 if GikoSys.Setting.GestureEnabled then begin
1703                         GikoSys.Setting.Gestures.ClearGesture;
1704                         GikoSys.Setting.Gestures.LoadGesture(
1705                                 GikoSys.Setting.GetGestureFileName, GikoFormActionList );
1706                         MouseGesture.SetHook( GikoForm.Handle );
1707                 end;
1708         end;
1709 end;
1710 // *************************************************************************
1711 //! \83L\81[\90Ý\92è\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
1712 // *************************************************************************
1713 procedure TGikoDM.KotehanActionExecute(Sender: TObject);
1714 var
1715         Dlg: TKotehanDialog;
1716 begin
1717         Dlg := TKotehanDialog.Create(GikoForm);
1718         try
1719                 Dlg.ShowModal;
1720         finally
1721                 Dlg.Release;
1722         end;
1723 end;
1724 // *************************************************************************
1725 //! \83c\81[\83\8b\83o\81[\90Ý\92è\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
1726 // *************************************************************************
1727 procedure TGikoDM.ToolBarSettingActionExecute(Sender: TObject);
1728 var
1729         Dlg: TToolBarSettingDialog;
1730         i: Integer;
1731 begin
1732         Dlg := TToolBarSettingDialog.Create(GikoForm, GikoFormActionList);
1733         try
1734                 Dlg.AddToolBar(GikoForm.StdToolBar, gttStandard);
1735                 Dlg.AddToolBar(GikoForm.ListToolBar, gttList);
1736                 Dlg.AddToolBar(GikoForm.BrowserToolBar, gttBrowser);
1737                 case GikoForm.ToolBarSettingSender of
1738                 tssMain:                Dlg.ToolBarIndex := 0;
1739                 tssList:                Dlg.ToolBarIndex := 1;
1740                 tssBrowser: Dlg.ToolBarIndex := 2;
1741                 end;
1742                 if Dlg.ShowModal = mrOK then begin
1743                         GikoForm.SetToolBarPopup;
1744
1745                         //\8dÅ\93K\95\9d\82ð\8dÄ\90Ý\92è\82·\82é\82½\82ß\82É\93K\93\96\82È\83v\83\8d\83p\83e\83B\82ð\82¢\82\82­\82é
1746                         for i := 0 to GikoForm.MainCoolBar.Bands.Count - 1 do begin
1747                                 GikoForm.MainCoolBar.Bands[i].MinWidth :=
1748                                         GikoForm.MainCoolBar.Bands[i].MinWidth + 1;
1749                                 GikoForm.MainCoolBar.Bands[i].MinWidth :=
1750                                         GikoForm.MainCoolBar.Bands[i].MinWidth - 1;
1751                         end;
1752                         for i := 0 to GikoForm.ListCoolBar.Bands.Count - 1 do begin
1753                                 GikoForm.ListCoolBar.Bands[i].MinWidth :=
1754                                         GikoForm.ListCoolBar.Bands[i].MinWidth + 1;
1755                                 GikoForm.ListCoolBar.Bands[i].MinWidth :=
1756                                         GikoForm.ListCoolBar.Bands[i].MinWidth - 1;
1757                         end;
1758                         for i := 0 to GikoForm.BrowserCoolBar.Bands.Count - 1 do begin
1759                                 GikoForm.BrowserCoolBar.Bands[i].MinWidth :=
1760                                         GikoForm.BrowserCoolBar.Bands[i].MinWidth + 1;
1761                                 GikoForm.BrowserCoolBar.Bands[i].MinWidth :=
1762                                         GikoForm.BrowserCoolBar.Bands[i].MinWidth - 1;
1763                         end;
1764
1765                         SaveToolBarSetting(GikoForm.StdToolBar);
1766                         SaveToolBarSetting(GikoForm.ListToolBar);
1767                         //ListToolBar\82É\82¢\82é\82©\82à\82µ\82ê\82È\82¢\8di\8d\9e\82ÝComboBox\82ð\94z\92u
1768                         GikoForm.SetSelectComboBox;
1769                         GikoForm.ResetBandInfo( GikoForm.ListCoolBar, GikoForm.ListToolBar );
1770                         SaveToolBarSetting(GikoForm.BrowserToolBar);
1771                 end;
1772         finally
1773                 Dlg.Release;
1774                 GikoForm.ToolBarSettingSender := tssNone;
1775         end;
1776 end;
1777 // *************************************************************************
1778 //! \83~\83\85\81[\83g
1779 // *************************************************************************
1780 procedure TGikoDM.MuteActionExecute(Sender: TObject);
1781 begin
1782         GikoSys.Setting.Mute := not GikoSys.Setting.Mute;
1783 end;
1784 ////////////////////////////////\83c\81[\83\8b\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
1785 // *************************************************************************
1786 //! \83X\83\8c\83b\83h\88ê\97\97\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
1787 // *************************************************************************
1788 procedure TGikoDM.TreeSelectBoradReloadExecute(Sender: TObject);
1789 var
1790         Board: TBoard;
1791         TmpTreeNode: TTreeNode;
1792 begin
1793         TmpTreeNode := GikoForm.ClickNode;
1794         GikoForm.TreeView.Selected := GikoForm.ClickNode;
1795         Board := nil;
1796
1797         if TObject(TmpTreeNode.Data) is TBoard then
1798                 Board := TBoard(TmpTreeNode.Data)
1799         else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then
1800                 Board := TFavoriteBoardItem(TmpTreeNode.Data).Item;
1801
1802         if Board <> nil then
1803                 GikoForm.DownloadList(Board);
1804 end;
1805 // *************************************************************************
1806 //! \91I\91ð\82³\82ê\82½\83X\83\8c\83b\83h\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
1807 // *************************************************************************
1808 procedure TGikoDM.TreeSelectThreadReloadExecute(Sender: TObject);
1809 var
1810         ThreadItem: TThreadItem;
1811         TmpTreeNode: TTreeNode;
1812 begin
1813         TmpTreeNode := GikoForm.ClickNode;
1814         GikoForm.TreeView.Selected := GikoForm.ClickNode;
1815         ThreadItem := nil;
1816
1817         if TObject(TmpTreeNode.Data) is TThreadItem then
1818                 ThreadItem := TThreadItem(TmpTreeNode.Data)
1819         else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then
1820                 ThreadItem := TFavoriteThreadItem(TmpTreeNode.Data).Item;
1821
1822         if ThreadItem <> nil then
1823                 GikoForm.DownloadContent(ThreadItem);
1824 end;
1825 // *************************************************************************
1826 //! \91I\91ð\82³\82ê\82½\94Â\82ÌURL\82ð\83R\83s\81[\82·\82é
1827 // *************************************************************************
1828 procedure TGikoDM.TreeSelectURLCopyExecute(Sender: TObject);
1829 var
1830         TmpTreeNode: TTreeNode;
1831         s: string;
1832 begin
1833         TmpTreeNode := GikoForm.ClickNode;
1834         GikoForm.TreeView.Selected := GikoForm.ClickNode;
1835         if TObject(TmpTreeNode.Data) is TBoard then begin
1836                 s := TBoard(TmpTreeNode.Data).URL + #13#10;
1837         end else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then begin
1838                 s := TFavoriteBoardItem(TmpTreeNode.Data).URL + #13#10;
1839         end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
1840                 s := TThreadItem(TmpTreeNode.Data).URL + #13#10;
1841         end else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then begin
1842                 s := TFavoriteThreadItem(TmpTreeNode.Data).URL + #13#10;
1843         end;
1844         Clipboard.AsText := s;
1845 end;
1846 // *************************************************************************
1847 //! \91I\91ð\82³\82ê\82½\94Â\82Ì\96¼\91O\82ÆURL\82ð\83R\83s\81[\82·\82é
1848 // *************************************************************************
1849 procedure TGikoDM.TreeSelectNameURLCopyExecute(Sender: TObject);
1850 var
1851         TmpTreeNode: TTreeNode;
1852         s: string;
1853 begin
1854         TmpTreeNode := GikoForm.ClickNode;
1855         GikoForm.TreeView.Selected := GikoForm.ClickNode;
1856         if TObject(TmpTreeNode.Data) is TBoard then begin
1857                 s := TBoard(TmpTreeNode.Data).Title + #13#10 + TBoard(TmpTreeNode.Data).URL + #13#10;
1858         end else if TObject(TmpTreeNode.Data) is TFavoriteBoardItem then begin
1859                 s := TFavoriteBoardItem(TmpTreeNode.Data).Item.Title + #13#10 + TFavoriteBoardItem(TmpTreeNode.Data).URL + #13#10;
1860         end else if (TObject(TmpTreeNode.Data) is TThreadItem) then begin
1861                 s := TThreadItem(TmpTreeNode.Data).Title + #13#10 + TThreadItem(TmpTreeNode.Data).URL + #13#10;
1862         end else if TObject(TmpTreeNode.Data) is TFavoriteThreadItem then begin
1863                 s := TFavoriteThreadItem(TmpTreeNode.Data).Item.Title + #13#10 + TFavoriteThreadItem(TmpTreeNode.Data).URL + #13#10;
1864         end;
1865         Clipboard.AsText := s;
1866 end;
1867 // *************************************************************************
1868 //! \82¨\8bC\82É\93ü\82è\82É\92Ç\89Á\82·\82é
1869 // *************************************************************************
1870 procedure TGikoDM.TreeSelectFavoriteAddActionExecute(Sender: TObject);
1871 begin
1872         GikoForm.ShowFavoriteAddDialog(TObject(GikoForm.ClickNode.Data));
1873 end;
1874 // *************************************************************************
1875 //! \94Â\96¼\8c\9f\8dõ
1876 // *************************************************************************
1877 procedure TGikoDM.TreeSelectSearchBoardNameExecute(Sender: TObject);
1878 var
1879         s : String;
1880         msg : String;
1881         CurItem : TTreeNode;
1882         next : boolean;
1883 begin
1884         if InputQuery('\94Â\96¼\8c\9f\8dõ','\94Â\96¼\82Ì\93ü\97Í',s) then begin
1885                 next := true;
1886                 while next do begin
1887                         if GikoForm.TreeView.Selected = nil then
1888                                 CurItem := GikoForm.TreeView.Items.GetFirstNode
1889                         else begin
1890                                 CurItem := GikoForm.TreeView.Selected.GetNext;
1891                                 if CurItem = nil then
1892                                         CurItem := GikoForm.TreeView.Items.GetFirstNode;
1893                         end;
1894                         while CurItem <> nil do begin
1895                                 if (CurItem.ImageIndex <> 2) and (VaguePos(s,CurItem.Text) <> 0) then begin
1896                                         break;
1897                                 end;
1898                                 CurItem := CurItem.GetNext;
1899                         end;
1900                         try
1901                                 if CurItem = nil then begin
1902                                         msg := '\90æ\93ª\82É\96ß\82è\82Ü\82·\82©\81H';
1903                                         if MsgBox(GikoForm.Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes     then begin
1904                                                 CurItem := GikoForm.TreeView.Items.GetFirstNode;
1905                                         end else begin
1906                                                 Exit;
1907                                         end;
1908                                         GikoForm.TreeView.Select(CurItem);
1909                                         GikoForm.TreeView.SetFocus;
1910                                 end else begin
1911                                         GikoForm.TreeView.Select(CurItem);
1912                                         GikoForm.TreeView.SetFocus;
1913                                         msg := '\8e\9f\82É\8ds\82«\82Ü\82·\82©\81H';
1914                                         if MsgBox(GikoForm.Handle, msg, '', MB_YESNO or MB_ICONEXCLAMATION) = mrYes     then begin
1915                                                 next := true;
1916                                         end else begin
1917                                                 next := false;
1918                                         end;
1919                                 end;
1920
1921                         except
1922                                 Exit;
1923                         end;
1924                 end;
1925         end;
1926 end;
1927 // *************************************************************************
1928 //! \91I\91ð\82³\82ê\82½\94Â\82Ì\96¼\91O\82ð\83R\83s\81[\82·\82é
1929 // *************************************************************************
1930 procedure TGikoDM.TreeSelectNameCopyExecute(Sender: TObject);
1931 var
1932         s: string;
1933 begin
1934         GikoForm.TreeView.Selected := GikoForm.ClickNode;
1935         s := GikoForm.ClickNode.Text;
1936         Clipboard.AsText := s;
1937 end;
1938 ////////////////////////////////\83c\83\8a\81[\83|\83b\83v\83A\83b\83v\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
1939 // *************************************************************************
1940 //! \83\8d\83O\83C\83\93\81^\83\8d\83O\83A\83E\83g\82ð\82·\82é
1941 // *************************************************************************
1942 procedure TGikoDM.LoginActionExecute(Sender: TObject);
1943 var
1944         TmpCursor: TCursor;
1945         msg : String;
1946 begin
1947         if GikoSys.Dolib.Connected then begin
1948                 //\83\8d\83O\83A\83E\83g
1949                 GikoSys.Dolib.Disconnect;
1950                 LoginAction.Checked := False;
1951                 GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmLogout), nil, gmiOK);
1952                 LoginAction.Caption := '\83\8d\83O\83C\83\93(&L)';
1953         end else begin
1954                 TmpCursor := GikoForm.ScreenCursor;
1955                 GikoForm.ScreenCursor := crHourGlass;
1956                 try
1957                         //\92Ê\8fí\83\8d\83O\83C\83\93
1958                         if not GikoSys.Setting.ForcedLogin then begin
1959                                 GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
1960                                 GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
1961                                 GikoSys.Dolib.Password := GikoSys.Setting.Password;
1962                                 if GikoSys.Setting.ReadProxy then begin
1963                                         GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
1964                                         GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
1965                                 end else begin
1966                                         GikoSys.Dolib.ProxyAddress := '';
1967                                         GikoSys.Dolib.ProxyPort := 0;
1968                                 end;
1969                                 if GikoSys.Dolib.Connect then begin
1970                                         LoginAction.Checked := True;
1971                                         GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmLogin) + GikoSys.Setting.UserID, nil, gmiOK);
1972                                         LoginAction.Caption := '\83\8d\83O\83A\83E\83g(&L)';
1973                                         //LoginToolButton.Style := tbsCheck;
1974                                 end else begin
1975                 //                      MsgBox(Handle, '\83\8d\83O\83C\83\93\8fo\97\88\82Ü\82¹\82ñ\82Å\82µ\82½', '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
1976                                         GikoForm.AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
1977                                         GikoForm.PlaySound('Error');
1978                                         LoginAction.Checked := False;
1979                                         //LoginToolButton.Down := False;
1980                                         ///LoginToolButton.Style := tbsButton;
1981                                 end;
1982                         end else begin
1983                                 msg := '\8b­\90§\83\8d\83O\83C\83\93\83\82\81[\83h\82Å\82Í\81C\83T\81[\83o\82Ì\8fØ\96¾\8f\91\82Ì\97L\8cø\90«\82ð\83`\83F\83b\83N\82µ\82Ü\82¹\82ñ\81B' + #13#10
1984                                                 + '\8bU\91\95\83T\81[\83o\82Ì\8fê\8d\87\81A\82 \82È\82½\82Ì\83p\83X\83\8f\81[\83h\93\90\82Ü\82ê\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\81B' + #13#10
1985                                                 + '\82±\82Ì\83\82\81[\83h\82Å\83\8d\83O\83C\83\93\82ð\8e\8e\82Ý\82Ü\82·\82©\81H' + #13#10;
1986                                 if MsgBox(GikoForm.Handle, msg, '\8cx\8d\90', MB_YESNO or MB_ICONEXCLAMATION) = IDYES  then begin
1987                                         GikoSys.Dolib.ClientUA := 'gikoNavi/1.00';
1988                                         GikoSys.Dolib.UserName := GikoSys.Setting.UserID;
1989                                         GikoSys.Dolib.Password := GikoSys.Setting.Password;
1990                                         if GikoSys.Setting.ReadProxy then begin
1991                                                 GikoSys.Dolib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
1992                                                 GikoSys.Dolib.ProxyPort := GikoSys.Setting.ReadProxyPort;
1993                                         end else begin
1994                                                 GikoSys.Dolib.ProxyAddress := '';
1995                                                 GikoSys.Dolib.ProxyPort := 0;
1996                                         end;
1997                                         //SSL\8fá\8aQ\97p\8b­\90§\83\8d\83O\83C\83\93
1998                                         GikoSys.Dolib.ForcedConnect;
1999                                         if GikoSys.Dolib.Connect then begin
2000                                                 LoginAction.Checked := True;
2001                                                 GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmForceLogin) + GikoSys.Setting.UserID, nil, gmiOK);
2002                                                 LoginAction.Caption := '\83\8d\83O\83A\83E\83g(&L)';
2003                                                 //LoginToolButton.Style := tbsCheck;
2004                                                 end else begin
2005                         //                      MsgBox(Handle, '\83\8d\83O\83C\83\93\8fo\97\88\82Ü\82¹\82ñ\82Å\82µ\82½', '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
2006                                                 GikoForm.AddMessageList(GikoSys.Dolib.ErrorMsg, nil, gmiNG);
2007                                                 GikoForm.PlaySound('Error');
2008                                                 LoginAction.Checked := False;
2009                                                 //LoginToolButton.Down := False;
2010                                                 //LoginToolButton.Style := tbsButton;
2011                                         end;
2012                                 end else begin
2013                                         LoginAction.Checked := False;
2014                                         //LoginToolButton.Down := False;
2015                                         //LoginToolButton.Style := tbsButton;
2016                                 end;
2017                         end;
2018                 finally
2019                         GikoForm.ScreenCursor := TmpCursor;
2020                 end;
2021         end;
2022 end;
2023 // *************************************************************************
2024 //! \83{\81[\83h\8dX\90V\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
2025 // *************************************************************************
2026 procedure TGikoDM.NewBoardActionExecute(Sender: TObject);
2027 var
2028         Dlg: TNewBoardDialog;
2029         Msg: string;
2030 begin
2031         if (EditorFormExists) then begin
2032                 Msg := '\83\8c\83X\83G\83f\83B\83^\82ð\91S\82Ä\95Â\82\82Ä\82­\82¾\82³\82¢';
2033                 MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
2034                 Exit;
2035         end;
2036         Dlg := TNewBoardDialog.Create(GikoForm);
2037         try
2038                 Dlg.ShowModal;
2039         finally
2040                 Dlg.Release;
2041         end;
2042 end;
2043 // *************************************************************************
2044 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\8dí\8f\9c\82·\82é
2045 // *************************************************************************
2046 procedure TGikoDM.LogDeleteActionExecute(Sender: TObject);
2047 const
2048         DEL_MSG = '\81g^0\81h\82Ì\83\8d\83O\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
2049         DEL_SAME_MSG = '\82±\82ê\82ç ^0 \8cÂ\82Ì\83X\83\8c\83b\83h\82Ì\83\8d\83O\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
2050         DEL_TITLE = '\8dí\8f\9c\8am\94F';
2051 var
2052         ThreadItem: TThreadItem;
2053         TmpListItem: TListItem;
2054         List: TList;
2055         i: Integer;
2056 begin
2057         List := TList.Create;
2058         try
2059                 TmpListItem := GikoForm.ListView.Selected;
2060                 while TmpListItem <> nil do begin
2061                         if TObject(TmpListItem.Data) is TThreadItem then begin
2062                                 ThreadItem := TThreadItem(TmpListItem.Data);
2063                                 if ThreadItem.IsLogFile then
2064                                         List.Add(ThreadItem);
2065                         end;
2066                         TmpListItem := GikoForm.ListView.GetNextItem(TmpListItem, sdAll, [isSelected]);
2067                 end;
2068
2069                 if GikoSys.Setting.DeleteMsg and (List.Count > 0) then begin
2070                         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then begin
2071                                 if List.Count = 1 then begin
2072                                         if MsgBox(GikoForm.Handle, StringReplace( DEL_MSG, '^0', TThreadItem( List[ 0 ] ).Title, [rfReplaceAll] ) , DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2073                                                 Exit;
2074                                 end else begin
2075                                         if MsgBox(GikoForm.Handle, StringReplace( DEL_SAME_MSG, '^0', IntToStr( List.Count ), [rfReplaceAll] ), DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> IDYES then
2076                                                 Exit;
2077                                 end;
2078                         end;
2079                 end;
2080
2081                 for i := 0 to List.Count - 1 do begin
2082                         ThreadItem := TThreadItem(List[i]);
2083                         GikoForm.DeleteHistory(ThreadItem);
2084                         GikoForm.DeleteTab(ThreadItem);
2085                         ThreadItem.DeleteLogFile;
2086                 end;
2087         GikoForm.TreeView.Refresh;      // UnRead \82Ì\95\\8e¦\82ð\8dX\90V
2088                 GikoForm.ListView.Refresh;
2089         finally
2090                 List.Free;
2091         end;
2092 end;
2093 // *************************************************************************
2094 //! ActiveList\82ªTBoard\82Å\83X\83\8c\88ê\97\97\82Å\82P\82Â\88È\8fã\91I\91ð\82µ\82Ä\82¢\82é\82Æ\97L\8cø\82É\82È\82éAction\82Å\8b¤\92Ê
2095 // *************************************************************************
2096 procedure TGikoDM.LogDeleteActionUpdate(Sender: TObject);
2097 begin
2098         TAction(Sender).Enabled := (GikoForm.GetActiveList is TBoard)
2099                                                                 and (GikoForm.ListView.SelCount > 0);
2100 end;
2101 // *************************************************************************
2102 //! \8di\8d\9e\82Ý\97\9a\97ð\82ð\8fÁ\8b\8e\82·\82é
2103 // *************************************************************************
2104 procedure TGikoDM.SelectTextClearActionExecute(Sender: TObject);
2105 const
2106         DEL_MSG = '\8di\8d\9e\82Ý\91S\97\9a\97ð\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
2107         DEL_TITLE = '\8dí\8f\9c\8am\94F';
2108 begin
2109         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
2110                 if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2111                         Exit;
2112         GikoSys.Setting.SelectTextList.Clear;
2113         GikoForm.SelectComboBox.Items.Clear;
2114         GikoForm.SelectComboBox.Text := '';
2115         GikoForm.SetListViewType( gvtAll );
2116 end;
2117 // *************************************************************************
2118 //! \83\8c\83X\83G\83f\83B\83^\82Ì\96¼\91O\97\9a\97ð\82ð\8fÁ\8b\8e\82·\82é
2119 // *************************************************************************
2120 procedure TGikoDM.NameTextClearActionExecute(Sender: TObject);
2121 const
2122         DEL_MSG = '\83\8c\83X\83G\83f\83B\83^\96¼\91O\91S\97\9a\97ð\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
2123         DEL_TITLE = '\8dí\8f\9c\8am\94F';
2124 begin
2125         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
2126                 if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2127                         Exit;
2128         GikoSys.Setting.NameList.Clear;
2129         ClearNameTextAllEditor
2130 end;
2131 // *************************************************************************
2132 //! \83\8c\83X\83G\83f\83B\83^\82Ì\83\81\81[\83\8b\97\9a\97ð\82ð\8fÁ\8b\8e\82·\82é
2133 // *************************************************************************
2134 procedure TGikoDM.MailTextClearActionExecute(Sender: TObject);
2135 const
2136         DEL_MSG = '\83\8c\83X\83G\83f\83B\83^\83\81\81[\83\8b\91S\97\9a\97ð\82ð\8dí\8f\9c\82µ\82Ü\82·\81B\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
2137         DEL_TITLE = '\8dí\8f\9c\8am\94F';
2138 begin
2139         if (GetKeyState( VK_SHIFT ) and $80000000) = 0 then
2140                 if MsgBox(GikoForm.Handle, DEL_MSG, DEL_TITLE, MB_YESNO or MB_ICONWARNING or MB_DEFBUTTON2) <> ID_YES then
2141                         Exit;
2142         GikoSys.Setting.MailList.Clear;
2143         ClearMailAllEditor;
2144 end;
2145 // *************************************************************************
2146 //! \83M\83R\83i\83r\82ð\8fI\97¹\82·\82é
2147 // *************************************************************************
2148 procedure TGikoDM.ExitActionExecute(Sender: TObject);
2149 begin
2150         GikoForm.Close;
2151 end;
2152 // *************************************************************************
2153 //! \82¨\8bC\82É\93ü\82è\82Ì\83G\83N\83X\83|\81[\83g\81@\8eÀ\8ds\91O\8f\88\97\9d
2154 // *************************************************************************
2155 procedure TGikoDM.ExportFavoriteFileBeforeExecute(Sender: TObject);
2156 begin
2157         ExportFavoriteFile.Dialog.FileName := FavoriteDM.GetFavoriteFilePath;
2158 end;
2159 // *************************************************************************
2160 //! \82¨\8bC\82É\93ü\82è\82Ì\83G\83N\83X\83|\81[\83g\81@\8eÀ\8ds\8f\88\97\9d
2161 // *************************************************************************
2162 procedure TGikoDM.ExportFavoriteFileAccept(Sender: TObject);
2163 begin
2164         if FavoriteDM.SaveFavoriteFile( ExportFavoriteFile.Dialog.FileName ) Then begin
2165                 ShowMessage('\83t\83@\83C\83\8b\82ð\8fo\97Í\82µ\82Ü\82µ\82½');
2166         end else begin
2167                 ShowMessage('\83t\83@\83C\83\8b\82Ì\8fo\97Í\82É\8e¸\94s\82µ\82Ü\82µ\82½');
2168         end;
2169 end;
2170 // *************************************************************************
2171 //! \91I\91ð\83X\83\8c\83b\83h\82ð\83t\83@\83C\83\8b\82É\95Û\91\82·\82é
2172 // *************************************************************************
2173 procedure TGikoDM.SelectThreadSaveToFile(dat: Boolean);
2174 var
2175         List: TList;
2176         i: Integer;
2177         html: TStringList;
2178         title: string;
2179 begin
2180         List := TList.Create;
2181         try
2182                 GikoForm.ScreenCursor := crHourGlass;
2183                 GikoForm.SelectListItem(List);
2184                 if ((GikoSys.Setting.ListOrientation = gloVertical) and
2185                         (GikoSys.Setting.ListHeightState = glsMax)) or
2186                         ((GikoSys.Setting.ListOrientation = gloHorizontal) and
2187                         (GikoSys.Setting.ListWidthState = glsMax))      then
2188                         ShowMessage('\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦\82µ\82Ä\82­\82¾\82³\82¢')
2189                 else if(List.Count = 0) then
2190                         ShowMessage('\83X\83\8c\83b\83h\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢')
2191                 else begin
2192                         if dat then begin
2193                                 SaveDialog.Title := '\91I\91ð\83X\83\8c\83b\83h\82ðdat\82Ì\82Ü\82Ü\95Û\91¶';
2194                                 SaveDialog.Filter := 'DAT\83t\83@\83C\83\8b(*.dat)|*.dat';
2195                         end else begin
2196                                 SaveDialog.Title := '\91I\91ð\83X\83\8c\83b\83h\82ðHTML\89»\82µ\82Ä\95Û\91¶';
2197                                 SaveDialog.Filter := 'HTML\83t\83@\83C\83\8b(*.html)|*.html';
2198                         end;
2199                         for i := 0 to List.Count - 1 do begin
2200                                 if (TObject(List[i]) is TThreadItem) and (TThreadItem(List[i]).IsLogFile) then begin
2201                                         if dat then begin
2202                                                 SaveDialog.FileName := TThreadItem(List[i]).FileName;
2203                                         end else begin
2204                                                 SaveDialog.FileName := ReplaseNoValidateChar(TThreadItem(List[i]).Title) + '.html';
2205                                         end;
2206                                         if SaveDialog.Execute then begin
2207                                                 if dat then begin
2208                                                         CopyFile(PChar(TThreadItem(List[i]).FilePath),
2209                                                                         PChar(SaveDialog.FileName), true);
2210                                                 end else begin
2211                                                         html := TStringList.Create;
2212                                                         title := TThreadItem(List[i]).Title;
2213                                                         try
2214                                                                 HTMLCreater.CreateHTML3(html, TThreadItem(List[i]), title);
2215                                                                 html.SaveToFile(SaveDialog.FileName);
2216                                                                 THTMLCreate.SkinorCSSFilesCopy(ExtractFilePath(SaveDialog.FileName));
2217                                                         finally
2218                                                                 html.Free;
2219                                                         end;
2220                                                 end;
2221                                         end;
2222                                 end;
2223                         end;
2224                 end;
2225         finally
2226                 GikoForm.ScreenCursor := crDefault;
2227                 List.Free;
2228         end;
2229 end;
2230 // *************************************************************************
2231 //! \91I\91ð\83X\83\8c\83b\83h\82ðHTML\89»\82µ\82Ä\95Û\91
2232 // *************************************************************************
2233 procedure TGikoDM.SelectItemSaveForHTMLExecute(Sender: TObject);
2234 begin
2235         SelectThreadSaveToFile(false);
2236 end;
2237 // *************************************************************************
2238 //! \91I\91ð\83X\83\8c\83b\83h\82ðDAT\8c`\8e®\82Ì\82Ü\82Ü\95Û\91
2239 // *************************************************************************
2240 procedure TGikoDM.SelectItemSaveForDatExecute(Sender: TObject);
2241 begin
2242         SelectThreadSaveToFile(true);
2243 end;
2244 // *************************************************************************
2245 //! \83^\83u\82Ì\8f\87\94Ô\82ð\95Û\91
2246 // *************************************************************************
2247 procedure TGikoDM.TabsSaveActionExecute(Sender: TObject);
2248 const
2249         Filename = 'tab.sav';
2250         bFilename = '~tab.sav';
2251 var
2252         SaveStringList: TStringList;
2253 begin
2254         SaveStringList := TStringList.Create;
2255         try
2256                 GetTabURLs(SaveStringList);
2257         try
2258             if FileExists( GikoSys.GetAppDir + Filename) then begin
2259                 CopyFile(PChar(GikoSys.GetAppDir + Filename),
2260                     PChar(GikoSys.GetAppDir + bFilename), False);
2261             end;
2262         except
2263         end;
2264         SaveStringList.SaveToFile(GikoSys.GetAppDir + Filename);
2265         finally
2266                 SaveStringList.Free;
2267         end;
2268 end;
2269 // *************************************************************************
2270 //! \83u\83\89\83E\83U\83^\83u\82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ÌURL\8eæ\93¾
2271 // *************************************************************************
2272 procedure TGikoDM.GetTabURLs(AStringList: TStringList);
2273 var
2274   rec : TBrowserRecord;
2275   i : Integer;
2276 begin
2277     for i := 0 to GikoForm.BrowserTab.Tabs.Count -1 do begin
2278         try
2279             rec := TBrowserRecord( GikoForm.BrowserTab.Tabs.Objects[ i ] );
2280             if( rec <> nil) and (rec.Thread <> nil) then
2281                 AStringList.Add( rec.Thread.URL );
2282         except
2283         end;
2284     end;
2285 end;
2286 // *************************************************************************
2287 //! \8ew\92è\82³\82ê\82½URL\82ð\8aJ\82«\81C\90æ\93ª\82Ì\83^\83u\82É\83t\83H\81[\83J\83X\82·\82é
2288 // *************************************************************************
2289 procedure TGikoDM.OpenURLs(AStringList: TStringList);
2290 var
2291     GikoTab                     : TGikoTabAppend;
2292     i, bound : Integer;
2293         item        : TThreadItem;
2294 begin
2295     if (AStringList <> nil) then begin
2296         GikoTab := GikoSys.Setting.BrowserTabAppend;
2297         try
2298             bound    := AStringList.Count - 1;
2299             if bound > -1 then begin
2300                 GikoSys.Setting.BrowserTabAppend := gtaLast;
2301                 for i := 0 to bound do begin
2302                     item := BBSsFindThreadFromURL( AStringList[ i ] );
2303                     if item <> nil then
2304                         GikoForm.InsertBrowserTab( item, false );
2305                 end;
2306                 //\8dÅ\8f\89\82Ì\82P\96\87\82É\90Ý\92è
2307                 if (GikoSys.Setting.URLDisplay) and
2308                     (GikoForm.BrowserTab.Tabs.Count > 0) then begin
2309                                         GikoForm.AddressComboBox.Text :=
2310                         TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[0]).Thread.URL;
2311                 end;
2312             end;
2313         finally
2314             GikoSys.Setting.BrowserTabAppend := GikoTab;
2315         end;
2316     end;
2317 end;
2318 // *************************************************************************
2319 //! \83^\83u\82Ì\8f\87\94Ô\82ð\95\9c\8c³
2320 // *************************************************************************
2321 procedure TGikoDM.TabsOpenActionExecute(Sender: TObject);
2322 const
2323         TABFILE = 'tab.sav';
2324 var
2325         URLs                            : TStringList;
2326         fileName                : string;
2327 begin
2328     URLs := TStringList.Create();
2329         try
2330         fileName := GikoSys.GetAppDir + TABFILE;
2331                 if FileExists(fileName) then begin
2332                     try
2333                                 URLs.LoadFromFile(fileName);
2334                 if (URLs.Count = 0) then begin
2335                     // \8bó\82Ì\83t\83@\83C\83\8b\82Ì\8fê\8d\87\81C\83o\83b\83N\83A\83b\83v\82ð\8dí\8f\9c\82µ\82È\82¢\82½\82ß\82É\8dí\8f\9c
2336                     SysUtils.DeleteFile(fileName);
2337                 end else begin
2338                     OpenURLs(URLs);
2339                 end;
2340                 except
2341                         on EFOpenError do ShowMessage('\83^\83u\83t\83@\83C\83\8b\82ª\8aJ\82¯\82Ü\82¹\82ñ');
2342             end;
2343         end;
2344         finally
2345         URLs.Free;
2346         end;
2347
2348     if (GikoForm.BrowserTab.Tabs.Count = 0) and
2349         (TabsOpenAction.Tag <> 1) then  begin
2350         ShowMessage('\95\\8e¦\82·\82é\83^\83u\82ª\82 \82è\82Ü\82¹\82ñ\81B');
2351     end;
2352 end;
2353 // *************************************************************************
2354 //! Be2ch\82É\83\8d\83O\83C\83\93/\83\8d\83O\83A\83E\83g\82·\82é
2355 // *************************************************************************
2356 procedure TGikoDM.BeLogInOutActionExecute(Sender: TObject);
2357 var
2358         TmpCursor: TCursor;
2359         msg : String;
2360 begin
2361         if GikoSys.Belib.Connected then begin
2362                 //\83\8d\83O\83A\83E\83g
2363                 GikoSys.Belib.Disconnect;
2364                 BeLogInOutAction.Checked := False;
2365                 GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmBeLogout), nil, gmiOK);
2366         end else begin
2367                 TmpCursor := GikoForm.ScreenCursor;
2368                 GikoForm.ScreenCursor := crHourGlass;
2369                 try
2370                         GikoSys.Belib.ClientUA := 'gikoNavi/1.00';
2371                         GikoSys.Belib.UserName := GikoSys.Setting.BeUserID;
2372                         GikoSys.Belib.Password := GikoSys.Setting.BePassword;
2373             if GikoSys.Setting.ReadProxy then begin
2374                                 GikoSys.Belib.ProxyAddress := GikoSys.Setting.ReadProxyAddress;
2375                                 GikoSys.Belib.ProxyPort := GikoSys.Setting.ReadProxyPort;
2376                         end else begin
2377                 GikoSys.Belib.ProxyAddress := '';
2378                                 GikoSys.Belib.ProxyPort := 0;
2379             end;
2380             if GikoSys.Belib.Connect then begin
2381                 GikoForm.AddMessageList(GikoSys.GetGikoMessage(gmBeLogin) + GikoSys.Setting.BeUserID, nil, gmiOK);
2382                 BeLogInOutAction.Checked := True;
2383             end else begin
2384                 GikoForm.AddMessageList(GikoSys.Belib.ErrorMsg, nil, gmiNG);
2385                 GikoForm.PlaySound('Error');
2386                 BeLogInOutAction.Checked := False;
2387                         end;
2388                 finally
2389                         GikoForm.ScreenCursor := TmpCursor;
2390                 end;
2391         end;
2392 end;
2393 ////////////////////////////////\83t\83@\83C\83\8b\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
2394 // *************************************************************************
2395 //! \83R\83R\82Ü\82Å\93Ç\82ñ\82¾
2396 // *************************************************************************
2397 procedure TGikoDM.KokomadeActionExecute(Sender: TObject);
2398 var
2399         No: Integer;
2400         ThreadItem: TThreadItem;
2401 begin
2402         No := GikoForm.KokoPopupMenu.Tag;
2403         if No = 0
2404         then Exit;
2405         ThreadItem := GikoForm.KokoPopupThreadItem;
2406         if not Assigned(ThreadItem) then
2407         Exit;
2408         ThreadItem.Kokomade := No;
2409         GikoForm.ActiveContent.Thread.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2410         GikoForm.ActiveContent.Repaint := true;
2411         GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);
2412         //INFO 2005/11/19 \88ê\92U\89B\95Á\81A\95K\97v\82È\82çGikoForm\82Ì\95û\82É\83\81\83\\83b\83h\82ð\92Ç\89Á\82·\82é
2413         //Application.ProcessMessages;
2414 end;
2415 // *************************************************************************
2416 //! \91S\95\94\93Ç\82ñ\82¾
2417 // *************************************************************************
2418 procedure TGikoDM.ZenbuActionExecute(Sender: TObject);
2419 var
2420         ThreadItem: TThreadItem;
2421 begin
2422         ThreadItem := GikoForm.GetActiveContent(True);
2423         if ThreadItem = nil then Exit;
2424         ThreadItem.Kokomade := -1;
2425         GikoForm.ActiveContent.Thread.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2426         GikoForm.ActiveContent.Repaint := true;
2427         GikoForm.InsertBrowserTab(GikoForm.ActiveContent.Thread, true);
2428         //INFO 2005/11/19 \88ê\92U\89B\95Á\81A\95K\97v\82È\82çGikoForm\82Ì\95û\82É\83\81\83\\83b\83h\82ð\92Ç\89Á\82·\82é
2429         //Application.ProcessMessages;
2430 end;
2431 // *************************************************************************
2432 //! \83R\83R\82É\83\8c\83X
2433 // *************************************************************************
2434 procedure TGikoDM.KokoResActionExecute(Sender: TObject);
2435 var
2436         Editor: TEditorForm;
2437         Item: TThreadItem;
2438         Number: Integer;
2439 begin
2440         Number := GikoForm.KokoPopupMenu.Tag;
2441         if Number = 0 then Exit;
2442         Item := GikoForm.KokoPopupThreadItem;
2443         if Item = nil then Exit;
2444
2445         Editor := TEditorForm.Create(GikoForm);
2446         Editor.SetThreadItem(Item);
2447     Editor.SetTextEdit('>>' + IntToStr(Number) + #13#10);
2448         Editor.Show;
2449     Editor.SetFocusEdit;
2450 end;
2451 // *************************************************************************
2452 //! \91I\91ð\82µ\82½\83\8c\83X\82ð\83R\83s\81[\82·\82é
2453 // *************************************************************************
2454 procedure TGikoDM.KoreCopyExecute(Sender: TObject);
2455 begin
2456         GikoForm.KonoresCopy(GikoForm.KokoPopupMenu.Tag, true);
2457 end;
2458 // *************************************************************************
2459 //! \91I\91ð\82µ\82½\83\8c\83X\82ð\83R\83s\81[\82·\82é
2460 // *************************************************************************
2461 procedure TGikoDM.SameIDResAnchorActionExecute(Sender: TObject);
2462 const
2463     LIMIT = 20;
2464 var
2465         ThreadItem : TThreadItem;
2466         No : Integer;
2467         AID: string;
2468 begin
2469         No := GikoForm.KokoPopupMenu.Tag;
2470         if No = 0 then Exit;
2471         ThreadItem := GikoForm.KokoPopupThreadItem;
2472         if ThreadItem = nil then Exit;
2473
2474     AID := GikoSys.GetResID(No, ThreadItem);
2475     if not IsNoValidID(AID) then begin
2476         GikoForm.ShowSameIDAncher(AID);
2477     end;
2478 end;
2479 // *************************************************************************
2480 //! \82±\82Ì\83\8c\83X\82 \82Ú\81`\82ñ\81@\81i\92Ê\8fí\81j
2481 // *************************************************************************
2482 procedure TGikoDM.IndividualAbon1ActionExecute(Sender: TObject);
2483 begin
2484         GikoForm.IndividualAbon(GikoForm.KokoPopupMenu.Tag, 1);
2485 end;
2486 // *************************************************************************
2487 //! \82±\82Ì\83\8c\83X\82 \82Ú\81`\82ñ\81@\81i\93§\96¾\81j
2488 // *************************************************************************
2489 procedure TGikoDM.IndividualAbon0ActionExecute(Sender: TObject);
2490 begin
2491         GikoForm.IndividualAbon(GikoForm.KokoPopupMenu.Tag, 0);
2492 end;
2493 // *************************************************************************
2494 //! \82±\82Ì\83\8c\83X\82 \82Ú\81`\82ñ\89ð\8f\9c
2495 // *************************************************************************
2496 procedure TGikoDM.AntiIndividualAbonActionExecute(Sender: TObject);
2497 var
2498         IndividualForm :TIndividualAbonForm;
2499         ThreadItem : TThreadItem;
2500         msg : String;
2501         ReadList                : TStringList;
2502         wordCount               : TWordCount;
2503 begin
2504         IndividualForm := TIndividualAbonForm.Create(GikoForm);
2505         try
2506                 ThreadItem := GikoForm.GetActiveContent(True);
2507                 ThreadItem.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2508                 if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
2509                         if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
2510                                 ReadList                := TStringList.Create;
2511                                 wordCount               := TWordCount.Create;
2512                                 try
2513 {$IFDEF SPAM_FILTER_ENABLED}
2514                                         // \83X\83p\83\80\82ð\89ð\8f\9c
2515                                         ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
2516                                         GikoSys.SpamCountWord( ReadList[ KokoPopupMenu.Tag - 1 ], wordCount );
2517                                         GikoSys.SpamForget( wordCount, True );  // \83X\83p\83\80\82ð\89ð\8f\9c
2518                                         GikoSys.SpamLearn( wordCount, False );  // \83n\83\80\82É\90Ý\92è
2519 {$ENDIF}
2520                                         if IndividualForm.DeleteNG(GikoForm.KokoPopupMenu.Tag) then begin
2521                                                 GikoForm.ActiveContent.Repaint := true;
2522                                                 GikoForm.InsertBrowserTab( ThreadItem, True );
2523                                         end;
2524                                 finally
2525                                         wordCount.Free;
2526                                         ReadList.Free;
2527                                 end;
2528                         end else begin
2529                                 msg := '\82±\82Ì\83X\83\8c\83b\83h\82Å\82Í\8cÂ\95Ê\82 \82Ú\81`\82ñ\82ð\8ds\82Á\82Ä\82Ü\82¹\82ñ';
2530                                 MsgBox(GikoForm.Handle, msg, '\83\81\83b\83Z\81[\83W', MB_OK);
2531                         end;
2532                 end;
2533         finally
2534                 IndividualForm.Release;
2535         end;
2536 end;
2537 // *************************************************************************
2538 //! \82±\82Ì\83\8c\83X\82 \82Ú\81`\82ñ\89ð\8f\9c\83\8c\83X\94Ô\8d\86\8ew\92è\81i\83_\83C\83A\83\8d\83O\95\\8e¦\81j
2539 // *************************************************************************
2540 procedure TGikoDM.AntiIndividualAbonDlgActionExecute(Sender: TObject);
2541 var
2542         IndividualForm :TIndividualAbonForm;
2543         ThreadItem : TThreadItem;
2544         msg : String;
2545         ReadList                : TStringList;
2546         wordCount               : TWordCount;
2547 {$IFDEF SPAM_FILTER_ENABLED}
2548         i : Integer;
2549 {$ENDIF}
2550 begin
2551         IndividualForm := TIndividualAbonForm.Create(GikoForm);
2552         try
2553                 ThreadItem := GikoForm.GetActiveContent(True);
2554                 ThreadItem.ScrollTop := GikoForm.ActiveContent.Browser.OleObject.Document.Body.ScrollTop;
2555                 if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
2556                         if IndividualForm.SetThreadLogFileName(ThreadItem.GetThreadFileName) then begin
2557                                 if (IndividualForm.ShowModal = mrOK) then begin
2558                                         ReadList                := TStringList.Create;
2559                                         wordCount               := TWordCount.Create;
2560                                         try
2561 {$IFDEF SPAM_FILTER_ENABLED}
2562                                                 // \83X\83p\83\80\82ð\89ð\8f\9c
2563                                                 ReadList.LoadFromFile( ThreadItem.GetThreadFileName );
2564                                                 for i := 0 to IndividualForm.DeleteList.Count - 1 do begin
2565                                                         GikoSys.SpamCountWord( ReadList[ StrToInt(IndividualForm.DeleteList[i]) - 1 ], wordCount );
2566                                                         GikoSys.SpamForget( wordCount, True );  // \83X\83p\83\80\82ð\89ð\8f\9c
2567                                                         GikoSys.SpamLearn( wordCount, False );  // \83n\83\80\82É\90Ý\92è
2568                                                 end;
2569 {$ENDIF}
2570                                                 if IndividualForm.FRepaint then begin
2571                                                         GikoForm.ActiveContent.Repaint := true;
2572                                                         GikoForm.InsertBrowserTab( ThreadItem, True );
2573                                                 end;
2574                                         finally
2575                                                 wordCount.Free;
2576                                                 ReadList.Free;
2577                                         end;
2578                                 end;
2579                         end else begin
2580                                 msg := '\82±\82Ì\83X\83\8c\83b\83h\82Å\82Í\8cÂ\95Ê\82 \82Ú\81`\82ñ\82ð\8ds\82Á\82Ä\82Ü\82¹\82ñ';
2581                                 MsgBox(GikoForm.Handle, msg, '\83\81\83b\83Z\81[\83W', MB_OK);
2582                         end;
2583                 end;
2584         finally
2585                 IndividualForm.Release;
2586         end;
2587 end;
2588 // *************************************************************************
2589 //! \82±\82ÌID\82 \82Ú\81`\82ñ\81@\92Ê\8fí
2590 // *************************************************************************
2591 procedure TGikoDM.IndividualAbonID1ActionExecute(Sender: TObject);
2592 begin
2593         GikoForm.IndividualAbonID(1);
2594 end;
2595 // *************************************************************************
2596 //! \82±\82ÌID\82 \82Ú\81`\82ñ\81@\93§\96¾
2597 // *************************************************************************
2598 procedure TGikoDM.IndividualAbonID0ActionExecute(Sender: TObject);
2599 begin
2600         GikoForm.IndividualAbonID(0);
2601 end;
2602 ////////////////////////////////\83u\83\89\83E\83U\83|\83b\83v\83A\83b\83v\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
2603 // *************************************************************************
2604 //! \83M\83R\83i\83r\82Ì\83E\83F\83u\83T\83C\83g\82ð\95\\8e¦\82·\82é
2605 // *************************************************************************
2606 procedure TGikoDM.GikoNaviWebPageActionExecute(Sender: TObject);
2607 begin
2608         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_GIKONAVI, gbtAuto);
2609 end;
2610 // *************************************************************************
2611 //! \83M\83R\83i\83r(\94ð\93ï\8f\8a\94Å)\82Ì\83E\83F\83u\83T\83C\83g\82ð\95\\8e¦\82·\82é
2612 // *************************************************************************
2613 procedure TGikoDM.GikoNaviGoesonWebPageActionExecute(Sender: TObject);
2614 begin
2615         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_GIKONAVIGO, gbtAuto);
2616 end;
2617 // *************************************************************************
2618 //! \83\82\83i\83W\83\89\82Ì\83E\83F\83u\83T\83C\83g\82ð\95\\8e¦\82·\82é
2619 // *************************************************************************
2620 procedure TGikoDM.MonazillaWebPageActionExecute(Sender: TObject);
2621 begin
2622         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_MONAZILLA, gbtAuto);
2623 end;
2624 // *************************************************************************
2625 //! \82Q\82¿\82á\82ñ\82Ë\82é\83g\83b\83v\83y\81[\83W\82ð\95\\8e¦\82·\82é
2626 // *************************************************************************
2627 procedure TGikoDM.BBS2chWebPageActionExecute(Sender: TObject);
2628 begin
2629         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_2ch, gbtAuto);
2630 end;
2631 // *************************************************************************
2632 //! \83M\83R\83i\83r\82Ì\83t\83H\83\8b\83_\82ð\8aJ\82­
2633 // *************************************************************************
2634 procedure TGikoDM.GikoFolderOpenActionExecute(Sender: TObject);
2635 begin
2636         GikoSys.CreateProcess('explorer.exe', '/e,"' + GikoSys.GetAppDir + '"');
2637 end;
2638 // *************************************************************************
2639 //! \83o\81[\83W\83\87\83\93\8fî\95ñ\82ð\95\\8e¦\82·\82é
2640 // *************************************************************************
2641 procedure TGikoDM.AboutActionExecute(Sender: TObject);
2642 var
2643         Dlg: TAboutDialog;
2644 begin
2645         Dlg := TAboutDialog.Create(GikoForm);
2646         try
2647                 Dlg.ShowModal;
2648         finally
2649                 Dlg.Release;
2650         end;
2651 end;
2652 // *************************************************************************
2653 //! \83M\83R\83i\83r\82Ì\83w\83\8b\83v\82ð\95\\8e¦\82·\82é
2654 // *************************************************************************
2655 procedure TGikoDM.GikoHelpActionExecute(Sender: TObject);
2656 var
2657         FileName: string;
2658 begin
2659         FileName := GikoSys.GetAppDir + 'batahlp.chm';
2660         if not FileExists(FileName) then begin
2661                 MsgBox(
2662                         GikoForm.Handle,
2663                         '\83w\83\8b\83v\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½' + #13#10 +
2664                         '\83w\83\8b\83v\83t\83@\83C\83\8b\82ð\83M\83R\83i\83r\82Ì\83t\83H\83\8b\83_\82É\92u\82¢\82Ä\82­\82¾\82³\82¢' + #13#10 +
2665                         '\83w\83\8b\83v\82Í\83M\83R\83i\83r\82Ì\83T\83C\83g\82É\92u\82¢\82Ä\82 \82è\82Ü\82·',
2666                         MSG_ERROR,
2667                         MB_ICONSTOP);
2668                 Exit;
2669         end;
2670         ShellExecute(GikoForm.Handle, 'open', PChar(FileName), '', PChar(GikoSys.GetAppDir), SW_SHOW);
2671 end;
2672 // *************************************************************************
2673 //! \83M\83R\83i\83rWiki\82Ì\83E\83F\83u\83T\83C\83g\82ð\95\\8e¦\82·\82é
2674 // *************************************************************************
2675 procedure TGikoDM.WikiFAQWebPageActionExecute(Sender: TObject);
2676 begin
2677         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_Wiki, gbtAuto);
2678 end;
2679 // *************************************************************************
2680 //! \83M\83R\83i\83r(\94ð\93ï\8f\8a\94Å)Wiki\82Ì\83E\83F\83u\83T\83C\83g\82ð\95\\8e¦\82·\82é
2681 // *************************************************************************
2682 procedure TGikoDM.GoWikiFAQWebPageActionExecute(Sender: TObject);
2683 begin
2684         GikoSys.OpenBrowser(PROTOCOL_HTTP + URL_GoWiki, gbtAuto);
2685 end;
2686 ////////////////////////////////\83w\83\8b\83v\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
2687 // *************************************************************************
2688 //! \83\8a\83X\83g\94Ô\8d\86\95\\8e¦\82ð\95Ï\8dX\82·\82é
2689 // *************************************************************************
2690 procedure TGikoDM.ListNumberVisibleActionExecute(Sender: TObject);
2691 begin
2692         GikoSys.Setting.ListViewNo := ListNumberVisibleAction.Checked;
2693         GikoForm.ListView.Refresh;
2694 end;
2695 // *************************************************************************
2696 //! \8fã\88Ê\83t\83H\83\8b\83_\82É\88Ú\93®\82·\82é
2697 // *************************************************************************
2698 procedure TGikoDM.UpFolderActionExecute(Sender: TObject);
2699 begin
2700         if GikoForm.GetActiveList is TBoard then begin
2701                 if TBoard(GikoForm.GetActiveList).ParentCategory <> nil then
2702                         GikoForm.SelectTreeNode(TBoard(GikoForm.GetActiveList).ParentCategory, True);
2703         end else if GikoForm.GetActiveList is TCategory then begin
2704                 GikoForm.SelectTreeNode(TCategory(GikoForm.GetActiveList).ParenTBBS, True);
2705         end;
2706 end;
2707 // *************************************************************************
2708 //! \8fã\88Ê\83t\83H\83\8b\83_\82É\88Ú\93®\82·\82éUpDate\83C\83x\83\93\83g
2709 // *************************************************************************
2710 procedure TGikoDM.UpFolderActionUpdate(Sender: TObject);
2711 begin
2712         UpFolderAction.Enabled := not (GikoForm.GetActiveList is TBBS) and
2713         (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
2714 end;
2715 // *************************************************************************
2716 //! \95\\8e¦\81@\95\\8e¦\83\8a\83X\83g\82Ì\83\82\81[\83h\95Ï\8dX
2717 // *************************************************************************
2718 procedure TGikoDM.IconStyleExecute(Sender: TObject);
2719 begin
2720         case GikoForm.ListView.ViewStyle of
2721                 vsIcon: SmallIconAction.Execute;
2722                 vsSmallIcon: ListIconAction.Execute;
2723                 vsList: DetailIconAction.Execute;
2724                 vsReport: LargeIconAction.Execute;
2725         end;
2726 end;
2727 // *************************************************************************
2728 //! SelectComboBox\82Ì\92l\82ð\83N\83\8a\83A\82·\82é
2729 // *************************************************************************
2730 procedure TGikoDM.ClearSelectComboBox;
2731 begin
2732         if GikoForm.SelectComboBoxPanel.Visible then begin
2733                 GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2734                 GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2735                 GikoForm.ListView.SetFocus;
2736         end;
2737 end;
2738 // *************************************************************************
2739 //! \83X\83\8c\83b\83h\82ð\82·\82×\82Ä\95\\8e¦\82·\82é
2740 // *************************************************************************
2741 procedure TGikoDM.AllItemActionExecute(Sender: TObject);
2742 begin
2743         try
2744                 if GikoForm.ViewType <> gvtAll then
2745                         GikoForm.SetListViewType(gvtAll);
2746                 GikoSys.Setting.ThreadRange := gtrAll;
2747                 AllItemAction.Checked           := True;
2748                 // SelectComboBox \82Ì\97\9a\97ð\82ð\8dX\90V\82µ\82Ä\82¨\82­
2749                 GikoForm.ModifySelectList;
2750                 // SelectComboBox \82Ì\92l\82ð\83N\83\8a\83A
2751                 ClearSelectComboBox;
2752         except
2753         end;
2754 end;
2755 // *************************************************************************
2756 //! \83\8d\83O\97L\82è\83X\83\8c\83b\83h\82Ì\82Ý\82ð\95\\8e¦\82·\82é
2757 // *************************************************************************
2758 procedure TGikoDM.LogItemActionExecute(Sender: TObject);
2759 begin
2760         try
2761                 if GikoForm.ViewType <> gvtLog then
2762                         GikoForm.SetListViewType(gvtLog);
2763                 GikoSys.Setting.ThreadRange     := gtrLog;
2764                 LogItemAction.Checked := True;
2765                 // SelectComboBox \82Ì\97\9a\97ð\82ð\8dX\90V\82µ\82Ä\82¨\82­
2766                 GikoForm.ModifySelectList;
2767                 // SelectComboBox \82Ì\92l\82ð\83N\83\8a\83A
2768                 ClearSelectComboBox;
2769         except
2770         end;
2771 end;
2772 // *************************************************************************
2773 //! \90V\92\85\83X\83\8c\83b\83h\82Ì\82Ý\95\\8e¦\82·\82é
2774 // *************************************************************************
2775 procedure TGikoDM.NewItemActionExecute(Sender: TObject);
2776 begin
2777         try
2778
2779                 if GikoForm.ViewType <> gvtNew then
2780                         GikoForm.SetListViewType(gvtNew);
2781                 GikoSys.Setting.ThreadRange     := gtrNew;
2782                 NewItemAction.Checked := True;
2783                 // SelectComboBox \82Ì\97\9a\97ð\82ð\8dX\90V\82µ\82Ä\82¨\82­
2784                 GikoForm.ModifySelectList;
2785                 // SelectComboBox \82Ì\92l\82ð\83N\83\8a\83A
2786                 ClearSelectComboBox;
2787         except
2788         end;
2789 end;
2790 // *************************************************************************
2791 //! DAT\97\8e\82¿\83X\83\8c\83b\83h\82Ì\82Ý\95\\8e¦\82·\82é
2792 // *************************************************************************
2793 procedure TGikoDM.ArchiveItemActionExecute(Sender: TObject);
2794 begin
2795         try
2796                 if GikoForm.ViewType <> gvtArch then
2797                         GikoForm.SetListViewType(gvtArch);
2798                 GikoSys.Setting.ThreadRange     := gtrArch;
2799                 ArchiveItemAction.Checked := True;
2800                 // SelectComboBox \82Ì\97\9a\97ð\82ð\8dX\90V\82µ\82Ä\82¨\82­
2801                 GikoForm.ModifySelectList;
2802                 // SelectComboBox \82Ì\92l\82ð\83N\83\8a\83A
2803                 ClearSelectComboBox;
2804         except
2805         end;
2806 end;
2807 // *************************************************************************
2808 //! \90\91\83X\83\8c\83b\83h\82Ì\82Ý\95\\8e¦\82·\82é
2809 // *************************************************************************
2810 procedure TGikoDM.LiveItemActionExecute(Sender: TObject);
2811 begin
2812         try
2813                 if GikoForm.ViewType <> gvtLive then
2814                         GikoForm.SetListViewType(gvtLive);
2815                 GikoSys.Setting.ThreadRange     := gtrLive;
2816                 LiveItemAction.Checked := True;
2817                 // SelectComboBox \82Ì\97\9a\97ð\82ð\8dX\90V\82µ\82Ä\82¨\82­
2818                 GikoForm.ModifySelectList;
2819                 // SelectComboBox \82Ì\92l\82ð\83N\83\8a\83A
2820                 ClearSelectComboBox;
2821         except
2822         end;
2823 end;
2824
2825 // *************************************************************************
2826 //! \83X\83\8c\83b\83h\82Ì\95\\8e¦\94Í\88Í\82ð\90Ý\92è
2827 // *************************************************************************
2828 procedure TGikoDM.ThreadRangeActionExecute(Sender: TObject);
2829 begin
2830         case GikoSys.Setting.ThreadRange of
2831         gtrAll: AllItemAction.Execute;
2832         gtrLog: LogItemAction.Execute;
2833         gtrNew: NewItemAction.Execute;
2834         gtrArch: ArchiveItemAction.Execute;
2835         gtrLive: LiveItemAction.Execute;
2836         end;
2837 end;
2838 // *************************************************************************
2839 //! \83X\83\8c\83b\83h\8di\8d\9e\82Ý\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
2840 // *************************************************************************
2841 procedure TGikoDM.SelectItemActionExecute(Sender: TObject);
2842 var
2843         idx: Integer;
2844         Dlg: TListSelectDialog;
2845 begin
2846         try
2847                 if GikoForm.SelectComboBoxPanel.Visible then begin
2848                         if GikoForm.SelectComboBoxPanel.Left + GikoForm.SelectComboBoxPanel.Width < GikoForm.ListToolBar.Width then begin
2849                                 // SelectComboBox \82ª\82 \82é\8fê\8d\87\82Í\83t\83H\81[\83J\83X\82ð\88Ú\82·
2850                                 if GikoSys.Setting.ListOrientation = gloHorizontal then begin
2851                                         if GikoSys.Setting.ListWidthState = glsMax then
2852                                                 BrowserMinAction.Execute;
2853                                 end else begin
2854                                         if GikoSys.Setting.ListHeightState = glsMax then
2855                                                 BrowserMinAction.Execute;
2856                                 end;
2857                                 GikoForm.SelectComboBox.SetFocus;
2858                                 exit;
2859                         end;
2860                 end;
2861         except
2862         end;
2863
2864         if GikoForm.SelectComboBox.Text = SELECTCOMBOBOX_NAME then begin
2865                 GikoForm.SelectComboBox.Text := '';
2866                 GikoForm.SelectComboBox.Color := clWindow;
2867         end;
2868
2869         AllItemAction.Checked := False;
2870         LogItemAction.Checked := False;
2871         NewItemAction.Checked := False;
2872         //SelectItemAction.Checked := True;
2873         GikoForm.ModifySelectList;
2874         Dlg := TListSelectDialog.Create(GikoForm);
2875         try
2876                 Dlg.SelectComboBox.Items.Assign(GikoSys.Setting.SelectTextList);
2877                 Dlg.SelectComboBox.Text := GikoForm.SelectComboBox.Text;
2878                 Dlg.ShowModal;
2879                 if Dlg.ModalResult = mrCancel then begin
2880                         if Length( GikoForm.SelectComboBox.Text ) = 0 then begin
2881                                 AllItemAction.Checked := True;
2882                                 GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2883                                 GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2884                         end;
2885
2886                         if GikoForm.GetActiveList is TBoard then
2887                                 GikoForm.SetListViewType(gvtUser, TBoard(GikoForm.GetActiveList).ParentCategory.ParenTBBS.SelectText , Dlg.KubetsuCheckBox.Checked);
2888                 end else begin
2889                         idx := GikoSys.Setting.SelectTextList.IndexOf(Dlg.SelectComboBox.Text);
2890                         if idx <> -1 then
2891                                 GikoSys.Setting.SelectTextList.Delete(idx);
2892                         GikoSys.Setting.SelectTextList.Insert(0, Dlg.SelectComboBox.Text);
2893                         while Dlg.SelectComboBox.Items.Count > 100 do begin
2894                                 Dlg.SelectComboBox.Items.Delete(Dlg.SelectComboBox.Items.Count - 1);
2895                         end;
2896
2897                         if Length( Dlg.SelectComboBox.Text ) = 0 then begin
2898                                 GikoForm.SelectComboBox.Text := SELECTCOMBOBOX_NAME;
2899                                 GikoForm.SelectComboBox.Color := SELECTCOMBOBOX_COLOR;
2900                         end else begin
2901                                 GikoForm.SelectComboBox.Text := Dlg.SelectComboBox.Text;
2902                                 GikoForm.SelectComboBox.Color := clWindow;
2903                         end;
2904                         GikoForm.SetListViewType(gvtUser, Dlg.SelectComboBox.Text, Dlg.KubetsuCheckBox.Checked);
2905                 end;
2906         finally
2907                 Dlg.Release;
2908         end;
2909 end;
2910 // *************************************************************************
2911 //! \90V\83X\83\8c\8f\91\82«\8d\9e\82Ý\83E\83B\83\93\83h\83E\82ð\95\\8e¦\82·\82é
2912 // *************************************************************************
2913 procedure TGikoDM.ThreadEditorActionExecute(Sender: TObject);
2914 var
2915         Editor: TEditorForm;
2916 begin
2917         if not (GikoForm.GetActiveList is TBoard) then
2918                 Exit;
2919         Editor := TEditorForm.Create(GikoForm);
2920         Editor.SetBoard(TBoard(GikoForm.GetActiveList));
2921         Editor.Show;
2922     Editor.SetFocusEdit;
2923 end;
2924 // *************************************************************************
2925 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\94Â\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
2926 // *************************************************************************
2927 procedure TGikoDM.BoardIEActionExecute(Sender: TObject);
2928 var
2929         URL: string;
2930 begin
2931         if GikoForm.GetActiveList is TBoard then begin
2932                 URL := TBoard(GikoForm.GetActiveList).URL;
2933                 GikoSys.OpenBrowser(URL, gbtAuto);
2934         end;
2935 end;
2936 // *************************************************************************
2937 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ÌURL\82ð\83R\83s\81[\82·\82é
2938 // *************************************************************************
2939 procedure TGikoDM.SelectItemURLCopyActionExecute(Sender: TObject);
2940 var
2941         List: TList;
2942         i: Integer;
2943         s: string;
2944 begin
2945         s := '';
2946         List := TList.Create;
2947         try
2948                 GikoForm.SelectListItem(List);
2949                 for i := 0 to List.Count - 1 do begin
2950                         if TObject(List[i]) is TBoard then
2951                                 s := s + TBoard(List[i]).URL + #13#10
2952                         else if TObject(List[i]) is TThreadItem then
2953                                 s := s + TThreadItem(List[i]).URL + #13#10;
2954                 end;
2955                 if s <> '' then
2956                         Clipboard.AsText := s;
2957         finally
2958                 List.Free;
2959         end;
2960 end;
2961 // *************************************************************************
2962 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ÌURL\82ð\83R\83s\81[\82·\82éUpdate\83C\83x\83\93\83g
2963 // *************************************************************************
2964 procedure TGikoDM.SelectItemURLCopyActionUpdate(Sender: TObject);
2965 begin
2966         if ((GikoForm.GetActiveList is TBoard) or
2967                 (GikoForm.GetActiveList is TCategory))and (GikoForm.ListView.SelCount > 0) then
2968                 TAction(Sender).Enabled := True
2969         else
2970                 TAction(Sender).Enabled := False;
2971 end;
2972 // *************************************************************************
2973 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82Ì\96¼\91O\82ð\83R\83s\81[\82·\82é
2974 // *************************************************************************
2975 procedure TGikoDM.SelectItemNameCopyActionExecute(Sender: TObject);
2976 var
2977         List: TList;
2978         i: Integer;
2979         s: string;
2980 begin
2981         s := '';
2982         List := TList.Create;
2983         try
2984                 GikoForm.SelectListItem(List);
2985                 for i := 0 to List.Count - 1 do begin
2986             if TObject(List[i]) is TCategory then
2987                 s := s + TCategory(List[i]).Title + #13#10
2988                         else if TObject(List[i]) is TBoard then
2989                                 s := s + TBoard(List[i]).Title + #13#10
2990                         else if TObject(List[i]) is TThreadItem then
2991                                 s := s + TThreadItem(List[i]).Title + #13#10;
2992                 end;
2993                 if s <> '' then
2994                         Clipboard.AsText := s;
2995         finally
2996                 List.Free;
2997         end;
2998 end;
2999 // *************************************************************************
3000 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82Ì\96¼\91O\82ð\83R\83s\81[\82·\82éUpdate\83C\83x\83\93\83g
3001 // *************************************************************************
3002 procedure TGikoDM.SelectItemNameCopyActionUpdate(Sender: TObject);
3003 begin
3004         if ((GikoForm.GetActiveList is TBBS) or
3005         (GikoForm.GetActiveList is TBoard) or
3006                 (GikoForm.GetActiveList is TCategory))and (GikoForm.ListView.SelCount > 0) then
3007                 TAction(Sender).Enabled := True
3008         else
3009                 TAction(Sender).Enabled := False;
3010 end;
3011 // *************************************************************************
3012 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\96¼\91O\82ÆURL\82ð\83R\83s\81[\82·\82é
3013 // *************************************************************************
3014 procedure TGikoDM.SelectItemNameURLCopyActionExecute(Sender: TObject);
3015 var
3016         List: TList;
3017         i: Integer;
3018         s: string;
3019 begin
3020         s := '';
3021         List := TList.Create;
3022         try
3023                 GikoForm.SelectListItem(List);
3024                 for i := 0 to List.Count - 1 do begin
3025                         if TObject(List[i]) is TBoard then
3026                                 s := s + TBoard(List[i]).Title + #13#10 + TBoard(List[i]).URL + #13#10
3027                         else if TObject(List[i]) is TThreadItem then
3028                                 s := s + TThreadItem(List[i]).Title + #13#10 + TThreadItem(List[i]).URL + #13#10;
3029                 end;
3030                 if s <> '' then
3031                         Clipboard.AsText := s;
3032         finally
3033                 List.Free;
3034         end;
3035 end;
3036 // *************************************************************************
3037 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\88ê\97\97\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
3038 // *************************************************************************
3039 procedure TGikoDM.SelectListReloadActionExecute(Sender: TObject);
3040 var
3041         i: Integer;
3042         List: TList;
3043         msg: string;
3044         shiftDown: Boolean;
3045 begin
3046         shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
3047     GikoForm.ActiveListColumnSave;
3048         if GikoForm.GetActiveList is TCategory then begin
3049                 List := TList.Create;
3050                 try
3051                         GikoForm.SelectListItem(List);
3052                         if List.Count > 5 then begin
3053                                 msg := '5\8cÂ\88È\8fã\82Í\8ew\92è\82Å\82«\82Ü\82¹\82ñ' + #13#10
3054                                                  + '\82Q\82¿\82á\82ñ\82Ë\82é\95\89\89×\8cy\8c¸\82É\82²\8b¦\97Í\82­\82¾\82³\82¢';
3055                                 MsgBox(GikoForm.Handle, msg, '\8cx\8d\90', MB_ICONEXCLAMATION);
3056                                 Exit;
3057                         end;
3058                         for i := 0 to List.Count - 1 do begin
3059                                 if TObject(List[i]) is TBoard then
3060                                         GikoForm.DownloadList(TBoard(List[i]), shiftDown);
3061                         end;
3062                 finally
3063                         List.Free;
3064                 end;
3065         end else if GikoForm.GetActiveList is TBoard then begin
3066                 GikoForm.DownloadList(TBoard(GikoForm.GetActiveList), shiftDown);
3067         end;
3068 end;
3069 // *************************************************************************
3070 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\88ê\97\97\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82éUpdate\83C\83x\83\93\83g
3071 // *************************************************************************
3072 procedure TGikoDM.SelectListReloadActionUpdate(Sender: TObject);
3073 begin
3074         if (GikoForm.GetActiveList is TCategory) and (GikoForm.ListView.SelCount > 0) then
3075                 TAction(Sender).Enabled := True
3076         else if GikoForm.GetActiveList is TBoard then begin
3077                 TAction(Sender).Enabled :=
3078             (GikoForm.GetActiveList <> BoardGroup.SpecialBoard);
3079         end else
3080                 TAction(Sender).Enabled := False;
3081 end;
3082 // *************************************************************************
3083 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82é
3084 // *************************************************************************
3085 procedure TGikoDM.SelectThreadReloadActionExecute(Sender: TObject);
3086 var
3087         List: TList;
3088         i: Integer;
3089         msg: string;
3090         shiftDown: Boolean;
3091 begin
3092         shiftDown := GetAsyncKeyState(VK_SHIFT) = Smallint($8001);
3093         List := TList.Create;
3094         try
3095                 GikoForm.SelectListItem(List);
3096                 if List.Count > 10 then begin
3097                         msg := '10\8cÂ\88È\8fã\82Í\8ew\92è\82Å\82«\82Ü\82¹\82ñ' + #13#10
3098                                          + '\82Q\82¿\82á\82ñ\82Ë\82é\95\89\89×\8cy\8c¸\82É\82²\8b¦\97Í\82­\82¾\82³\82¢';
3099                         MsgBox(GikoForm.Handle, msg, '\8cx\8d\90', MB_ICONEXCLAMATION);
3100                         Exit;
3101                 end;
3102                 for i := 0 to List.Count - 1 do begin
3103                         if TObject(List[i]) is TThreadItem then
3104                                 GikoForm.DownloadContent(TThreadItem(List[i]), shiftDown);
3105                 end;
3106         finally
3107                 List.Free;
3108         end;
3109 end;
3110 // *************************************************************************
3111 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83_\83E\83\93\83\8d\81[\83h\82·\82éUpdate\83C\83x\83\93\83g
3112 // *************************************************************************
3113 procedure TGikoDM.SelectThreadReloadActionUpdate(Sender: TObject);
3114 begin
3115         TAction(Sender).Enabled :=
3116                 (GikoForm.GetActiveList is TBoard) and (GikoForm.ListView.SelCount > 0);
3117 end;
3118 // *************************************************************************
3119 //! \83X\83\8c\83b\83h\8f\84\89ñ\97\\96ñ
3120 // *************************************************************************
3121 procedure TGikoDM.SelectReservActionExecute(Sender: TObject);
3122 begin
3123         //INFO 2005/11/19 \83_\83~\81[\81H\81@by \82à\82\82ã
3124         // \82±\82Ì\83R\83\81\83\93\83g\8dí\8f\9c\82µ\82Ä\82Í\91Ê\96Ú
3125 end;
3126 // *************************************************************************
3127 //! \83X\83\8c\83b\83h\8f\84\89ñ\97\\96ñUpdate\83C\83x\83\93\83g
3128 // *************************************************************************
3129 procedure TGikoDM.SelectReservActionUpdate(Sender: TObject);
3130 var
3131         i: Integer;
3132         List: TList;
3133 begin
3134         if (GikoForm.GetActiveList is TBoard) and (GikoForm.ListView.SelCount > 0) then begin
3135                 List := TList.Create;
3136                 try
3137                         GikoForm.SelectListItem(List);
3138                         for i := 0 to List.Count - 1 do begin
3139                                 if TObject(List[i]) is TThreadItem then begin
3140                                         if TThreadItem(List[i]).IsLogFile then begin
3141                                                 SelectReservAction.Enabled := True;
3142                                                 Exit;
3143                                         end;
3144                                 end;
3145                         end;
3146                         SelectReservAction.Enabled := False;
3147                 finally
3148                         List.Free;
3149                 end;
3150         end else if (GikoForm.GetActiveList is TCategory) and (GikoForm.ListView.SelCount > 0) then
3151                 SelectReservAction.Enabled := True
3152         else
3153                 SelectReservAction.Enabled := False;
3154 end;
3155 // *************************************************************************
3156 //! \91I\91ð\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82É\90V\82µ\82¢\96¼\91O\82Å\8f\84\89ñ\97\\96ñ
3157 // *************************************************************************
3158 procedure TGikoDM.SelectNewRoundNameExecute(Sender: TObject);
3159 var
3160         s: string;
3161         Dlg: TRoundNameDialog;
3162                 cnt: Integer;
3163
3164 begin
3165         //\8cÄ\82Ñ\8fo\82µ\8c³\82ª\81ATAction\82ÅListView\82É\91I\91ð\82ª\82¢\82È\82¯\82ê\82Î\81AEXIT\82·\82é
3166         if (Sender is TAction) and (GikoForm.ListView.Selected = nil) then
3167                 Exit;
3168
3169         //\93o\98^\8fã\8cÀ\83`\83F\83b\83N
3170         cnt := RoundList.Count[grtBoard];
3171         cnt := cnt + RoundList.Count[grtItem];
3172         if cnt > 500 then begin
3173                         MsgBox(GikoForm.Handle, '\8f\84\89ñ\82Í500\88È\8fã\93o\98^\82Å\82«\82Ü\82¹\82ñ', MSG_ERROR, MB_OK or MB_ICONSTOP);
3174                         Exit;
3175         end;
3176
3177         Dlg := TRoundNameDialog.Create(GikoForm);
3178         try
3179                 Dlg.ShowModal;
3180                 if Dlg.ModalResult <> mrCancel then begin
3181                         s := Trim(Dlg.RoundNameEdit.Text);
3182                         if (Sender is TMenuItem) then begin
3183                                 GikoForm.SetSelectItemRound(True, s, TMenuItem(Sender).Parent.Name);
3184                         end else if (Sender is TAction) then begin
3185                                 if (GikoForm.ListView.Selected <> nil) then begin
3186                                         if (TObject(GikoForm.ListView.Selected.Data) is TThreadItem) then begin
3187                                                 GikoForm.SetSelectItemRound(True, s,
3188                                                         TThreadItem(GikoForm.ListView.Selected.Data).Title);
3189                                         end else if (TObject(GikoForm.ListView.Selected.Data) is TBoard) then begin
3190                                                 GikoForm.SetSelectItemRound(True, s,
3191                                                         TBoard(GikoForm.ListView.Selected.Data).Title);
3192                                         end;
3193                                 end;
3194                         end;
3195                         GikoForm.ListView.Refresh;
3196                 end;
3197         finally
3198                 Dlg.Free;
3199         end;
3200 end;
3201 // *************************************************************************
3202 //! \91I\91ð\82³\82ê\82Ä\82¢\83X\83\8c\83b\83h\82Ì\8f\84\89ñ\82ð\8dí\8f\9c\82·\82é
3203 // *************************************************************************
3204 procedure TGikoDM.SelectDeleteRoundExecute(Sender: TObject);
3205 var
3206         s : String;
3207 begin
3208         if (Sender is TMenuItem) then begin
3209                 try
3210                         GikoForm.SetSelectItemRound(False, '', TMenuItem(Sender).Parent.Name);
3211                 except
3212                 end;
3213         end else if (Sender is TAction) then begin
3214                 try
3215                         if GikoForm.ListView.Selected <> nil then begin
3216                                 if (TObject(GikoForm.ListView.Selected.Data) is TThreadItem) then begin
3217                                         s := TThreadItem(GikoForm.ListView.Selected.Data).Title;
3218                                 end else if (TObject(GikoForm.ListView.Selected.Data) is TBoard) then begin
3219                                         s := TBoard(GikoForm.ListView.Selected.Data).Title;
3220                                 end;
3221                                 GikoForm.SetSelectItemRound(False, '', s);
3222
3223                         end;
3224                 except
3225                 end;
3226         end;
3227         GikoForm.ListView.Refresh;
3228 end;
3229 // *************************************************************************
3230 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82ð\82¨\8bC\82É\93ü\82è\82É\92Ç\89Á\82·\82é
3231 // *************************************************************************
3232 procedure TGikoDM.BoardFavoriteAddActionExecute(Sender: TObject);
3233 begin
3234         if TObject(GikoForm.ListView.Selected.Data) is TBoard then
3235                 GikoForm.ShowFavoriteAddDialog(TObject(GikoForm.ListView.Selected.Data));
3236 end;
3237 // *************************************************************************
3238 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\94Â\82ð\82¨\8bC\82É\93ü\82è\82É\92Ç\89Á\82·\82éUpdate\83C\83x\83\93\83g
3239 // *************************************************************************
3240 procedure TGikoDM.BoardFavoriteAddActionUpdate(Sender: TObject);
3241 begin
3242         BoardFavoriteAddAction.Enabled :=
3243                 (GikoForm.GetActiveList is TCategory) and (GikoForm.ListView.SelCount > 0);
3244 end;
3245 // *************************************************************************
3246 //! Explorer\82ÅLog\83t\83H\83\8b\83_\82ð\8aJ\82­
3247 // *************************************************************************
3248 procedure TGikoDM.LogFolderOpenActionExecute(Sender: TObject);
3249 var
3250         List: TList;
3251 begin
3252         if ((GikoSys.Setting.ListOrientation = gloVertical) and
3253                 (GikoSys.Setting.ListHeightState = glsMax)) or
3254                 ((GikoSys.Setting.ListOrientation = gloHorizontal) and
3255                 (GikoSys.Setting.ListWidthState = glsMax))      then begin
3256                 if(GikoForm.GetActiveContent <> nil) then begin
3257                         GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(GikoForm.GetActiveContent.FilePath) + '"');
3258                 end;
3259         end else if GikoForm.GetActiveList is TCategory then begin
3260                 List := TList.Create;
3261                 try
3262                         GikoForm.SelectListItem(List);
3263                         GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(List[0]).FilePath) + '"');
3264                 finally
3265                         List.Free;
3266                 end;
3267         end else if GikoForm.GetActiveList is TBoard then begin
3268                 GikoSys.CreateProcess('explorer.exe', '/e,"' + ExtractFilePath(TBoard(GikoForm.GetActiveList).FilePath) + '"');
3269         end;
3270
3271 end;
3272 // *************************************************************************
3273 //! ActiveList\82ªTBoard\82©TCategory\82Å\83X\83\8c\88ê\97\97\82Å\82P\82Â\88È\8fã\91I\91ð\82µ\82Ä\82¢\82é\82Æ\97L\8cø\82É\82È\82éActionde\8b¤\92Ê
3274 // *************************************************************************
3275 procedure TGikoDM.LogFolderOpenActionUpdate(Sender: TObject);
3276 begin
3277         if (((GikoForm.GetActiveList is TBoard) and
3278         (GikoForm.GetActiveList <> BoardGroup.SpecialBoard))
3279         or (GikoForm.GetActiveList is TCategory))
3280                 and (GikoForm.ListView.SelCount > 0) then
3281                 TAction(Sender).Enabled := True
3282         else
3283                 TAction(Sender).Enabled := False;
3284 end;
3285 // *************************************************************************
3286 //! Header.txt\82ð\83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é
3287 // *************************************************************************
3288 procedure TGikoDM.BrowsBoradHeadActionExecute(Sender: TObject);
3289 var
3290         RefURL, URL : string;
3291         List : TList;
3292 begin
3293         RefURL := '';
3294         if GikoForm.GetActiveList is TCategory then begin
3295                 List := TList.Create;
3296                 try
3297                         GikoForm.SelectListItem(List);
3298                         RefURL := TBoard(List[0]).URL;
3299                 finally
3300                         List.Free;
3301                 end;
3302         end else if GikoForm.GetActiveList is TBoard then begin
3303                 RefURL := TBoard(GikoForm.GetActiveList).URL
3304         end;
3305         if RefURL <> '' then begin
3306                 if RefURL[Length(RefURL)] <> '/' then
3307                         URL     := RefURL + '/' + 'head.txt'
3308                 else
3309                         URL     := RefURL + 'head.txt';
3310
3311                 GikoForm.MoveToURL(URL);
3312         end else begin
3313                 ShowMessage('\94Â\82ð\93Á\92è\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B');
3314         end;
3315
3316 end;
3317 // *************************************************************************
3318 //! \83X\83\8c\88ê\97\97\82Ì\95\\8e¦\82µ\82Ä\82¢\82é\93à\97e\82É\82µ\82½\82ª\82Á\82Ä\81A\83\\81[\83g\83J\83\89\83\80\82Ì\88Ê\92u\82Æ\95û\8cü\82ð\8eæ\93¾\82·\82é
3319 // *************************************************************************
3320 function TGikoDM.GetSortProperties(List: TObject;
3321  var vSortOrder: Boolean): Boolean;
3322 begin
3323         Result := True;
3324         if (List <> nil) then begin
3325                 if (List is TBBS) then begin
3326                         vSortOrder := GikoSys.Setting.BBSSortOrder;
3327                 end else if (List is TCategory) then begin
3328                         vSortOrder := GikoSys.Setting.CategorySortOrder;
3329                 end else if (List is TBoard) then begin
3330                         vSortOrder := GikoSys.Setting.BoardSortOrder;
3331                 end else begin
3332                         Result := False;
3333                 end;
3334         end else begin
3335                 Result := False;
3336         end;
3337 end;
3338 // *************************************************************************
3339 //! \8c»\8dÝ\82Ì\83J\83\89\83\80\82ð\83\\81[\83g\82·\82é
3340 // *************************************************************************
3341 procedure TGikoDM.SortActiveColumnActionExecute(Sender: TObject);
3342 var
3343         i       : Integer;
3344         so : boolean;
3345 begin
3346         if GetSortProperties(GikoForm.GetActiveList, so) then begin
3347                 for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
3348                         if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
3349                                 (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
3350                                 so := not so;
3351                                 TListViewUtils.ListViewSort(nil, GikoForm.ListView,
3352                                          GikoForm.ListView.Column[ i ], ListNumberVisibleAction.Checked,
3353                                          so);
3354                                 break;
3355                         end;
3356                 end;
3357         end;
3358 end;
3359 // *************************************************************************
3360 //! \89E\97×\82Ì\83J\83\89\83\80\82ð\83\\81[\83g
3361 // *************************************************************************
3362 procedure TGikoDM.SortNextColumnActionExecute(Sender: TObject);
3363 var
3364         i, id   : Integer;
3365 begin
3366         for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
3367                 if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
3368                         (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
3369                         id := i + 1;
3370                         if id > GikoForm.ListView.Columns.Count - 1 then
3371                                 id := 0;
3372                         TListViewUtils.ListViewSort( nil, GikoForm.ListView,
3373                                 GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
3374                                 id = 0);
3375                         break;
3376                 end;
3377         end;
3378 end;
3379 // *************************************************************************
3380 //! \8d\97×\82Ì\83J\83\89\83\80\82ð\83\\81[\83g
3381 // *************************************************************************
3382 procedure TGikoDM.SortPrevColumnActionExecute(Sender: TObject);
3383 var
3384         i, id   : Integer;
3385 begin
3386         for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
3387                 if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
3388                         (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
3389                         id := i - 1;
3390                         if id < 0 then
3391                                 id := GikoForm.ListView.Columns.Count - 1;
3392                         TListViewUtils.ListViewSort( nil, GikoForm.ListView,
3393                                 GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
3394                                 id = 0);
3395                         break;
3396                 end;
3397         end;
3398 end;
3399 ////////////////////////////////\94Â\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
3400 // *************************************************************************
3401 //! \95W\8f\80\83c\81[\83\8b\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3402 // *************************************************************************
3403 procedure TGikoDM.StdToolBarVisibleActionExecute(Sender: TObject);
3404 var
3405         CoolBand: TCoolBand;
3406 begin
3407         CoolBand := GikoForm.GetCoolBand(GikoForm.MainCoolBar, GikoForm.StdToolBar);
3408         if CoolBand = nil then
3409                 Exit;
3410         GikoSys.Setting.StdToolBarVisible := StdToolBarVisibleAction.Checked;
3411         CoolBand.Visible := GikoSys.Setting.StdToolBarVisible;
3412         GikoForm.StdToolBarVisiblePMenu.Checked := GikoSys.Setting.StdToolBarVisible;
3413 end;
3414 // *************************************************************************
3415 //! \83A\83h\83\8c\83X\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3416 // *************************************************************************
3417 procedure TGikoDM.AddressBarVisibleActionExecute(Sender: TObject);
3418 var
3419         CoolBand: TCoolBand;
3420 begin
3421         CoolBand := GikoForm.GetCoolBand(GikoForm.MainCoolBar, GikoForm.AddressToolBar);
3422         if CoolBand = nil then
3423                 Exit;
3424         GikoSys.Setting.AddressBarVisible := AddressBarVisibleAction.Checked;
3425         CoolBand.Visible := GikoSys.Setting.AddressBarVisible;
3426         GikoForm.AddressToolBarVisiblePMenu.Checked := GikoSys.Setting.AddressBarVisible;
3427 end;
3428 // *************************************************************************
3429 //! \83\8a\83\93\83N\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3430 // *************************************************************************
3431 procedure TGikoDM.LinkBarVisibleActionExecute(Sender: TObject);
3432 var
3433         CoolBand: TCoolBand;
3434 begin
3435         CoolBand := GikoForm.GetCoolBand(GikoForm.MainCoolBar, GikoForm.LinkToolBar);
3436         if CoolBand = nil then
3437                 Exit;
3438         GikoSys.Setting.LinkBarVisible := LinkBarVisibleAction.Checked;
3439         CoolBand.Visible := GikoSys.Setting.LinkBarVisible;
3440         GikoForm.LinkToolBarVisiblePMenu.Checked := GikoSys.Setting.LinkBarVisible;
3441 end;
3442 // *************************************************************************
3443 //! \83\8a\83X\83g\83c\81[\83\8b\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3444 // *************************************************************************
3445 procedure TGikoDM.ListToolBarVisibleActionExecute(Sender: TObject);
3446 var
3447         CoolBand: TCoolBand;
3448 begin
3449         CoolBand := GikoForm.GetCoolBand(GikoForm.ListCoolBar, GikoForm.ListToolBar);
3450         if CoolBand = nil then
3451                 Exit;
3452         CoolBand.Visible := ListToolBarVisibleAction.Checked;
3453         GikoSys.Setting.ListToolBarVisible := ListToolBarVisibleAction.Checked;
3454 end;
3455 // *************************************************************************
3456 //! \83\8a\83X\83g\96¼\8fÌ\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3457 // *************************************************************************
3458 procedure TGikoDM.ListNameBarVisibleActionExecute(Sender: TObject);
3459 var
3460         CoolBand: TCoolBand;
3461 begin
3462         CoolBand := GikoForm.GetCoolBand(GikoForm.ListCoolBar, GikoForm.ListNameToolBar);
3463         if CoolBand = nil then
3464                 Exit;
3465         CoolBand.Visible := ListNameBarVisibleAction.Checked;
3466         GikoSys.Setting.ListNameBarVisible := ListNameBarVisibleAction.Checked;
3467 end;
3468 // *************************************************************************
3469 //! \83u\83\89\83E\83U\83c\81[\83\8b\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3470 // *************************************************************************
3471 procedure TGikoDM.BrowserToolBarVisibleActionExecute(Sender: TObject);
3472 var
3473         CoolBand: TCoolBand;
3474 begin
3475         CoolBand := GikoForm.GetCoolBand(GikoForm.BrowserCoolBar, GikoForm.BrowserToolBar);
3476         if CoolBand = nil then
3477                 Exit;
3478         CoolBand.Visible := BrowserToolBarVisibleAction.Checked;
3479         GikoSys.Setting.BrowserToolBarVisible := BrowserToolBarVisibleAction.Checked;
3480 end;
3481 // *************************************************************************
3482 //! \83u\83\89\83E\83U\96¼\8fÌ\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3483 // *************************************************************************
3484 procedure TGikoDM.BrowserNameBarVisibleActionExecute(Sender: TObject);
3485 var
3486         CoolBand: TCoolBand;
3487 begin
3488         CoolBand := GikoForm.GetCoolBand(GikoForm.BrowserCoolBar, GikoForm.BrowserNameToolBar);
3489         if CoolBand = nil then
3490                 Exit;
3491         CoolBand.Visible := BrowserNameBarVisibleAction.Checked;
3492         GikoSys.Setting.BrowserNameBarVisible := BrowserNameBarVisibleAction.Checked;
3493 end;
3494 // *************************************************************************
3495 //! \83\81\83b\83Z\81[\83W\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3496 // *************************************************************************
3497 procedure TGikoDM.MsgBarVisibleActionExecute(Sender: TObject);
3498 begin
3499         GikoForm.MessageSplitter.Visible := MsgBarVisibleAction.Checked;
3500         GikoForm.MessagePanel.Top :=
3501                 GikoForm.MessageSplitter.Top + GikoForm.MessageSplitter.Height;
3502         GikoForm.MessageSplitter.Top := GikoForm.MessagePanel.Top + 1;
3503         GikoForm.MessagePanel.Visible := MsgBarVisibleAction.Checked;
3504         GikoSys.Setting.MessageBarVisible := MsgBarVisibleAction.Checked;
3505 end;
3506 // *************************************************************************
3507 //! \83\81\83b\83Z\81[\83W\83o\81[\82ð\95Â\82\82é
3508 // *************************************************************************
3509 procedure TGikoDM.MsgBarCloseActionExecute(Sender: TObject);
3510 begin
3511         MsgBarVisibleAction.Execute;
3512 end;
3513 // *************************************************************************
3514 //! \83X\83e\81[\83^\83X\83o\81[\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3515 // *************************************************************************
3516 procedure TGikoDM.StatusBarVisibleActionExecute(Sender: TObject);
3517 begin
3518         GikoForm.StatusBar.Visible := StatusBarVisibleAction.Checked;
3519         GikoSys.Setting.StatusBarVisible := StatusBarVisibleAction.Checked;
3520 end;
3521 // *************************************************************************
3522 //! \83L\83\83\83r\83l\83b\83g\82Ì\95\\8e¦\82ð\8cf\8e¦\94Â\82É\82·\82é
3523 // *************************************************************************
3524 procedure TGikoDM.CabinetBBSActionExecute(Sender: TObject);
3525 begin
3526
3527         if GikoForm.CabinetPanel.Visible then begin
3528                 if GikoForm.TreeType = gtt2ch then begin
3529                         GikoForm.CabinetVisible( False );
3530
3531                         CabinetBBSAction.Checked := False;
3532                 end else begin
3533                         CabinetBBSAction.Checked := True;
3534                 end;
3535         end else begin
3536                 GikoForm.CabinetVisible( True );
3537                 CabinetBBSAction.Checked := True;
3538         end;
3539
3540         if GikoForm.ActiveBBS = nil then
3541                 GikoForm.ShowBBSTree( BBSs[ 0 ] )
3542         else
3543                 GikoForm.ShowBBSTree( GikoForm.ActiveBBS );
3544
3545 end;
3546 // *************************************************************************
3547 //! \83L\83\83\83r\83l\83b\83g\82Ì\95\\8e¦\82ð\97\9a\97ð\83\8a\83X\83g\82É\82·\82é
3548 // *************************************************************************
3549 procedure TGikoDM.CabinetHistoryActionExecute(Sender: TObject);
3550 begin
3551         GikoForm.ShowHistoryTree;
3552 end;
3553 // *************************************************************************
3554 //! \83L\83\83\83r\83l\83b\83g\82Ì\95\\8e¦\82ð\82¨\8bC\82É\93ü\82è\83\8a\83X\83g\82É\82·\82é
3555 // *************************************************************************
3556 procedure TGikoDM.CabinetFavoriteActionExecute(Sender: TObject);
3557 var
3558         i, b : Integer;
3559         item : TMenuItem;
3560 begin
3561
3562         if GikoForm.CabinetPanel.Visible then begin
3563                 if GikoForm.TreeType = gttFavorite then begin
3564                         GikoForm.CabinetVisible( False );
3565                         CabinetFavoriteAction.Checked := False;
3566                 end else begin
3567                         CabinetFavoriteAction.Checked := True;
3568                 end;
3569         end else begin
3570                 GikoForm.CabinetVisible( True );
3571                 CabinetFavoriteAction.Checked := True;
3572         end;
3573
3574         // BBS...BBS, History, Favorite
3575         GikoSys.Setting.CabinetIndex := GikoForm.CabinetSelectPopupMenu.Items.Count - 1;
3576
3577         b := GikoForm.CabinetSelectPopupMenu.Items.Count - 1;
3578         for i := 0 to b do begin
3579                 item := GikoForm.CabinetSelectPopupMenu.Items[ i ];
3580                 if item is TBBSMenuItem then begin
3581                         item.Checked := False;
3582                         // CabinetMenu \82Í CabinetSelectPopupMenu \82Æ\93¯\82\82Æ\8c\88\82ß\82¤\82¿\82µ\82¿\82á\82¤
3583                         GikoForm.CabinetMenu.Items[ i ].Checked := False;
3584                 end;
3585         end;
3586
3587         // \83L\83\83\83r\83l\83b\83g\83c\81[\83\8b\83o\81[\8by\82Ñ\83L\83\83\83r\83l\83b\83g\82Ì\95\\8e¦\90Ø\91Ö
3588         GikoForm.HistoryToolBar.Hide;
3589         GikoForm.FavoriteToolBar.Show;
3590         GikoForm.TreeView.Visible := False;
3591         GikoForm.FavoriteTreeView.Visible := True;
3592
3593         GikoForm.CabinetSelectToolButton.Caption := '\82¨\8bC\82É\93ü\82è';
3594         GikoForm.TreeType := gttFavorite;
3595
3596         // \83\81\83j\83\85\81[\8by\82Ñ\83{\83^\83\93\82Ì\83`\83F\83b\83N\82ð\90Ý\92è
3597         CabinetBBSAction.Checked := False;
3598         CabinetHistoryAction.Checked := False;
3599
3600         // \82¨\8bC\82É\93ü\82è\82Ì\83c\83\8a\81[\82ð\93W\8aJ
3601         GikoForm.FavoriteTreeView.Items.GetFirstNode.Expanded := True;
3602
3603 end;
3604 // *************************************************************************
3605 //! \83L\83\83\83r\83l\83b\83g\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3606 // *************************************************************************
3607 procedure TGikoDM.CabinetVisibleActionExecute(Sender: TObject);
3608 begin
3609         case GikoForm.TreeType of
3610         gttHistory:             CabinetHistoryAction.Execute;
3611         gttFavorite:    CabinetFavoriteAction.Execute;
3612         else
3613                 CabinetBBSAction.Execute;
3614         end;
3615 end;
3616 // *************************************************************************
3617 //! \83L\83\83\83r\83l\83b\83g\82ð\95Â\82\82é
3618 // *************************************************************************
3619 procedure TGikoDM.CabinetCloseActionExecute(Sender: TObject);
3620 begin
3621         //INFO 2005/11/19 \82±\82Ì\83A\83N\83V\83\87\83\93\82É\82Í\89½\82à\90Ý\92è\82³\82ê\82Ä\82¢\82È\82©\82Á\82½\81@\82à\82\82ã
3622 end;
3623 // *************************************************************************
3624 //! \83\8a\83X\83g\82ð\91å\82«\82¢\83A\83C\83R\83\93\95\\8e¦\82É\82·\82é
3625 // *************************************************************************
3626 procedure TGikoDM.LargeIconActionExecute(Sender: TObject);
3627 begin
3628         GikoForm.ListView.ViewStyle := vsIcon;
3629         LargeIconAction.Checked := True;
3630 end;
3631 // *************************************************************************
3632 //! \83\8a\83X\83g\82ð\8f¬\82³\82¢\83A\83C\83R\83\93\95\\8e¦\82É\82·\82é
3633 // *************************************************************************
3634 procedure TGikoDM.SmallIconActionExecute(Sender: TObject);
3635 begin
3636         GikoForm.ListView.ViewStyle := vsSmallIcon;
3637         SmallIconAction.Checked := True;
3638 end;
3639 // *************************************************************************
3640 //! \83\8a\83X\83g\82ð\88ê\97\97\95\\8e¦\82É\82·\82é
3641 // *************************************************************************
3642 procedure TGikoDM.ListIconActionExecute(Sender: TObject);
3643 begin
3644         GikoForm.ListView.ViewStyle := vsList;
3645         ListIconAction.Checked := True;
3646 end;
3647 // *************************************************************************
3648 //! \83\8a\83X\83g\82ð\8fÚ\8d×\95\\8e¦\82É\82·\82é
3649 // *************************************************************************
3650 procedure TGikoDM.DetailIconActionExecute(Sender: TObject);
3651 begin
3652         GikoForm.ListView.ViewStyle := vsReport;
3653         DetailIconAction.Checked := True;
3654 end;
3655 // *************************************************************************
3656 //! \83_\83E\83\93\83\8d\81[\83h\82ð\92\86\8e~\82·\82é
3657 // *************************************************************************
3658 procedure TGikoDM.StopActionExecute(Sender: TObject);
3659 begin
3660         GikoForm.FControlThread.DownloadAbort;
3661         if GikoForm.WorkCount <> 0 then GikoForm.WorkCount := 0;
3662         try
3663                 GikoForm.Animate.Active := False;
3664         except
3665         end;
3666         GikoForm.ScreenCursor := crDefault;
3667 end;
3668 // *************************************************************************
3669 //! \83\8a\83X\83g\82Æ\83u\83\89\83E\83U\82Ì\8fc\89¡\94z\92u\82ð\95Ï\8dX\82·\82é
3670 // *************************************************************************
3671 procedure TGikoDM.ArrangeActionExecute(Sender: TObject);
3672 begin
3673         if ArrangeAction.Checked then begin
3674                 //\8fc
3675                 GikoForm.ViewPanel.Align := alNone;
3676                 GikoForm.ListSplitter.Align := alNone;
3677                 GikoForm.ThreadPanel.Align := alNone;
3678
3679                 GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;
3680                 GikoForm.ViewPanel.Align := alLeft;
3681
3682                 GikoForm.ListSplitter.Width := 5;
3683                 GikoForm.ListSplitter.Align := alLeft;
3684
3685                 GikoForm.ViewPanel.Left := -10;
3686
3687                 GikoForm.ThreadPanel.Align := alClient;
3688
3689                 GikoSys.Setting.ListOrientation := gloHorizontal;
3690                 case GikoSys.Setting.ListWidthState of
3691                         glsMax: begin
3692                                 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
3693                                 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
3694                                 GikoForm.ViewPanel.Width := 1;
3695                         end;
3696                         glsNormal: begin
3697                                 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
3698                                 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_MIN;
3699                         end;
3700                         glsMin: begin
3701                                 BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
3702                                 BrowserMinAction.ImageIndex := TOOL_ICON_WIDTH_NORMAL;
3703                                 GikoForm.ViewPanel.Width := GikoForm.ThreadMainPanel.Width - 80;
3704                         end;
3705                 end;
3706         end else begin
3707                 //\89¡
3708                 GikoForm.ViewPanel.Align := alNone;
3709                 GikoForm.ListSplitter.Align := alNone;
3710                 GikoForm.ThreadPanel.Align := alNone;
3711
3712                 GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;
3713                 GikoForm.ViewPanel.Align := alTop;
3714
3715                 GikoForm.ListSplitter.Height := 5;
3716                 GikoForm.ListSplitter.Align := alTop;
3717
3718                 GikoForm.ViewPanel.Top := -10;
3719
3720                 GikoForm.ThreadPanel.Align := alClient;
3721                 GikoSys.Setting.ListOrientation := gloVertical;
3722                 case GikoSys.Setting.ListHeightState of
3723                         glsMax: begin
3724                                 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
3725                                 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
3726                                 GikoForm.ViewPanel.Height := 1;
3727                         end;
3728                         glsNormal: begin
3729                                 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
3730                                 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_MIN;
3731                         end;
3732                         glsMin: begin
3733                                 BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
3734                                 BrowserMinAction.ImageIndex := TOOL_ICON_HEIGHT_NORMAL;
3735                                 GikoForm.ViewPanel.Height :=
3736                                         GikoForm.ThreadMainPanel.Height - GikoForm.BrowserCoolBar.Height - 7;
3737                         end;
3738                 end;
3739         end;
3740 end;
3741 // *************************************************************************
3742 //! \83y\83C\83\93\82Ì\83T\83C\83Y\82ð\8f\89\8aú\89»\82·\82é
3743 // *************************************************************************
3744 procedure TGikoDM.PaneInitActionExecute(Sender: TObject);
3745 begin
3746         GikoForm.CabinetPanel.Width := 150;
3747         GikoForm.MessagePanel.Height := 40;
3748
3749         GikoForm.BrowserSizeWidth := 200;
3750         GikoForm.BrowserSizeHeight := 200;
3751         if ArrangeAction.Checked then begin
3752                 GikoForm.ViewPanel.Width := GikoForm.BrowserSizeWidth;
3753         end else begin
3754                 GikoForm.ViewPanel.Height := GikoForm.BrowserSizeHeight;
3755         end;
3756         if GikoSys.Setting.ListOrientation = gloHorizontal then begin
3757                 if GikoSys.Setting.ListHeightState = glsMax then begin
3758                         BrowserMaxAction.ImageIndex := TOOL_ICON_HEIGHT_MAX;
3759                         GikoSys.Setting.ListHeightState := glsNormal;
3760                 end;
3761         end else begin
3762                 if GikoSys.Setting.ListWidthState = glsMax then begin
3763                         BrowserMaxAction.ImageIndex := TOOL_ICON_WIDTH_MAX;
3764                         GikoSys.Setting.ListWidthState := glsNormal;
3765                 end;
3766         end;
3767 end;
3768 // *************************************************************************
3769 //! \83u\83\89\83E\83U\83^\83u\82Ì\95\\8e¦\8fó\91Ô\82ð\95Ï\8dX\82·\82é
3770 // *************************************************************************
3771 procedure TGikoDM.BrowserTabVisibleActionExecute(Sender: TObject);
3772 begin
3773         GikoSys.Setting.BrowserTabVisible := BrowserTabVisibleAction.Checked;
3774         GikoForm.SetBrowserTabState;
3775 end;
3776 // *************************************************************************
3777 //! \83u\83\89\83E\83U\83^\83u\82ð\8fã\82É\95\\8e¦\82·\82é
3778 // *************************************************************************
3779 procedure TGikoDM.BrowserTabTopActionExecute(Sender: TObject);
3780 begin
3781         BrowserTabBottomAction.Checked := False;
3782         BrowserTabTopAction.Checked := True;
3783         GikoSys.Setting.BrowserTabPosition := gtpTop;
3784         GikoForm.SetBrowserTabState;
3785 end;
3786 // *************************************************************************
3787 //! \83u\83\89\83E\83U\83^\83u\82ð\89º\82É\95\\8e¦\82·\82é
3788 // *************************************************************************
3789 procedure TGikoDM.BrowserTabBottomActionExecute(Sender: TObject);
3790 begin
3791         BrowserTabTopAction.Checked := False;
3792         BrowserTabBottomAction.Checked := True;
3793         GikoSys.Setting.BrowserTabPosition := gtpBottom;
3794         GikoForm.SetBrowserTabState;
3795 end;
3796 // *************************************************************************
3797 //! \83u\83\89\83E\83U\83^\83u\82Ì\83X\83^\83C\83\8b\82ð\83^\83u\83X\83^\83C\83\8b\82É\82·\82é
3798 // *************************************************************************
3799 procedure TGikoDM.BrowserTabTabStyleActionExecute(Sender: TObject);
3800 begin
3801         BrowserTabButtonStyleAction.Checked := False;
3802         BrowserTabFlatStyleAction.Checked := False;
3803         BrowserTabTabStyleAction.Checked := True;
3804         GikoSys.Setting.BrowserTabStyle := gtsTab;
3805         GikoForm.SetBrowserTabState;
3806 end;
3807 // *************************************************************************
3808 //! \83u\83\89\83E\83U\83^\83u\82Ì\83X\83^\83C\83\8b\82ð\83{\83^\83\93\83X\83^\83C\83\8b\82É\82·\82é
3809 // *************************************************************************
3810 procedure TGikoDM.BrowserTabButtonStyleActionExecute(Sender: TObject);
3811 begin
3812         BrowserTabTabStyleAction.Checked := False;
3813         BrowserTabFlatStyleAction.Checked := False;
3814         BrowserTabButtonStyleAction.Checked := True;
3815         GikoSys.Setting.BrowserTabStyle := gtsButton;
3816         GikoForm.SetBrowserTabState;
3817 end;
3818 // *************************************************************************
3819 //! \83u\83\89\83E\83U\83^\83u\82Ì\83X\83^\83C\83\8b\82ð\83t\83\89\83b\83g\83{\83^\83\93\83X\83^\83C\83\8b\82É\82·\82é
3820 // *************************************************************************
3821 procedure TGikoDM.BrowserTabFlatStyleActionExecute(Sender: TObject);
3822 begin
3823         BrowserTabFlatStyleAction.Checked := True;
3824         BrowserTabTabStyleAction.Checked := False;
3825         BrowserTabButtonStyleAction.Checked := False;
3826         GikoSys.Setting.BrowserTabStyle := gtsFlat;
3827         GikoForm.SetBrowserTabState;
3828 end;
3829 // *************************************************************************
3830 //! \83u\83\89\83E\83U\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
3831 // *************************************************************************
3832 procedure TGikoDM.SetFocusForBrowserActionExecute(Sender: TObject);
3833 begin
3834     GikoForm.ActiveContent.Browser.SetFocus;
3835 end;
3836 // *************************************************************************
3837 //! \83u\83\89\83E\83U\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82éUpdate\83C\83x\83\93\83g
3838 // *************************************************************************
3839 procedure TGikoDM.SetFocusForBrowserActionUpdate(Sender: TObject);
3840 begin
3841         if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) and
3842                 (GikoForm.ActiveContent.Browser <> GikoForm.BrowserNullTab.Browser) then
3843                 TAction(Sender).Enabled := true
3844         else
3845                 TAction(Sender).Enabled := false;
3846 end;
3847 // *************************************************************************
3848 //! \83X\83\8c\83b\83h\88ê\97\97\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
3849 // *************************************************************************
3850 procedure TGikoDM.SetFocusForThreadListActionExecute(Sender: TObject);
3851 begin
3852         if GikoForm.ActiveContent <> nil then
3853                 GikoForm.WebBrowserClick(GikoForm.ActiveContent.Browser); //\88ê\89ñBrowser\82É\93\96\82Ä\82È\82¢\82Æ\93®\82©\82È\82¢\82Æ\82«\82ª\82 \82é
3854         GikoForm.ListView.SetFocus;
3855
3856         if( GikoForm.ListView.Items.Count > 0 ) and (GikoForm.ListView.ItemFocused = nil) then
3857                 GikoForm.ListView.Items.Item[0].Selected := true; //\91I\91ð\83A\83C\83e\83\80\82ª\96³\82¢\82Æ\82«\82Í\90æ\93ª\82Ì\82ð\91I\91ð\82·\82é
3858
3859         //\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
3860         if (GikoForm.ListView.ItemFocused <> nil) then begin
3861                 GikoForm.ListView.ItemFocused.MakeVisible(False);
3862         end;
3863 end;
3864 // *************************************************************************
3865 //! \83L\83\83\83r\83l\83b\83g\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
3866 // *************************************************************************
3867 procedure TGikoDM.SetFocusForCabinetActionExecute(Sender: TObject);
3868 begin
3869         if GikoForm.ActiveContent <> nil then
3870                 GikoForm.WebBrowserClick(GikoForm.ActiveContent.Browser); //\88ê\89ñBrowser\82É\93\96\82Ä\82È\82¢\82Æ\93®\82©\82È\82¢\82Æ\82«\82ª\82 \82é
3871         if GikoForm.TreeView.Visible then begin
3872                 GikoForm.TreeView.SetFocus;
3873                 if(GikoForm.TreeView.Items.Count > 0) and ( GikoForm.TreeView.Selected = nil ) then
3874                         GikoForm.TreeView.Items.Item[0].Selected := true;
3875         end else if GikoForm.FavoriteTreeView.Visible then begin
3876                 GikoForm.FavoriteTreeView.SetFocus;
3877                 if(GikoForm.FavoriteTreeView.Items.Count > 0) and (GikoForm.FavoriteTreeView.Selected = nil) then
3878                         GikoForm.FavoriteTreeView.Items.Item[0].Selected := true;
3879         end;
3880 end;
3881 // *************************************************************************
3882 //! \83L\83\83\83r\83l\83b\83g\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82éUpdate\83C\83x\83\93\83g
3883 // *************************************************************************
3884 procedure TGikoDM.SetFocusForCabinetActionUpdate(Sender: TObject);
3885 begin
3886         SetFocusForCabinetAction.Enabled := GikoForm.CabinetPanel.Visible;
3887 end;
3888 // *************************************************************************
3889 //! \83X\83\8c\83b\83h\88ê\97\97\82ð\8dÅ\91å\89»\82µ\82Ä\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
3890 // *************************************************************************
3891 procedure TGikoDM.ThreadlistMaxAndFocusActionExecute(Sender: TObject);
3892 begin
3893         BrowserMinAction.Execute;
3894         SetFocusForThreadListAction.Execute;
3895 end;
3896 // *************************************************************************
3897 //! \83X\83\8c\95\\8e¦\82ð\8dÅ\91å\89»\82µ\82Ä\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
3898 // *************************************************************************
3899 procedure TGikoDM.BrowserMaxAndFocusActionExecute(Sender: TObject);
3900 begin
3901         BrowserMaxAction.Execute;
3902         SetFocusForBrowserAction.Execute;
3903 end;
3904 // *************************************************************************
3905 //! \83X\83\8c\83b\83h\88ê\97\97\82Ì\91I\91ð\82ð\8dí\8f\9c\82·\82é
3906 // *************************************************************************
3907 procedure TGikoDM.UnSelectedListViewActionExecute(Sender: TObject);
3908 begin
3909         if GikoForm.ListView.Selected <> nil then begin
3910                 GikoForm.ListView.Selected.Focused := True;
3911                 GikoForm.ListView.Selected := nil;
3912         end;
3913 end;
3914 ////////////////////////////////\95\\8e¦\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
3915 // *************************************************************************
3916 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\8aù\93Ç\82É\82·\82é
3917 // *************************************************************************
3918 procedure TGikoDM.KidokuActionExecute(Sender: TObject);
3919 begin
3920         SetThreadReadProperty(true);
3921 end;
3922 // *************************************************************************
3923 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\96¢\93Ç\82É\82·\82é
3924 // *************************************************************************
3925 procedure TGikoDM.MidokuActionExecute(Sender: TObject);
3926 begin
3927         SetThreadReadProperty(false);
3928 end;
3929 // *************************************************************************
3930 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\96¢\93Ç\81E\8aù\93Ç\82ð\90Ý\92è\82·\82é   true : \8aù\93Ç false : \96¢\93Ç
3931 // *************************************************************************
3932 procedure TGikoDM.SetThreadReadProperty(read: Boolean);
3933 var
3934         List: TList;
3935         i: Integer;
3936 begin
3937         List := TList.Create;
3938         try
3939                 GikoForm.SelectListItem(List);
3940                 for i := 0 to List.Count - 1 do begin
3941                         if TObject(List[i]) is TThreadItem then begin
3942                                 if (TThreadItem(List[i]).IsLogFile) then begin
3943                                         TThreadItem(List[i]).UnRead := not read;
3944                                 end;
3945                         end;
3946                 end;
3947                 if GikoForm.TreeView.Visible then
3948                         GikoForm.TreeView.Refresh;
3949                 if GikoForm.ListView.Visible then
3950                         GikoForm.ListView.Refresh;
3951         finally
3952                 List.Free;
3953         end;
3954 end;
3955 // *************************************************************************
3956 //! \83\8a\83X\83g\82ð\91S\82Ä\91I\91ð\82·\82é
3957 // *************************************************************************
3958 procedure TGikoDM.AllSelectActionExecute(Sender: TObject);
3959 begin
3960         GikoForm.ListViewAllSelect;
3961 end;
3962 // *************************************************************************
3963 //! \83\8a\83X\83g\82ð\91S\82Ä\91I\91ð\82·\82éUpdate\83C\83x\83\93\83g
3964 // *************************************************************************
3965 procedure TGikoDM.AllSelectActionUpdate(Sender: TObject);
3966 begin
3967         AllSelectAction.Enabled := GikoForm.ListView.SelCount > 0;
3968 end;
3969 ////////////////////////////////\95Ò\8fW\82Ü\82Å\82¨\82µ\82Ü\82¢/////////////////////
3970 //! \83X\83\8c\83b\83h\82Ì\83T\83C\83Y\82ð\8dÄ\8cv\8eZ\82·\82é
3971 procedure TGikoDM.ThreadSizeCalcForFileActionExecute(Sender: TObject);
3972 const
3973         RECALC_MES : String = '\83X\83\8c\83b\83h\82Ì\97e\97Ê\82ð\83t\83@\83C\83\8b\82©\82ç\8dÄ\8cv\8eZ\82µ\82Ü\82·\81B'#13#10 +
3974                                                         '\82±\82Ì\91\80\8dì\92\86\81A\83M\83R\83i\83r\82Ì\91¼\82Ì\91\80\8dì\82ð\82·\82é\82Æ\83f\81[\83^\82ª\94j\89ó\82³\82ê\82é\8b°\82ê\82ª\82 \82è\82Ü\82·\81B' +
3975                                                         '\82Ü\82½\82±\82Ì\91\80\8dì\82Í\81A\94ñ\8fí\82É\8e\9e\8aÔ\82ª\82©\82©\82é\8fê\8d\87\82ª\82 \82è\82Ü\82·\82ª\81A\82æ\82ë\82µ\82¢\82Å\82·\82©\81H';
3976         RECALC_TITLE : String = '\83X\83\8c\83b\83h\82Ì\97e\97Ê\82ð\83t\83@\83C\83\8b\82©\82ç\8dÄ\8cv\8eZ';
3977         LIMIT_SIZE = 1024;
3978 var
3979         limitSize : Integer;
3980         limitStr  : String;
3981 begin
3982\82Ü\82¸\81A\8e\9e\8aÔ\82ª\82©\82©\82é\82±\82Æ\82ð\8cx\8d\90\82·\82é\83\81\83b\83Z\81[\83W\82ð\8fo\97Í
3983   \8dÄ\8cv\8eZ\82·\82é\83X\83\8c\83b\83h\82Ì\83T\83C\83Y\82Ìè\87\92l\81i\83f\83t\83H\83\8b\83g1024B)\82ð\8am\94F
3984   \83v\83\89\83O\83C\83\93\82ð\97\98\97p\82µ\82È\82¢\82Æ\82±\82ë\82Å\91S\82Ä\82Ì\83\8d\83O\97L\82è\83X\83\8c\83b\83h\82ð\8c\9f\8dõ
3985   è\87\92l\88È\89º\82Ì\83T\83C\83Y\82Ì\8fê\8d\87\81ADAT\82Ì\83t\83@\83C\83\8b\83T\83C\83Y\82Æ\94ä\8ar\81A\82¸\82ê\82Ä\82¢\82ê\82Î\81A
3986   DAT\82Ì\83t\83@\83C\83\8b\83T\83C\83Y\82Å\8dX\90V\82·\82é
3987 }
3988         if MsgBox(GikoForm.Handle, RECALC_MES,
3989                 RECALC_TITLE, MB_YESNO or MB_ICONWARNING) = ID_YES then begin
3990                 //è\87\92l\82Ì\8am\94F
3991                 limitSize := LIMIT_SIZE;
3992                 limitStr  := IntToStr(limitSize);
3993                 if InputQuery('è\87\92l\93ü\97Í', '\8ew\92è\82µ\82½\90\94\92l B\88È\89º\82Ì\97e\97Ê\82Ì\83X\83\8c\83b\83h\82Ì\82Ý\8dÄ\8cv\8eZ\82µ\82Ü\82·', limitStr) then begin
3994                         limitSize := StrToInt(MojuUtils.ZenToHan(limitStr));
3995                         if (limitSize < 0) then begin
3996                                 ShowMessage('è\87\92l\82É\95\89\82Í\8ew\92è\82Å\82«\82Ü\82¹\82ñ\81I');
3997                                 ThreadSizeCalcForFileActionExecute(nil);
3998                         end else begin
3999                                 RecalcThreadSize(limitSize);
4000                         end;
4001                 end;
4002         end;
4003 end;
4004 //! limit\82æ\82è\82à\83T\83C\83Y\82Ì\8f¬\82³\82¢\83X\83\8c\83b\83h\82Ì\97e\97Ê\82ðDAT\83t\83@\83C\83\8b\82©\82ç\8cv\8eZ
4005 procedure TGikoDM.RecalcThreadSize(limit : Integer);
4006 var
4007         i, j, tmpSize : Integer;
4008         Obj   : TObject;
4009         Board : TBoard;
4010         Thread: TThreadItem;
4011         dat   : TStringList;
4012 begin
4013         // \8dÄ\8cv\8eZ\83X\83^\81[\83g\81@\83v\83\89\83O\83C\83\93\82ð\97\98\97p\82µ\82È\82¢\82Æ\82±\82ë\82ð\91S\95\94\8c©\82é\81I
4014         GikoForm.ScreenCursor := crHourGlass;
4015         try
4016                 GikoForm.ProgressBar.Max := BoardGroups[0].Count;
4017                 for i := 0 to BoardGroups[0].Count - 1 do begin
4018                         Obj := BoardGroups[0].Objects[i];
4019                         if (Obj <> nil) then begin
4020                                 Board := TBoard(Obj);
4021                                 if not Board.IsThreadDatRead then begin
4022                                         GikoSys.ReadSubjectFile(Board);
4023                                 end;
4024                                 for j := 0 to Board.Count - 1 do begin
4025                                         Thread := Board.Items[j];
4026                                         if (Thread <> nil) and (Thread.IsLogFile)
4027                                                 and (Thread.Size <= limit) then begin
4028                                                 dat := TStringList.Create;
4029                                                 try
4030                                                         tmpSize := Thread.Size;
4031                                                         try
4032                                                                 dat.LoadFromFile(Thread.GetThreadFileName);
4033                                                                 tmpSize := Length(dat.Text);
4034                                                                 tmpSize := tmpSize - dat.Count;
4035                                                         except
4036                                                         end;
4037                                                         Thread.Size := tmpSize;
4038                                                 finally
4039                                                         dat.Free;
4040                                                 end;
4041                                         end;
4042                                 end;
4043                         end;
4044                         GikoForm.ProgressBar.StepBy(1);
4045                 end;
4046         finally
4047                 GikoForm.ScreenCursor := crDefault;
4048         end;
4049         GikoForm.ProgressBar.Position := 0;
4050         ShowMessage('\8cv\8eZ\8fI\97¹\82µ\82Ü\82µ\82½\81B');
4051 end;
4052 // *************************************************************************
4053 //! \93ü\97Í\83A\83V\83X\83g\82Ì\90Ý\92è\83t\83H\81[\83\80\82ð\8cÄ\82Ñ\8fo\82·
4054 // *************************************************************************
4055 procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject);
4056 var
4057         form : TInputAssistForm;
4058 begin
4059         form := TInputAssistForm.Create(GikoForm);
4060         try
4061                 form.SetUpFromMain;
4062                 form.ShowModal;
4063         finally
4064                 form.Release;
4065         end;
4066 end;
4067 // *************************************************************************
4068 //! \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\8c\9f\8dõ\83_\83C\83A\83\8d\83O\82ð\95\\8e¦\82·\82é
4069 // *************************************************************************
4070 procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
4071 begin
4072         if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
4073         GikoForm.ActiveContent.OpenFindDialog;
4074         end;
4075 end;
4076
4077 // *************************************************************************
4078 //! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82Ì\95\\8e¦\96¼\82ð\83R\83s\81[\82·\82é
4079 // *************************************************************************
4080 procedure TGikoDM.FavoriteTreeViewItemNameCopyActionExecute(
4081   Sender: TObject);
4082 begin
4083         if GikoForm.ClickNode = nil then Exit;
4084
4085         Clipboard.AsText :=
4086                         GikoForm.ClickNode.Text + #13#10;
4087 end;
4088
4089 // *************************************************************************
4090 //! \95\\8e¦\82³\82ê\82Ä\82¢\82é\82·\82×\82Ä\82Ì\83\8c\83X\83G\83f\83B\83^\82ð\95Â\82\82é
4091 // *************************************************************************
4092 procedure TGikoDM.CloseAllEditorActionExecute(Sender: TObject);
4093 var
4094     i : Integer;
4095 begin
4096     if ( EditorFormExists ) then begin
4097         //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\95Â\82\82é
4098             for i := Screen.CustomFormCount - 1 downto 0 do begin
4099                 if TObject(Screen.CustomForms[i]) is TEditorForm then begin
4100                 TEditorForm(Screen.CustomForms[i]).Close;
4101                 end;
4102             end;
4103     end;
4104 end;
4105 // *************************************************************************
4106 //! \83X\83N\83\8a\81[\83\93\8fã\82É\83\8c\83X\83G\83f\83B\83^\82ª\82¢\82½\8fê\8d\87\81C\97L\8cø\82É\82È\82é
4107 // *************************************************************************
4108 procedure TGikoDM.CloseAllEditorActionUpdate(Sender: TObject);
4109 begin
4110     if (Sender is TAction) then begin
4111         TAction(Sender).Enabled := EditorFormExists;
4112     end;
4113 end;
4114 // *************************************************************************
4115 //! \83X\83N\83\8a\81[\83\93\8fã\82ÉEditorForm\82ª\82¢\82é\82©
4116 // *************************************************************************
4117 function TGikoDM.EditorFormExists(): boolean;
4118 var
4119         i : Integer;
4120 begin
4121         Result := false;
4122         //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\92T\82·
4123         for i := Screen.CustomFormCount - 1 downto 0 do begin
4124                 if (Screen.CustomForms[i] is TEditorForm) then begin
4125                         Result := true;
4126                         Break;
4127                 end;
4128         end;
4129 end;
4130
4131 // *************************************************************************
4132 //! \83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\96¼\91O\82Ì\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
4133 // *************************************************************************
4134 procedure TGikoDM.ClearNameTextAllEditor();
4135 var
4136         i : Integer;
4137 begin
4138         for i := 0 to Screen.CustomFormCount - 1 do begin
4139                 if (Screen.CustomForms[i] is TEditorForm) then begin
4140                         TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
4141         end;
4142         end;
4143 end;
4144 // *************************************************************************
4145 //! \83X\83N\83\8a\81[\83\93\8fã\82É\82¢\82é\82·\82×\82Ä\82ÌEditorForm\82©\82ç\83\81\81[\83\8b\97\9a\97ð\82ð\8dí\8f\9c\82·\82é
4146 // *************************************************************************
4147 procedure TGikoDM.ClearMailAllEditor();
4148 var
4149         i : Integer;
4150 begin
4151         for i := 0 to Screen.CustomFormCount - 1 do begin
4152                 if TObject(Screen.CustomForms[i]) is TEditorForm then
4153                         TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
4154         end;
4155 end;
4156
4157 // *************************************************************************
4158 //! \83\8a\83\93\83N\97\9a\97ð\82ð\96ß\82é\82Ì\8dX\90V\8f\88\97\9d
4159 // *************************************************************************
4160 procedure TGikoDM.PrevMoveHistoryUpdate(Sender: TObject);
4161 begin
4162       PrevMoveHistory.Enabled :=
4163           (MoveHisotryManager.HisotryIndex > 0)
4164 end;
4165 // *************************************************************************
4166 //! \83\8a\83\93\83N\97\9a\97ð\82ð\96ß\82é
4167 // *************************************************************************
4168 procedure TGikoDM.PrevMoveHistoryExecute(Sender: TObject);
4169 begin
4170     if ( GikoForm.BrowserTab.TabIndex >= 0 ) then begin
4171         BackToHistory(MoveHisotryManager.getPrevItem
4172             (TBrowserRecord(GikoForm.BrowserTab.Tabs
4173                     .Objects[GikoForm.BrowserTab.TabIndex])));
4174     end else begin
4175         BackToHistory(MoveHisotryManager.getPrevItem( nil ) );
4176     end;
4177 end;
4178 //! \83\8a\83\93\83N\97\9a\97ð\8f\88\97\9d
4179 procedure TGikoDM.BackToHistory(item: TMoveHistoryItem);
4180 var
4181     browser : TWebBrowser;
4182     doc : IHTMLDocument2;
4183 begin
4184     if ( item <> nil ) then begin
4185         if ( GikoForm.GetActiveContent = item.ThreadItem ) then begin
4186             browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4187                 .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4188             if (browser <> nil) then begin
4189                 try
4190                     doc := browser.ControlInterface.Document as IHTMLDocument2;
4191                     (doc.body as IHTMLElement2).ScrollTop := item.ScrollTop;
4192                 except
4193                 end;
4194             end;
4195         end else begin
4196             //URL\82É\88Ú\93®
4197             MoveURLWithHistory(item.ThreadItem.URL, True);
4198         end;
4199     end;
4200 end;
4201 //! \97\9a\97ð\8f\88\97\9d\82Â\82«URL\88Ú\93®
4202 procedure TGikoDM.MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
4203 var
4204     idx : Integer;
4205 begin
4206     //URL\82É\88Ú\93®
4207     GikoForm.MoveToURL(URL, KeyMask);
4208     //\88È\89º\81A\97\9a\97ð\82Ì\8f\88\97\9d
4209     idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
4210     if idx = -1 then begin
4211         GikoForm.AddressComboBox.Items.Insert(0, URL);
4212         if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
4213             GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
4214     end else begin
4215         GikoForm.AddressComboBox.Items.Delete(idx);
4216         GikoForm.AddressComboBox.Items.Insert(0, URL);
4217     end;
4218 end;
4219 // *************************************************************************
4220 //! \83\8a\83\93\83N\97\9a\97ð\82ð\90i\82Þ\82Ì\8dX\90V\8f\88\97\9d
4221 // *************************************************************************
4222 procedure TGikoDM.NextMoveHistoryUpdate(Sender: TObject);
4223 begin
4224     NextMoveHistory.Enabled :=
4225           (MoveHisotryManager.HisotryIndex < MoveHisotryManager.Count - 1);
4226 end;
4227 // *************************************************************************
4228 //! \83\8a\83\93\83N\97\9a\97ð\82ð\90i\82Þ
4229 // *************************************************************************
4230 procedure TGikoDM.NextMoveHistoryExecute(Sender: TObject);
4231 begin
4232     BackToHistory(MoveHisotryManager.getNextItem);
4233 end;
4234 // *************************************************************************
4235 //! \83A\83N\83e\83B\83u\97v\91f\82Ì\83N\83\8a\83b\83N
4236 // *************************************************************************
4237 procedure TGikoDM.ClickActiveElementActionExecute(Sender: TObject);
4238 var
4239     browser : TWebBrowser;
4240     elem : IHTMLElement;
4241     doc : IHTMLDocument2;
4242 begin
4243     if (GikoForm.GetActiveContent <> nil) then begin
4244         if (GikoForm.BrowserTab.Tabs.Count > 0) and
4245             (GikoForm.BrowserTab.TabIndex >= 0) then begin
4246             browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4247                 .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4248             if (browser <> nil) then begin
4249                 try
4250                     doc := browser.ControlInterface.Document as IHTMLDocument2;
4251                     if Assigned(doc) then begin
4252                         elem := doc.activeElement;
4253                         if Assigned(elem) then begin
4254                             elem.click;
4255                         end;
4256                     end;
4257                 except
4258                 end;
4259             end;
4260
4261         end;
4262     end;
4263 end;
4264 //! \81«\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
4265 procedure TGikoDM.VKDownActionExecute(Sender: TObject);
4266 begin
4267     keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
4268     keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4269 end;
4270 //! \81ª\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
4271 procedure TGikoDM.VKUpActionExecute(Sender: TObject);
4272 begin
4273     keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
4274     keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4275 end;
4276 //! \81¨\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
4277 procedure TGikoDM.VKRightActionExecute(Sender: TObject);
4278 begin
4279     keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4280     keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4281 end;
4282 //! \81©\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
4283 procedure TGikoDM.VKLeftActionExecute(Sender: TObject);
4284 begin
4285     keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
4286     keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
4287 end;
4288 //! \83^\83X\83N\83g\83\8c\83C\82É\8ai\94[\82·\82é
4289 procedure TGikoDM.StoredTaskTrayActionExecute(Sender: TObject);
4290 begin
4291     GikoForm.StoredTaskTray;
4292     StoredTaskTrayAction.Tag := -1;
4293 end;
4294
4295 {
4296 \breif  \83\8a\83\93\83N\83C\83\81\81[\83W\8eæ\93¾
4297 \83C\83\81\81[\83W\82Í\81C*.jpg, *.jpeg, *.gif, *.png
4298 }
4299 procedure TGikoDM.AllImageLinkToClipbordActionExecute(Sender: TObject);
4300 var
4301     links : IHTMLElementCollection;
4302     urls, exts : TStringList;
4303 begin
4304     links := GetActiveThreadLinks;
4305     if (links <> nil) then begin
4306         urls := TStringList.Create;
4307         exts := TStringList.Create;
4308         try
4309             exts.CaseSensitive := False;
4310             exts.Sorted := True;
4311             exts.Delimiter := ';';
4312             exts.DelimitedText := '.gif;.jpg;.jpeg;.png';
4313             GetLinkURLs(links, urls, 0, exts);
4314             Clipboard.SetTextBuf(urls.GetText);
4315         finally
4316             exts.Free;
4317             urls.Free;
4318         end;
4319     end;
4320 end;
4321
4322 {
4323 \breif  \90V\92\85\83\8c\83X\82Ì\83\8a\83\93\83N\83C\83\81\81[\83W\8eæ\93¾
4324 \83C\83\81\81[\83W\82Í\81C*.jpg, *.jpeg, *.gif, *.png
4325 }
4326 procedure TGikoDM.NewImageLinkToClipBoardActionExecute(Sender: TObject);
4327 var
4328     links : IHTMLElementCollection;
4329     urls, exts : TStringList;
4330     ThreadItem : TThreadItem;
4331 begin
4332     ThreadItem := GikoForm.GetActiveContent;
4333     links := GetActiveThreadLinks;
4334     if (ThreadItem <> nil) and (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 := '.gif;.jpg;.jpeg;.png';
4342
4343             GetLinkURLs(links, urls,
4344                 (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
4345             Clipboard.SetTextBuf(urls.GetText);
4346         finally
4347             exts.Free;
4348             urls.Free;
4349         end;
4350     end;
4351 end;
4352 {
4353 \breif  \83\8a\83\93\83NURL\8eæ\93¾
4354 \91Î\8fÛ\8ag\92£\8eq\82Í\81A\8fÚ\8d×\90Ý\92è\82Å\90Ý\92è\82³\82ê\82Ä\82¢\82é
4355 }
4356 procedure TGikoDM.AllLinkToClipboardActionExecute(Sender: TObject);
4357 var
4358     links : IHTMLElementCollection;
4359     urls, exts : TStringList;
4360 begin
4361     links := GetActiveThreadLinks;
4362     if (links <> nil) then begin
4363         urls := TStringList.Create;
4364         exts := TStringList.Create;
4365         try
4366             exts.CaseSensitive := False;
4367             exts.Sorted := True;
4368             exts.Delimiter := ';';
4369             exts.DelimitedText :=
4370                 MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
4371             GetLinkURLs(links, urls, 0, exts);
4372             Clipboard.SetTextBuf(urls.GetText);
4373         finally
4374             exts.Free;
4375             urls.Free;
4376         end;
4377     end;
4378 end;
4379 {
4380 \breif  \90V\92\85\83\8c\83X\83\8a\83\93\83NURL\8eæ\93¾
4381 \91Î\8fÛ\8ag\92£\8eq\82Í\81A\8fÚ\8d×\90Ý\92è\82Å\90Ý\92è\82³\82ê\82Ä\82¢\82é
4382 }
4383 procedure TGikoDM.NewLinkToClipboardActionExecute(Sender: TObject);
4384 var
4385     links : IHTMLElementCollection;
4386     urls, exts : TStringList;
4387     ThreadItem : TThreadItem;
4388 begin
4389     ThreadItem := GikoForm.GetActiveContent;
4390     links := GetActiveThreadLinks;
4391     if (ThreadItem <> nil) and (links <> nil) then begin
4392         urls := TStringList.Create;
4393         exts := TStringList.Create;
4394         try
4395             exts.CaseSensitive := False;
4396             exts.Sorted := True;
4397             exts.Delimiter := ';';
4398             exts.DelimitedText :=
4399                 MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
4400             GetLinkURLs(links, urls,
4401                 (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
4402             Clipboard.SetTextBuf(urls.GetText);
4403         finally
4404             exts.Free;
4405             urls.Free;
4406         end;
4407     end;
4408 end;
4409
4410 {
4411 \brief  \8c»\8dÝ\95\\8e¦\82µ\82Ä\82¢\82é\83X\83\8c\83b\83h\82Ì\82·\82×\82Ä\82Ì\83\8a\83\93\83N\82ð\8eæ\93¾\82·\82é\81B
4412 \return IHTMLElementCollection  \83\8a\83\93\83N\82Ì\83R\83\8c\83N\83V\83\87\83\93
4413 }
4414 function TGikoDM.GetActiveThreadLinks : IHTMLElementCollection;
4415 var
4416     browser : TWebBrowser;
4417     doc : IHTMLDocument2;
4418 begin
4419     Result := nil;
4420     if (GikoForm.GetActiveContent <> nil) then begin
4421         if (GikoForm.BrowserTab.Tabs.Count > 0) and
4422             (GikoForm.BrowserTab.TabIndex >= 0) then begin
4423             browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
4424                 .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
4425             if (browser <> nil) then begin
4426                 try
4427                     doc := browser.ControlInterface.Document as IHTMLDocument2;
4428                     if Assigned(doc) then begin
4429                         Result := doc.links;
4430                     end;
4431                 except
4432                     Result := nil;
4433                 end;
4434             end;
4435
4436         end;
4437     end;
4438 end;
4439 {
4440 \brief  \83\8a\83\93\83N\82ÌURL\82ð\8eæ\93¾\82·\82é
4441 \param  links   \8eæ\93¾\82·\82é\83\8a\83\93\83N\82Ì\91S\91Ì\82Ì\83R\83\8c\83N\83V\83\87\83\93
4442 \param  URLs    \8eæ\93¾\82µ\82½URL\82Ì\95Û\91\90æ
4443 \param  Start   \90Ý\92è\82µ\82½\83\8c\83X\94Ô\8d\86\88È\8d~\82ð\8eæ\93¾( > 0)
4444 \param  Exts    \8eæ\93¾\82·\82é\83\8a\83\93\83N\82Ì\8ag\92£\8eq
4445 }
4446 procedure TGikoDM.GetLinkURLs(links : IHTMLElementCollection;
4447         URLs : TStringList; const Start: Integer; Exts : TStringList);
4448 var
4449     index ,i, j : Integer;
4450     item : IHTMLElement;
4451     url, ext : string;
4452 begin
4453     if (links <> nil) then begin
4454         index := 0;
4455         for i := 0 to links.length - 1 do begin
4456             item := links.item(i, 0) as IHTMLElement;
4457             if (item <> nil) then begin
4458                 url := item.getAttribute('href', 0);
4459                 // \83\8c\83X\82Ì\94Ô\8d\86\82ð\8dX\90V
4460                 if (Pos('menu:', url) > 0) then begin
4461                     index := StrToInt64Def(
4462                         Copy(url, 6, Length(url)), index + 1
4463                     );
4464                 end else begin
4465                     // \8aJ\8en\83\8c\83X\94Ô\8d\86\88È\8d~\82©\83`\83F\83b\83N
4466                     if (index >= Start) then begin
4467                         ext := ExtractFileExt( AnsiLowerCase(url) );
4468                         // \8ag\92£\8eq\82ð\83`\83F\83b\83N
4469                         if Exts.Find(ext, j) then begin
4470                             urls.Add(url)
4471                         end;
4472                     end;
4473                 end;
4474             end;
4475         end;
4476     end;
4477 end;
4478 {
4479 \brief  \83A\83h\83\8c\83X\83o\81[\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
4480 \param  Sender   \83C\83x\83\93\83g\82Ì\94­\90\8c³
4481 }
4482 procedure TGikoDM.SetForcusForAddresBarActionExecute(Sender: TObject);
4483 begin
4484     if ( GikoForm.AddressToolBar.Visible ) then begin
4485         GikoForm.AddressComboBox.SetFocus;
4486     end
4487 end;
4488 {
4489 \brief  \88Ú\93]\82µ\82½\94Â\82ÌURL\82ð\8eæ\93¾\82·\82é\83_\83C\83A\83O\83\89\83\80\82ð\95\\8e¦\82·\82é
4490 }
4491 procedure TGikoDM.NewBoardSearchActionExecute(Sender: TObject);
4492 var
4493     form : TNewBoardURLForm;
4494         Msg: string;
4495 begin
4496         if (EditorFormExists) then begin
4497                 Msg := '\83\8c\83X\83G\83f\83B\83^\82ð\91S\82Ä\95Â\82\82Ä\82­\82¾\82³\82¢';
4498                 MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4499                 Exit;
4500         end;
4501     form := TNewBoardURLForm.Create(Self);
4502     try
4503         form.ShowModal;
4504     finally
4505         form.Release;
4506     end;
4507 end;
4508 //! \83u\83\89\83E\83U\82ð1\83y\81[\83W\95ª\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
4509 procedure TGikoDM.ScrollPageDownActionExecute(Sender: TObject);
4510 begin
4511     GikoForm.BrowserMovement(GikoForm.BrowserPanel.Height);
4512 end;
4513 //! \83u\83\89\83E\83U\82ð1\83y\81[\83W\95ª\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
4514 procedure TGikoDM.ScrollPageUpActionExecute(Sender: TObject);
4515 begin
4516     GikoForm.BrowserMovement(-GikoForm.BrowserPanel.Height);
4517 end;
4518
4519
4520 //! \82±\82Ì\83\8c\83X\82ÌID\82ðNG\83\8f\81[\83h\82É\92Ç\89Á\82·\82é\81i\93§\96¾)
4521 procedure TGikoDM.AddIDtoNGWord0ActionExecute(Sender: TObject);
4522 begin
4523     GikoForm.AddIDtoNGWord(true);
4524 end;
4525 //! \82±\82Ì\83\8c\83X\82ÌID\82ðNG\83\8f\81[\83h\82É\92Ç\89Á\82·\82é
4526 procedure TGikoDM.AddIDtoNGWord1ActionExecute(Sender: TObject);
4527 begin
4528     GikoForm.AddIDtoNGWord(false);
4529 end;
4530 //! \83N\83\8a\83b\83v\83{\81[\83h\82Ì\95\8e\9a\97ñ\82ðID\82Æ\82µ\82Ä\93¯\88êID\83\8c\83X\83A\83\93\83J\81[\95\\8e¦
4531 procedure TGikoDM.ExtractSameIDActionExecute(Sender: TObject);
4532 var
4533     ID: String;
4534 begin
4535     ID := Trim(Clipboard.AsText);
4536     if (Length(ID) > 0) then begin
4537         if not IsNoValidID(ID) then begin
4538             GikoForm.ShowSameIDAncher(ID);
4539         end;
4540     end;
4541 end;
4542 //! \83^\83u\82Ì\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦\82·\82é
4543 procedure TGikoDM.ShowTabListActionExecute(Sender: TObject);
4544 var
4545     i : Integer;
4546 begin
4547     GikoForm.ListView.Items.BeginUpdate;
4548     GikoForm.ListView.Items.Clear;
4549     BoardGroup.SpecialBoard.Clear;
4550         for i := GikoForm.BrowserTab.Tabs.Count - 1 downto 0 do begin
4551         BoardGroup.SpecialBoard.Add(
4552                 TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Thread);
4553         end;
4554     GikoForm.ListView.Items.EndUpdate;
4555     GikoForm.SetActiveList(BoardGroup.SpecialBoard);
4556 end;
4557 //! \8bt\8eQ\8fÆ\82µ\82Ä\82¢\82é\83\8c\83X\82ð\92Ç\89Á\82·\82é
4558 procedure TGikoDM.DereferenceResActionExecute(Sender: TObject);
4559 var
4560         i, currentNo, No : Integer;
4561     links : IHTMLElementCollection;
4562     threadItem : TThreadItem;
4563     item : IHTMLElement;
4564     url, url2 : string;
4565     resNo : TStringList;
4566     alreadyExist : Boolean;
4567         PathRec: TPathRec;
4568 begin
4569         No := GikoForm.KokoPopupMenu.Tag;
4570         if No = 0 then Exit;
4571
4572     ThreadItem := GikoForm.KokoPopupThreadItem;
4573     // \83A\83N\83e\83B\83u\83^\83u\82©\82ç\91S\82Ä\82Ì\83\8a\83\93\83N\82ð\8eæ\93¾\82·\82é
4574     links := GetActiveThreadLinks;
4575     if (ThreadItem <> nil) and (links <> nil) then begin
4576         resNo := TStringList.Create;
4577         try
4578             currentNo := 0;
4579             alreadyExist := False;
4580             // \83\8a\83\93\83N\82ð\91S\82Ä\91\96\8d¸\82·\82é
4581             for i := 0 to links.length - 1 do begin
4582                 item := links.item(i, 0) as IHTMLElement;
4583                 if (item <> nil) then begin
4584                     url := item.getAttribute('href', 0);
4585                     // \83\8c\83X\82Ì\94Ô\8d\86\82ð\8dX\90V
4586                     if (Pos('menu:', url) > 0) then begin
4587                         currentNo := StrToInt64Def(
4588                             Copy(url, 6, Length(url)), currentNo + 1
4589                         );
4590                         alreadyExist := False;
4591                     end else if (currentNo <> -1) and (not alreadyExist) then begin
4592                         // IE7\91Î\89\9e
4593                         if Pos('about:..', url) = 1 then begin
4594                             url := 'about:blank..' + Copy( url, Length('about:..')+1, Length(url) )
4595                         end;
4596                         // \8e©\95ª\82Ö\82Ì\83\8a\83\93\83N\82©\82ç\83\8c\83X\83|\83b\83v\97p\82Ì\94Ô\8d\86\8eæ\93¾
4597                         if Pos('about:blank..', url) = 1 then begin
4598                             // No \94Ô\82Ö\82Ì\83\8a\83\93\83N\82ª\82 \82ê\82Î\8eQ\8fÆ\82 \82è
4599                             url2 := THTMLCreate.GetRespopupURL(url, ThreadItem.URL);
4600                                         PathRec := Gikosys.Parse2chURL2(url2);
4601                             if (not PathRec.FNoParam) then begin
4602                                 Gikosys.GetPopupResNumber(url2,PathRec.FSt,PathRec.FTo);
4603                                         end;
4604                             // \91Î\8fÛ\83\8c\83X\82à\82µ\82­\82Í\82»\82ê\82ð\8aÜ\82Þ\82È\82ç\8eQ\8fÆ\82 \82è\82Æ\82·\82é
4605                             if (PathRec.FSt = No) or
4606                                 ((PathRec.FSt <= No) and (PathRec.FTo >= No))  then begin
4607                                 alreadyExist := True;
4608                                 resNo.Add(IntToStr(currentNo));
4609                             end;
4610                         end;
4611                     end;
4612                 end;
4613             end;
4614             // \96³\90§\8cÀ\82È\82Ì\82Å-1\8cÅ\92è
4615             GikoForm.ActiveContent.IDAnchorPopup(
4616                 GikoSys.CreateResAnchor(resNo, ThreadItem, -1));
4617         finally
4618             resNo.Clear;
4619             resNo.Free;
4620         end;
4621     end;
4622 end;
4623
4624 procedure TGikoDM.UpdateGikonaviActionExecute(Sender: TObject);
4625 var
4626     form : TUpdateCheckForm;
4627         Msg: string;
4628     shutdown: boolean;
4629 begin
4630         if (EditorFormExists) then begin
4631                 Msg := '\83\8c\83X\83G\83f\83B\83^\82ð\91S\82Ä\95Â\82\82Ä\82­\82¾\82³\82¢';
4632                 MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
4633                 Exit;
4634         end;
4635     GikoForm.UpdateExePath := '';
4636     GikoForm.UpdateExeArgs := '';
4637     form := TUpdateCheckForm.Create(GikoForm);
4638     try
4639         form.ShowModal;
4640         shutdown := form.Allowshutdown;
4641         if shutdown then begin
4642             GikoForm.UpdateExePath := form.ExecPath;
4643             GikoForm.UpdateExeArgs := form.ExecArgs;
4644         end;
4645     finally
4646         form.Release;
4647     end;
4648     if shutdown then begin
4649         // \83M\83R\83i\83r\8fI\97¹
4650         GikoForm.Close;
4651     end;
4652
4653 end;
4654 //! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iPATH_INFO)
4655 procedure TGikoDM.konoURLPATHActionExecute(Sender: TObject);
4656 var
4657     No : Integer;
4658     ThreadItem : TThreadItem;
4659     URL, Protocol, Host, Path, Document, Port, Bookmark : String;
4660 begin
4661         No := GikoForm.KokoPopupMenu.Tag;
4662         if No = 0 then Exit;
4663
4664     ThreadItem := GikoForm.KokoPopupThreadItem;
4665     if (ThreadItem.ParentBoard.Is2ch) or not (Pos('?', ThreadItem.URL) > 0) then begin
4666         GikoSys.ParseURI(ThreadItem.URL,Protocol, Host, Path, Document, Port, Bookmark);
4667         URL := Protocol + '://' + Host + Path + IntToStr(No);
4668     end else begin
4669         if Pos('?', ThreadItem.URL) > 0 then begin
4670             URL := Copy(ThreadItem.URL, 1, Pos('?', ThreadItem.URL)-1);
4671             // \82Ü\82¿BBS\97p\8f\88\92u
4672             URL := MojuUtils.CustomStringReplace(URL, 'read.pl', 'read.cgi');
4673             URL := URL + '/' + ThreadItem.ParentBoard.BBSID + '/' + ChangeFileExt(ThreadItem.FileName, '')  + '/' + IntToStr(No);
4674         end;
4675     end;
4676     Clipboard.SetTextBuf( PChar(URL) );
4677 end;
4678 //! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iQuery_STRING)
4679 procedure TGikoDM.konoURLQueryActionExecute(Sender: TObject);
4680 var
4681     No : Integer;
4682     ThreadItem : TThreadItem;
4683     URL, Protocol, Host, Path, Document, Port, Bookmark : String;
4684 begin
4685         No := GikoForm.KokoPopupMenu.Tag;
4686         if No = 0 then Exit;
4687
4688     ThreadItem := GikoForm.KokoPopupThreadItem;
4689     // 2ch\82Æ\82µ\82½\82ç\82Î\82Í\81A\83\8c\83X\94Ô\8d\86\82ð\82¤\82Ü\82­\8f\88\97\9d\82µ\82Ä\82­\82ê\82È\82¢\82Ì\82Å\97\98\97p\95s\89Â
4690     if ThreadItem.ParentBoard.Is2ch or not (Pos('?', ThreadItem.URL) > 0) then begin
4691         GikoSys.ParseURI(ThreadItem.URL, Protocol, Host, Path, Document, Port, Bookmark);
4692         URL := Protocol + '://' + Host + '/test/read.cgi?bbs=' + ThreadItem.ParentBoard.BBSID
4693             + '&key=' + ChangeFileExt(ThreadItem.FileName, '') + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
4694     end else begin
4695         URL := ThreadItem.URL;
4696         // \82Ü\82¿BBS
4697         if Pos('&LAST=', URL) > 0 then begin
4698             URL := Copy(URL, 1, Pos('&LAST=', URL) - 1);
4699             URL := URL + '&START=' + IntToStr(No) + '&END=' + IntToStr(No);
4700         end;
4701         // \82»\82Ì\91¼\8aO\95\94\94Â
4702         if Pos('&ls=', URL) > 0 then begin
4703             URL := Copy(URL, 1, Pos('&ls=', URL) - 1);
4704             URL := URL + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
4705         end;
4706
4707     end;
4708     Clipboard.SetTextBuf( PChar(URL) );
4709 end;
4710 //! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iQuery_STRING\81j\82Ì\97\98\97p\83`\83F\83b\83N
4711 procedure TGikoDM.konoURLQueryActionUpdate(Sender: TObject);
4712 const
4713         LIVEDOOR_URL = 'http://jbbs.shitaraba.net/';
4714 begin
4715     // 2ch\82Æ\82µ\82½\82ç\82Î\82Í\97\98\97p\82Å\82«\82È\82¢\82æ\82¤\82É\82·\82é\81i\82¤\82Ü\82­\83\8c\83X\8ew\92è\82Å\82«\82È\82¢\82Ì\82Å\81j
4716     konoURLQueryAction.Enabled := false;
4717     if (GikoForm.KokoPopupThreadItem <> nil) then begin
4718         konoURLQueryAction.Enabled := not GikoForm.KokoPopupThreadItem.ParentBoard.Is2ch;
4719         if konoURLQueryAction.Enabled then begin
4720             konoURLQueryAction.Enabled := not (Pos(LIVEDOOR_URL, GikoForm.KokoPopupThreadItem.URL) = 1);
4721         end;
4722     end;
4723 end;
4724 //! \83|\83b\83v\83A\83b\83v\83\81\83j\83\85\81[\90Ý\92è\83_\83C\83A\83\8d\83O\82ð\8aJ\82­
4725 procedure TGikoDM.PopupMenuSettingActionExecute(Sender: TObject);
4726 var
4727         Dlg: TPopupMenuSettingDialog;
4728 begin
4729         Dlg := TPopupMenuSettingDialog.Create(GikoForm, GikoFormActionList);
4730         try
4731                 Dlg.ShowModal;
4732         finally
4733                 Dlg.Release;
4734         end;
4735 end;
4736
4737 procedure TGikoDM.ThreadSearchActionExecute(Sender: TObject);
4738 begin
4739     if (ThreadSrch <> nil) and (ThreadSrch.Visible = False) then begin
4740         ThreadSrch.Free;
4741         ThreadSrch := nil;
4742     end;
4743     if (ThreadSrch = nil) then begin
4744         ThreadSrch := TThreadSrch.Create(GikoForm);
4745     end;
4746     ThreadSrch.Show;
4747 end;
4748
4749 procedure TGikoDM.SaveThreadSearchSetting;
4750 begin
4751     if (ThreadSrch <> nil) and (ThreadSrch.Visible = True) then
4752         ThreadSrch.SaveSetting;
4753 end;
4754
4755 procedure TGikoDM.ThreadNgEditActionExecute(Sender: TObject);
4756 begin
4757     ThreadNGEdit := TThreadNGEdit.Create(GikoForm);
4758     if (ThreadNGEdit.ShowModal = mrOk) then begin
4759         GikoForm.ListView.Refresh;
4760     end;
4761     ThreadNGEdit.Free;
4762     ThreadNGEdit := nil;
4763 end;
4764
4765 end.
4766