+// *************************************************************************
+//! \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é
+// *************************************************************************
+procedure TGikoDM.ClearMailAllEditor();
+var
+ i : Integer;
+begin
+ for i := 0 to Screen.CustomFormCount - 1 do begin
+ if TObject(Screen.CustomForms[i]) is TEditorForm then
+ TEditorForm(Screen.CustomForms[i]).MailComboBox.Items.Clear;
+ end;
+end;
+
+// *************************************************************************
+//! \83\8a\83\93\83N\97\9a\97ð\82ð\96ß\82é\82Ì\8dX\90V\8f\88\97\9d
+// *************************************************************************
+procedure TGikoDM.PrevMoveHistoryUpdate(Sender: TObject);
+begin
+ PrevMoveHistory.Enabled :=
+ (MoveHisotryManager.HisotryIndex > 0)
+end;
+// *************************************************************************
+//! \83\8a\83\93\83N\97\9a\97ð\82ð\96ß\82é
+// *************************************************************************
+procedure TGikoDM.PrevMoveHistoryExecute(Sender: TObject);
+begin
+ if ( GikoForm.BrowserTab.TabIndex >= 0 ) then begin
+ BackToHistory(MoveHisotryManager.getPrevItem
+ (TBrowserRecord(GikoForm.BrowserTab.Tabs
+ .Objects[GikoForm.BrowserTab.TabIndex])));
+ end else begin
+ BackToHistory(MoveHisotryManager.getPrevItem( nil ) );
+ end;
+end;
+//! \83\8a\83\93\83N\97\9a\97ð\8f\88\97\9d
+procedure TGikoDM.BackToHistory(item: TMoveHistoryItem);
+var
+ browser : TWebBrowser;
+ doc : OleVariant;
+begin
+ if ( item <> nil ) then begin
+ if ( GikoForm.GetActiveContent = item.ThreadItem ) then begin
+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
+ if (browser <> nil) then begin
+ try
+ doc := Idispatch( olevariant(browser.ControlInterface).Document) as IHTMLDocument2;
+ doc.Body.ScrollTop := item.ScrollTop;
+ except
+ end;
+ end;
+ end else begin
+ //URL\82É\88Ú\93®
+ MoveURLWithHistory(item.ThreadItem.URL);
+ end;
+ end;
+end;
+//! \97\9a\97ð\8f\88\97\9d\82Â\82«URL\88Ú\93®
+procedure TGikoDM.MoveURLWithHistory(URL : String);
+var
+ idx : Integer;
+begin
+ //URL\82É\88Ú\93®
+ GikoForm.MoveToURL(URL);
+ //\88È\89º\81A\97\9a\97ð\82Ì\8f\88\97\9d
+ idx := GikoForm.AddressComboBox.Items.IndexOf(URL);
+ if idx = -1 then begin
+ GikoForm.AddressComboBox.Items.Insert(0, URL);
+ if GikoForm.AddressComboBox.Items.Count > GikoSys.Setting.AddressHistoryCount then
+ GikoForm.AddressComboBox.Items.Delete(GikoForm.AddressComboBox.Items.Count - 1);
+ end else begin
+ GikoForm.AddressComboBox.Items.Delete(idx);
+ GikoForm.AddressComboBox.Items.Insert(0, URL);
+ end;
+end;
+// *************************************************************************
+//! \83\8a\83\93\83N\97\9a\97ð\82ð\90i\82Þ\82Ì\8dX\90V\8f\88\97\9d
+// *************************************************************************
+procedure TGikoDM.NextMoveHistoryUpdate(Sender: TObject);
+begin
+ NextMoveHistory.Enabled :=
+ (MoveHisotryManager.HisotryIndex < MoveHisotryManager.Count - 1);
+end;
+// *************************************************************************
+//! \83\8a\83\93\83N\97\9a\97ð\82ð\90i\82Þ
+// *************************************************************************
+procedure TGikoDM.NextMoveHistoryExecute(Sender: TObject);
+begin
+ BackToHistory(MoveHisotryManager.getNextItem);
+end;
+// *************************************************************************
+//! \83A\83N\83e\83B\83u\97v\91f\82Ì\83N\83\8a\83b\83N
+// *************************************************************************
+procedure TGikoDM.ClickActiveElementActionExecute(Sender: TObject);
+var
+ browser : TWebBrowser;
+ elem : IHTMLElement;
+begin
+ if (GikoForm.GetActiveContent <> nil) then begin
+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
+ if (browser <> nil) then begin
+ try
+ elem := IHTMLDocument2(browser.Document).activeElement;
+ elem.click;
+ except
+ end;
+ end;
+
+ end;
+ end;
+end;
+//! \81«\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
+procedure TGikoDM.VKDownActionExecute(Sender: TObject);
+begin
+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY, 0);
+ keybd_event(VK_DOWN, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
+end;
+//! \81ª\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
+procedure TGikoDM.VKUpActionExecute(Sender: TObject);
+begin
+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY, 0);
+ keybd_event(VK_UP, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
+end;
+//! \81¨\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
+procedure TGikoDM.VKRightActionExecute(Sender: TObject);
+begin
+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY, 0);
+ keybd_event(VK_RIGHT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
+end;
+//! \81©\83L\81[\82Ì\83G\83~\83\85\83\8c\81[\83g\83A\83N\83V\83\87\83\93
+procedure TGikoDM.VKLeftActionExecute(Sender: TObject);
+begin
+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY, 0);
+ keybd_event(VK_LEFT, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
+end;
+//! \83^\83X\83N\83g\83\8c\83C\82É\8ai\94[\82·\82é
+procedure TGikoDM.StoredTaskTrayActionExecute(Sender: TObject);
+begin
+ GikoForm.StoredTaskTray;
+ StoredTaskTrayAction.Tag := -1;
+end;
+
+{
+\breif \83\8a\83\93\83N\83C\83\81\81[\83W\8eæ\93¾
+\83C\83\81\81[\83W\82Í\81C*.jpg, *.jpeg, *.gif, *.png
+}
+procedure TGikoDM.AllImageLinkToClipbordActionExecute(Sender: TObject);
+var
+ links : IHTMLElementCollection;
+ urls : TStringList;
+begin
+ links := GetActiveThreadLinks;
+ if (links <> nil) then begin
+ urls := TStringList.Create;
+ try
+ GetImageLinkURLs(links, urls, 0);
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ urls.Free;
+ end;
+ end;
+end;
+
+{
+\breif \90V\92\85\83\8c\83X\82Ì\83\8a\83\93\83N\83C\83\81\81[\83W\8eæ\93¾
+\83C\83\81\81[\83W\82Í\81C*.jpg, *.jpeg, *.gif, *.png
+}
+procedure TGikoDM.NewImageLinkToClipBoardActionExecute(Sender: TObject);
+var
+ links : IHTMLElementCollection;
+ urls : TStringList;
+ ThreadItem : TThreadItem;
+begin
+ ThreadItem := GikoForm.GetActiveContent;
+ links := GetActiveThreadLinks;
+ if (ThreadItem <> nil) and (links <> nil) then begin
+ urls := TStringList.Create;
+ try
+ GetImageLinkURLs(links, urls,
+ (ThreadItem.Count - ThreadItem.NewResCount + 1) );
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ urls.Free;
+ end;
+ end;
+end;
+{
+\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
+\return IHTMLElementCollection \83\8a\83\93\83N\82Ì\83R\83\8c\83N\83V\83\87\83\93
+}
+function TGikoDM.GetActiveThreadLinks : IHTMLElementCollection;
+var
+ browser : TWebBrowser;
+begin
+ Result := nil;
+ if (GikoForm.GetActiveContent <> nil) then begin
+ if (GikoForm.BrowserTab.Tabs.Count > 0) and
+ (GikoForm.BrowserTab.TabIndex >= 0) then begin
+ browser := TBrowserRecord(GikoForm.BrowserTab.Tabs
+ .Objects[GikoForm.BrowserTab.TabIndex]).Browser;
+ if (browser <> nil) then begin
+ try
+ Result := IHTMLDocument2(browser.Document).links;
+ except
+ Result := nil;
+ end;
+ end;
+
+ end;
+ end;
+end;
+{
+\brief \83C\83\81\81[\83W\82Ö\82Ì\83\8a\83\93\83N\82ÌURL\82ð\8eæ\93¾\82·\82é
+\param links \8eæ\93¾\82·\82é\83\8a\83\93\83N\82Ì\91S\91Ì\82Ì\83R\83\8c\83N\83V\83\87\83\93
+\param URLs \8eæ\93¾\82µ\82½URL\82Ì\95Û\91¶\90æ
+\param Start \90Ý\92è\82µ\82½\83\8c\83X\94Ô\8d\86\88È\8d~\82ð\8eæ\93¾( > 0)
+}
+procedure TGikoDM.GetImageLinkURLs(links : IHTMLElementCollection;
+ URLs : TStringList; const Start: Integer);
+var
+ index ,i : Integer;
+ item : IHTMLElement;
+ url, ext : string;
+begin
+ if (links <> nil) then begin
+ index := 0;
+ for i := 0 to links.length - 1 do begin
+ item := links.item(i, 0) as IHTMLElement;
+ if (item <> nil) then begin
+ url := item.getAttribute('href', 0);
+ // \83\8c\83X\82Ì\94Ô\8d\86\82ð\8dX\90V
+ if (Pos('menu:', url) > 0) then begin
+ index := StrToInt64Def(
+ Copy(url, 5, Length(url)), index + 1
+ );
+ end else begin
+ // \8aJ\8en\83\8c\83X\94Ô\8d\86\88È\8d~\82©\83`\83F\83b\83N
+ if (index >= Start) then begin
+ ext := ExtractFileExt( AnsiLowerCase(url) );
+ // jpg,jpeg,gif,png\82ð\83`\83F\83b\83N
+ if (ext = '.jpg') or (ext = '.jpeg') or
+ (ext = '.gif') or (ext = '.png') then begin
+ urls.Add(url)
+ end;
+ end;
+ end;
+ end;
+ end;
+ end;
+end;