OSDN Git Service

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