From: h677 Date: Sun, 13 Jul 2008 15:51:04 +0000 (+0000) Subject: レス番号のコンテキストメニューから逆参照のレスアンカーを表示するメニューを追加 X-Git-Tag: v1_64_1_820~159 X-Git-Url: http://git.osdn.net/view?p=gikonavigoeson%2Fgikonavi.git;a=commitdiff_plain;h=79ef146793e729cb3a38d1dfa81609b42c3ed337 レス番号のコンテキストメニューから逆参照のレスアンカーを表示するメニューを追加 --- diff --git a/Giko.dfm b/Giko.dfm index 49d9510..5148a1a 100644 --- a/Giko.dfm +++ b/Giko.dfm @@ -8397,6 +8397,9 @@ object GikoForm: TGikoForm object ID1: TMenuItem Action = GikoDM.SameIDResAnchorAction end + object N83: TMenuItem + Action = GikoDM.DereferenceResAction + end end object BrowserTabPopupMenu: TPopupMenu Images = HotToobarImageList diff --git a/Giko.pas b/Giko.pas index ab1627d..3ba0a37 100644 --- a/Giko.pas +++ b/Giko.pas @@ -419,6 +419,7 @@ type ResPopupClearTimer: TTimer; TaskTrayPopupMenu: TPopupMenu; Exit1: TMenuItem; + N83: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure BrowserStatusTextChange(Sender: TObject; @@ -6870,7 +6871,7 @@ begin end end; FActiveContent.IDAnchorPopup( - GikoSys.CreateSameIDResAnchor(numbers, FActiveContent.Thread, limited)); + GikoSys.CreateResAnchor(numbers, FActiveContent.Thread, limited)); finally numbers.Free; end; diff --git a/GikoDataModule.dfm b/GikoDataModule.dfm index 93d0a35..589305c 100644 --- a/GikoDataModule.dfm +++ b/GikoDataModule.dfm @@ -1369,6 +1369,14 @@ object GikoDM: TGikoDM Hint = #12479#12502#19968#35239#34920#31034 OnExecute = ShowTabListActionExecute end + object DereferenceResAction: TAction + Tag = 1 + Category = #12473#12524#12483#12489 + Caption = #12371#12398#12524#12473#12434#21442#29031#12375#12390#12356#12427#12524#12473#12450#12531#12459#12540#34920#31034 + Hint = #12371#12398#12524#12473#12434#21442#29031#12375#12390#12356#12427#12524#12473#12450#12531#12459#12540#34920#31034 + OnExecute = DereferenceResActionExecute + OnUpdate = DependActiveCntentLogActionUpdate + end end object ToobarImageList: TImageList Left = 44 diff --git a/GikoDataModule.pas b/GikoDataModule.pas index 42f953c..67576b3 100644 --- a/GikoDataModule.pas +++ b/GikoDataModule.pas @@ -241,6 +241,7 @@ type AddIDtoNGWord1Action: TAction; ExtractSameIDAction: TAction; ShowTabListAction: TAction; + DereferenceResAction: TAction; procedure EditNGActionExecute(Sender: TObject); procedure ReloadActionExecute(Sender: TObject); procedure GoFowardActionExecute(Sender: TObject); @@ -452,6 +453,7 @@ type procedure AddIDtoNGWord1ActionExecute(Sender: TObject); procedure ExtractSameIDActionExecute(Sender: TObject); procedure ShowTabListActionExecute(Sender: TObject); + procedure DereferenceResActionExecute(Sender: TObject); private { Private éŒ¾ } procedure ClearResFilter; @@ -4399,7 +4401,7 @@ begin // ƒŒƒX‚̔ԍ†‚ðXV if (Pos('menu:', url) > 0) then begin index := StrToInt64Def( - Copy(url, 5, Length(url)), index + 1 + Copy(url, 6, Length(url)), index + 1 ); end else begin // ŠJŽnƒŒƒX”ԍ†ˆÈ~‚©ƒ`ƒFƒbƒN @@ -4494,5 +4496,72 @@ begin GikoForm.ListView.Items.EndUpdate; GikoForm.SetActiveList(BoardGroup.SpecialBoard); end; +//! ‹tŽQÆ‚µ‚Ä‚¢‚郌ƒX‚ð’ljÁ‚·‚é +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.GetActiveContent; + // ƒAƒNƒeƒBƒuƒ^ƒu‚©‚ç‘S‚ẴŠƒ“ƒN‚ðŽæ“¾‚·‚é + links := GetActiveThreadLinks; + if (ThreadItem <> nil) and (links <> nil) then begin + resNo := TStringList.Create; + try + currentNo := 0; + alreadyExist := False; + // ƒŠƒ“ƒN‚ð‘S‚Ä‘–¸‚·‚é + 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); + // ƒŒƒX‚̔ԍ†‚ðXV + 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‘Ήž + if Pos('about:..', url) = 1 then begin + url := 'about:blank..' + Copy( url, Length('about:..')+1, Length(url) ) + end; + // Ž©•ª‚ւ̃Šƒ“ƒN‚©‚烌ƒXƒ|ƒbƒv—p‚̔ԍ†Žæ“¾ + if Pos('about:blank..', url) = 1 then begin + // No ”Ԃւ̃Šƒ“ƒN‚ª‚ ‚ê‚ÎŽQÆ‚ ‚è + url2 := THTMLCreate.GetRespopupURL(url, ThreadItem.URL); + PathRec := Gikosys.Parse2chURL2(url2); + if (not PathRec.FNoParam) then begin + Gikosys.GetPopupResNumber(url2,PathRec.FSt,PathRec.FTo); + end; + // ‘ΏۃŒƒX‚à‚µ‚­‚Í‚»‚ê‚ðŠÜ‚Þ‚È‚çŽQÆ‚ ‚è‚Æ‚·‚é + 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; + // –³§ŒÀ‚È‚Ì‚Å-1ŒÅ’è + GikoForm.ActiveContent.IDAnchorPopup( + GikoSys.CreateResAnchor(resNo, ThreadItem, -1)); + finally + resNo.Clear; + resNo.Free; + end; + end; +end; + end. diff --git a/GikoSystem.pas b/GikoSystem.pas index 4679f9f..d579b85 100644 --- a/GikoSystem.pas +++ b/GikoSystem.pas @@ -213,7 +213,7 @@ type procedure GetPopupResNumber(URL : string; var stRes, endRes : Int64); property Bayesian : TGikoBayesian read FBayesian write FBayesian; - function CreateSameIDResAnchor(var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string; + function CreateResAnchor(var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string; procedure GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList); overload; procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload; function GetResID(AIDNum: Integer; ThreadItem: TThreadItem): String; @@ -2770,7 +2770,7 @@ end; \param limited —ñ‹“‚·‚鐔‚𐧌À‚·‚é‚È‚ç1ˆÈã \return —ñ‹“‚³‚ꂽƒŒƒXƒAƒ“ƒJ[ } -function TGikoSys.CreateSameIDResAnchor( +function TGikoSys.CreateResAnchor( var Numbers: TStringList; ThreadItem: TThreadItem; limited: Integer):string; var