+//! \83X\83\8c\83b\83h\82Ì\83T\83C\83Y\82ð\8dÄ\8cv\8eZ\82·\82é
+procedure TGikoDM.ThreadSizeCalcForFileActionExecute(Sender: TObject);
+const
+ 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 +
+ '\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' +
+ '\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';
+ RECALC_TITLE : String = '\83X\83\8c\83b\83h\82Ì\97e\97Ê\82ð\83t\83@\83C\83\8b\82©\82ç\8dÄ\8cv\8eZ';
+ LIMIT_SIZE = 1024;
+var
+ limitSize : Integer;
+ limitStr : String;
+begin
+{ \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Í
+ \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
+ \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õ
+ è\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
+ DAT\82Ì\83t\83@\83C\83\8b\83T\83C\83Y\82Å\8dX\90V\82·\82é
+}
+ if MsgBox(GikoForm.Handle, RECALC_MES,
+ RECALC_TITLE, MB_YESNO or MB_ICONWARNING) = ID_YES then begin
+ //è\87\92l\82Ì\8am\94F
+ limitSize := LIMIT_SIZE;
+ limitStr := IntToStr(limitSize);
+ 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
+ limitSize := StrToInt(MojuUtils.ZenToHan(limitStr));
+ if (limitSize < 0) then begin
+ ShowMessage('è\87\92l\82É\95\89\82Í\8ew\92è\82Å\82«\82Ü\82¹\82ñ\81I');
+ ThreadSizeCalcForFileActionExecute(nil);
+ end else begin
+ RecalcThreadSize(limitSize);
+ end;
+ end;
+ end;
+end;
+//! 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
+procedure TGikoDM.RecalcThreadSize(limit : Integer);
+var
+ i, j, tmpSize : Integer;
+ Obj : TObject;
+ Board : TBoard;
+ Thread: TThreadItem;
+ dat : TStringList;
+begin
+ // \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
+ GikoForm.ScreenCursor := crHourGlass;
+ try
+ GikoForm.ProgressBar.Max := BoardGroups[0].Count;
+ for i := 0 to BoardGroups[0].Count - 1 do begin
+ Obj := BoardGroups[0].Objects[i];
+ if (Obj <> nil) then begin
+ Board := TBoard(Obj);
+ if not Board.IsThreadDatRead then begin
+ GikoSys.ReadSubjectFile(Board);
+ end;
+ for j := 0 to Board.Count - 1 do begin
+ Thread := Board.Items[j];
+ if (Thread <> nil) and (Thread.IsLogFile)
+ and (Thread.Size <= limit) then begin
+ dat := TStringList.Create;
+ try
+ tmpSize := Thread.Size;
+ try
+ dat.LoadFromFile(Thread.GetThreadFileName);
+ tmpSize := Length(dat.Text);
+ tmpSize := tmpSize - dat.Count;
+ except
+ end;
+ Thread.Size := tmpSize;
+ finally
+ dat.Free;
+ end;
+ end;
+ end;
+ end;
+ GikoForm.ProgressBar.StepBy(1);
+ end;
+ finally
+ GikoForm.ScreenCursor := crDefault;
+ end;
+ GikoForm.ProgressBar.Position := 0;
+ ShowMessage('\8cv\8eZ\8fI\97¹\82µ\82Ü\82µ\82½\81B');
+end;
+// *************************************************************************
+//! \93ü\97Í\83A\83V\83X\83g\82Ì\90Ý\92è\83t\83H\81[\83\80\82ð\8cÄ\82Ñ\8fo\82·
+// *************************************************************************
+procedure TGikoDM.SetInputAssistActionExecute(Sender: TObject);
+var
+ form : TInputAssistForm;
+begin
+ form := TInputAssistForm.Create(GikoForm);
+ try
+ form.SetUpFromMain;
+ form.ShowModal;
+ finally
+ form.Release;
+ end;
+end;
+// *************************************************************************
+//! \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é
+// *************************************************************************
+procedure TGikoDM.OpenFindDialogActionExecute(Sender: TObject);
+begin
+ if( GikoForm.ActiveContent <> nil) and (GikoForm.ActiveContent.Browser <> nil) then begin
+ GikoForm.ActiveContent.OpenFindDialog;
+ end;
+end;
+
+// *************************************************************************
+//! \91I\91ð\82³\82ê\82Ä\82¢\82é\82¨\8bC\82É\93ü\82è\82Ì\95\\8e¦\96¼\82ð\83R\83s\81[\82·\82é
+// *************************************************************************
+procedure TGikoDM.FavoriteTreeViewItemNameCopyActionExecute(
+ Sender: TObject);
+begin
+ if GikoForm.ClickNode = nil then Exit;
+
+ Clipboard.AsText :=
+ GikoForm.ClickNode.Text + #13#10;
+end;
+
+// *************************************************************************
+//! \95\\8e¦\82³\82ê\82Ä\82¢\82é\82·\82×\82Ä\82Ì\83\8c\83X\83G\83f\83B\83^\82ð\95Â\82¶\82é
+// *************************************************************************
+procedure TGikoDM.CloseAllEditorActionExecute(Sender: TObject);
+var
+ i : Integer;
+begin
+ if ( EditorFormExists ) then begin
+ //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\95Â\82¶\82é
+ for i := Screen.CustomFormCount - 1 downto 0 do begin
+ if TObject(Screen.CustomForms[i]) is TEditorForm then begin
+ TEditorForm(Screen.CustomForms[i]).Close;
+ end;
+ end;
+ end;
+end;
+// *************************************************************************
+//! \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é
+// *************************************************************************
+procedure TGikoDM.CloseAllEditorActionUpdate(Sender: TObject);
+begin
+ if (Sender is TAction) then begin
+ TAction(Sender).Enabled := EditorFormExists;
+ end;
+end;
+// *************************************************************************
+//! \83X\83N\83\8a\81[\83\93\8fã\82ÉEditorForm\82ª\82¢\82é\82©
+// *************************************************************************
+function TGikoDM.EditorFormExists(): boolean;
+var
+ i : Integer;
+begin
+ Result := false;
+ //\83X\83N\83\8a\81[\83\93\8fã\82Ì\91S\82Ä\82Ì\83t\83H\81[\83\80\82©\82ç\81AEditorForm\82ð\92T\82·
+ for i := Screen.CustomFormCount - 1 downto 0 do begin
+ if (Screen.CustomForms[i] is TEditorForm) then begin
+ Result := true;
+ Break;
+ end;
+ end;
+end;
+
+// *************************************************************************
+//! \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é
+// *************************************************************************
+procedure TGikoDM.ClearNameTextAllEditor();
+var
+ i : Integer;
+begin
+ for i := 0 to Screen.CustomFormCount - 1 do begin
+ if (Screen.CustomForms[i] is TEditorForm) then begin
+ TEditorForm(Screen.CustomForms[i]).NameComboBox.Items.Clear;
+ end;
+ end;
+end;
+// *************************************************************************
+//! \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 : IHTMLDocument2;
+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 := browser.ControlInterface.Document as IHTMLDocument2;
+ (doc.body as IHTMLElement2).ScrollTop := item.ScrollTop;
+ except
+ end;
+ end;
+ end else begin
+ //URL\82É\88Ú\93®
+ MoveURLWithHistory(item.ThreadItem.URL, True);
+ end;
+ end;
+end;
+//! \97\9a\97ð\8f\88\97\9d\82Â\82«URL\88Ú\93®
+procedure TGikoDM.MoveURLWithHistory(URL : String; KeyMask: Boolean = False);
+var
+ idx : Integer;
+begin
+ //URL\82É\88Ú\93®
+ GikoForm.MoveToURL(URL, KeyMask);
+ //\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;
+ doc : IHTMLDocument2;
+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
+ doc := browser.ControlInterface.Document as IHTMLDocument2;
+ if Assigned(doc) then begin
+ elem := doc.activeElement;
+ if Assigned(elem) then begin
+ elem.click;
+ end;
+ end;
+ 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, exts : TStringList;
+begin
+ links := GetActiveThreadLinks;
+ if (links <> nil) then begin
+ urls := TStringList.Create;
+ exts := TStringList.Create;
+ try
+ exts.CaseSensitive := False;
+ exts.Sorted := True;
+ exts.Delimiter := ';';
+ exts.DelimitedText := '.gif;.jpg;.jpeg;.png';
+ GetLinkURLs(links, urls, 0, exts);
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ exts.Free;
+ 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, exts : TStringList;
+ ThreadItem : TThreadItem;
+begin
+ ThreadItem := GikoForm.GetActiveContent;
+ links := GetActiveThreadLinks;
+ if (ThreadItem <> nil) and (links <> nil) then begin
+ urls := TStringList.Create;
+ exts := TStringList.Create;
+ try
+ exts.CaseSensitive := False;
+ exts.Sorted := True;
+ exts.Delimiter := ';';
+ exts.DelimitedText := '.gif;.jpg;.jpeg;.png';
+
+ GetLinkURLs(links, urls,
+ (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ exts.Free;
+ urls.Free;
+ end;
+ end;
+end;
+{
+\breif \83\8a\83\93\83NURL\8eæ\93¾
+\91Î\8fÛ\8ag\92£\8eq\82Í\81A\8fÚ\8d×\90Ý\92è\82Å\90Ý\92è\82³\82ê\82Ä\82¢\82é
+}
+procedure TGikoDM.AllLinkToClipboardActionExecute(Sender: TObject);
+var
+ links : IHTMLElementCollection;
+ urls, exts : TStringList;
+begin
+ links := GetActiveThreadLinks;
+ if (links <> nil) then begin
+ urls := TStringList.Create;
+ exts := TStringList.Create;
+ try
+ exts.CaseSensitive := False;
+ exts.Sorted := True;
+ exts.Delimiter := ';';
+ exts.DelimitedText :=
+ MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
+ GetLinkURLs(links, urls, 0, exts);
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ exts.Free;
+ urls.Free;
+ end;
+ end;
+end;
+{
+\breif \90V\92\85\83\8c\83X\83\8a\83\93\83NURL\8eæ\93¾
+\91Î\8fÛ\8ag\92£\8eq\82Í\81A\8fÚ\8d×\90Ý\92è\82Å\90Ý\92è\82³\82ê\82Ä\82¢\82é
+}
+procedure TGikoDM.NewLinkToClipboardActionExecute(Sender: TObject);
+var
+ links : IHTMLElementCollection;
+ urls, exts : TStringList;
+ ThreadItem : TThreadItem;
+begin
+ ThreadItem := GikoForm.GetActiveContent;
+ links := GetActiveThreadLinks;
+ if (ThreadItem <> nil) and (links <> nil) then begin
+ urls := TStringList.Create;
+ exts := TStringList.Create;
+ try
+ exts.CaseSensitive := False;
+ exts.Sorted := True;
+ exts.Delimiter := ';';
+ exts.DelimitedText :=
+ MojuUtils.CustomStringReplace(GikoSys.Setting.ExtList, '*', '');
+ GetLinkURLs(links, urls,
+ (ThreadItem.Count - ThreadItem.NewResCount + 1), exts );
+ Clipboard.SetTextBuf(urls.GetText);
+ finally
+ exts.Free;
+ 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;
+ doc : IHTMLDocument2;
+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
+ doc := browser.ControlInterface.Document as IHTMLDocument2;
+ if Assigned(doc) then begin
+ Result := doc.links;
+ end;
+ except
+ Result := nil;
+ end;
+ end;
+
+ end;
+ end;
+end;
+{
+\brief \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)
+\param Exts \8eæ\93¾\82·\82é\83\8a\83\93\83N\82Ì\8ag\92£\8eq
+}
+procedure TGikoDM.GetLinkURLs(links : IHTMLElementCollection;
+ URLs : TStringList; const Start: Integer; Exts : TStringList);
+var
+ index ,i, j : 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, 6, 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) );
+ // \8ag\92£\8eq\82ð\83`\83F\83b\83N
+ if Exts.Find(ext, j) then begin
+ urls.Add(url)
+ end;
+ end;
+ end;
+ end;
+ end;
+ end;
+end;
+{
+\brief \83A\83h\83\8c\83X\83o\81[\82É\83t\83H\81[\83J\83X\82ð\93\96\82Ä\82é
+\param Sender \83C\83x\83\93\83g\82Ì\94\90¶\8c³
+}
+procedure TGikoDM.SetForcusForAddresBarActionExecute(Sender: TObject);
+begin
+ if ( GikoForm.AddressToolBar.Visible ) then begin
+ GikoForm.AddressComboBox.SetFocus;
+ end
+end;
+{
+\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é
+}
+procedure TGikoDM.NewBoardSearchActionExecute(Sender: TObject);
+var
+ form : TNewBoardURLForm;
+ Msg: string;
+begin
+ if (EditorFormExists) then begin
+ Msg := '\83\8c\83X\83G\83f\83B\83^\82ð\91S\82Ä\95Â\82¶\82Ä\82\82¾\82³\82¢';
+ MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
+ Exit;
+ end;
+ form := TNewBoardURLForm.Create(Self);
+ try
+ form.ShowModal;
+ finally
+ form.Release;
+ end;
+end;
+//! \83u\83\89\83E\83U\82ð1\83y\81[\83W\95ª\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
+procedure TGikoDM.ScrollPageDownActionExecute(Sender: TObject);
+begin
+ GikoForm.BrowserMovement(GikoForm.BrowserPanel.Height);
+end;
+//! \83u\83\89\83E\83U\82ð1\83y\81[\83W\95ª\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
+procedure TGikoDM.ScrollPageUpActionExecute(Sender: TObject);
+begin
+ GikoForm.BrowserMovement(-GikoForm.BrowserPanel.Height);
+end;
+
+
+//! \82±\82Ì\83\8c\83X\82ÌID\82ðNG\83\8f\81[\83h\82É\92Ç\89Á\82·\82é\81i\93§\96¾)
+procedure TGikoDM.AddIDtoNGWord0ActionExecute(Sender: TObject);
+begin
+ GikoForm.AddIDtoNGWord(true);
+end;
+//! \82±\82Ì\83\8c\83X\82ÌID\82ðNG\83\8f\81[\83h\82É\92Ç\89Á\82·\82é
+procedure TGikoDM.AddIDtoNGWord1ActionExecute(Sender: TObject);
+begin
+ GikoForm.AddIDtoNGWord(false);
+end;
+//! \83N\83\8a\83b\83v\83{\81[\83h\82Ì\95¶\8e\9a\97ñ\82ðID\82Æ\82µ\82Ä\93¯\88êID\83\8c\83X\83A\83\93\83J\81[\95\\8e¦
+procedure TGikoDM.ExtractSameIDActionExecute(Sender: TObject);
+var
+ ID: String;
+begin
+ ID := Trim(Clipboard.AsText);
+ if (Length(ID) > 0) then begin
+ if not IsNoValidID(ID) then begin
+ GikoForm.ShowSameIDAncher(ID);
+ end;
+ end;
+end;
+//! \83^\83u\82Ì\83X\83\8c\83b\83h\88ê\97\97\82ð\95\\8e¦\82·\82é
+procedure TGikoDM.ShowTabListActionExecute(Sender: TObject);
+var
+ i : Integer;
+begin
+ GikoForm.ListView.Items.BeginUpdate;
+ GikoForm.ListView.Items.Clear;
+ BoardGroup.SpecialBoard.Clear;
+ for i := GikoForm.BrowserTab.Tabs.Count - 1 downto 0 do begin
+ BoardGroup.SpecialBoard.Add(
+ TBrowserRecord(GikoForm.BrowserTab.Tabs.Objects[i]).Thread);
+ end;
+ GikoForm.ListView.Items.EndUpdate;
+ GikoForm.SetActiveList(BoardGroup.SpecialBoard);
+end;
+//! \8bt\8eQ\8fÆ\82µ\82Ä\82¢\82é\83\8c\83X\82ð\92Ç\89Á\82·\82é
+procedure TGikoDM.DereferenceResActionExecute(Sender: TObject);
+var
+ i, currentNo, No : Integer;
+ links : IHTMLElementCollection;
+ threadItem : TThreadItem;
+ item : IHTMLElement;
+ url, url2 : string;
+ resNo : TStringList;
+ alreadyExist : Boolean;
+ PathRec: TPathRec;
+begin
+ No := GikoForm.KokoPopupMenu.Tag;
+ if No = 0 then Exit;
+
+ ThreadItem := GikoForm.KokoPopupThreadItem;
+ // \83A\83N\83e\83B\83u\83^\83u\82©\82ç\91S\82Ä\82Ì\83\8a\83\93\83N\82ð\8eæ\93¾\82·\82é
+ links := GetActiveThreadLinks;
+ if (ThreadItem <> nil) and (links <> nil) then begin
+ resNo := TStringList.Create;
+ try
+ currentNo := 0;
+ alreadyExist := False;
+ // \83\8a\83\93\83N\82ð\91S\82Ä\91\96\8d¸\82·\82é
+ 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
+ currentNo := StrToInt64Def(
+ Copy(url, 6, Length(url)), currentNo + 1
+ );
+ alreadyExist := False;
+ end else if (currentNo <> -1) and (not alreadyExist) then begin
+ // IE7\91Î\89\9e
+ if Pos('about:..', url) = 1 then begin
+ url := 'about:blank..' + Copy( url, Length('about:..')+1, Length(url) )
+ end;
+ // \8e©\95ª\82Ö\82Ì\83\8a\83\93\83N\82©\82ç\83\8c\83X\83|\83b\83v\97p\82Ì\94Ô\8d\86\8eæ\93¾
+ if Pos('about:blank..', url) = 1 then begin
+ // No \94Ô\82Ö\82Ì\83\8a\83\93\83N\82ª\82 \82ê\82Î\8eQ\8fÆ\82 \82è
+ url2 := THTMLCreate.GetRespopupURL(url, ThreadItem.URL);
+ PathRec := Gikosys.Parse2chURL2(url2);
+ if (not PathRec.FNoParam) then begin
+ Gikosys.GetPopupResNumber(url2,PathRec.FSt,PathRec.FTo);
+ end;
+ // \91Î\8fÛ\83\8c\83X\82à\82µ\82\82Í\82»\82ê\82ð\8aÜ\82Þ\82È\82ç\8eQ\8fÆ\82 \82è\82Æ\82·\82é
+ if (PathRec.FSt = No) or
+ ((PathRec.FSt <= No) and (PathRec.FTo >= No)) then begin
+ alreadyExist := True;
+ resNo.Add(IntToStr(currentNo));
+ end;
+ end;
+ end;
+ end;
+ end;
+ // \96³\90§\8cÀ\82È\82Ì\82Å-1\8cÅ\92è
+ GikoForm.ActiveContent.IDAnchorPopup(
+ GikoSys.CreateResAnchor(resNo, ThreadItem, -1));
+ finally
+ resNo.Clear;
+ resNo.Free;
+ end;
+ end;
+end;
+
+procedure TGikoDM.UpdateGikonaviActionExecute(Sender: TObject);
+var
+ form : TUpdateCheckForm;
+ Msg: string;
+ shutdown: boolean;
+begin
+ if (EditorFormExists) then begin
+ Msg := '\83\8c\83X\83G\83f\83B\83^\82ð\91S\82Ä\95Â\82¶\82Ä\82\82¾\82³\82¢';
+ MsgBox(GikoForm.Handle, Msg, MSG_ERROR, MB_OK or MB_ICONSTOP);
+ Exit;
+ end;
+ GikoForm.UpdateExePath := '';
+ GikoForm.UpdateExeArgs := '';
+ form := TUpdateCheckForm.Create(Self);
+ try
+ form.ShowModal;
+ shutdown := form.Allowshutdown;
+ if shutdown then begin
+ GikoForm.UpdateExePath := form.ExecPath;
+ GikoForm.UpdateExeArgs := form.ExecArgs;
+ end;
+ finally
+ form.Release;
+ end;
+ if shutdown then begin
+ // \83M\83R\83i\83r\8fI\97¹
+ GikoForm.Close;
+ end;
+
+end;
+//! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iPATH_INFO)
+procedure TGikoDM.konoURLPATHActionExecute(Sender: TObject);
+var
+ No : Integer;
+ ThreadItem : TThreadItem;
+ URL, Protocol, Host, Path, Document, Port, Bookmark : String;
+begin
+ No := GikoForm.KokoPopupMenu.Tag;
+ if No = 0 then Exit;
+
+ ThreadItem := GikoForm.KokoPopupThreadItem;
+ if (ThreadItem.ParentBoard.Is2ch) or not (Pos('?', ThreadItem.URL) > 0) then begin
+ GikoSys.ParseURI(ThreadItem.URL,Protocol, Host, Path, Document, Port, Bookmark);
+ URL := Protocol + '://' + Host + Path + IntToStr(No);
+ end else begin
+ if Pos('?', ThreadItem.URL) > 0 then begin
+ URL := Copy(ThreadItem.URL, 1, Pos('?', ThreadItem.URL)-1);
+ // \82Ü\82¿BBS\97p\8f\88\92u
+ URL := MojuUtils.CustomStringReplace(URL, 'read.pl', 'read.cgi');
+ URL := URL + '/' + ThreadItem.ParentBoard.BBSID + '/' + ChangeFileExt(ThreadItem.FileName, '') + '/' + IntToStr(No);
+ end;
+ end;
+ Clipboard.SetTextBuf( PChar(URL) );
+end;
+//! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iQuery_STRING)
+procedure TGikoDM.konoURLQueryActionExecute(Sender: TObject);
+var
+ No : Integer;
+ ThreadItem : TThreadItem;
+ URL, Protocol, Host, Path, Document, Port, Bookmark : String;
+begin
+ No := GikoForm.KokoPopupMenu.Tag;
+ if No = 0 then Exit;
+
+ ThreadItem := GikoForm.KokoPopupThreadItem;
+ // 2ch\82Æ\82µ\82½\82ç\82Î\82Í\81A\83\8c\83X\94Ô\8d\86\82ð\82¤\82Ü\82\8f\88\97\9d\82µ\82Ä\82\82ê\82È\82¢\82Ì\82Å\97\98\97p\95s\89Â
+ if ThreadItem.ParentBoard.Is2ch or not (Pos('?', ThreadItem.URL) > 0) then begin
+ GikoSys.ParseURI(ThreadItem.URL, Protocol, Host, Path, Document, Port, Bookmark);
+ URL := Protocol + '://' + Host + '/test/read.cgi?bbs=' + ThreadItem.ParentBoard.BBSID
+ + '&key=' + ChangeFileExt(ThreadItem.FileName, '') + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
+ end else begin
+ URL := ThreadItem.URL;
+ // \82Ü\82¿BBS
+ if Pos('&LAST=', URL) > 0 then begin
+ URL := Copy(URL, 1, Pos('&LAST=', URL) - 1);
+ URL := URL + '&START=' + IntToStr(No) + '&END=' + IntToStr(No);
+ end;
+ // \82»\82Ì\91¼\8aO\95\94\94Â
+ if Pos('&ls=', URL) > 0 then begin
+ URL := Copy(URL, 1, Pos('&ls=', URL) - 1);
+ URL := URL + '&st=' + IntToStr(No) + '&to=' + IntToStr(No);
+ end;
+
+ end;
+ Clipboard.SetTextBuf( PChar(URL) );
+end;
+//! \82±\82Ì\83\8c\83X\82ÌURL\83R\83s\81[\81iQuery_STRING\81j\82Ì\97\98\97p\83`\83F\83b\83N
+procedure TGikoDM.konoURLQueryActionUpdate(Sender: TObject);
+const
+ LIVEDOOR_URL = 'http://jbbs.livedoor.jp/';
+begin
+ // 2ch\82Æ\82µ\82½\82ç\82Î\82Í\97\98\97p\82Å\82«\82È\82¢\82æ\82¤\82É\82·\82é\81i\82¤\82Ü\82\83\8c\83X\8ew\92è\82Å\82«\82È\82¢\82Ì\82Å\81j
+ konoURLQueryAction.Enabled := false;
+ if (GikoForm.KokoPopupThreadItem <> nil) then begin
+ konoURLQueryAction.Enabled := not GikoForm.KokoPopupThreadItem.ParentBoard.Is2ch;
+ if konoURLQueryAction.Enabled then begin
+ konoURLQueryAction.Enabled := not (Pos(LIVEDOOR_URL, GikoForm.KokoPopupThreadItem.URL) = 1);
+ end;
+ end;
+end;
+