OSDN Git Service

スレッドに含まれる画像のリンクのURLを取得するアクションを追加
authorh677 <h677>
Sat, 12 Aug 2006 10:31:10 +0000 (10:31 +0000)
committerh677 <h677>
Sat, 12 Aug 2006 10:31:10 +0000 (10:31 +0000)
GikoDataModule.dfm
GikoDataModule.pas
gikoNavi.res

index 16b74b6..73236cd 100644 (file)
@@ -1285,6 +1285,20 @@ object GikoDM: TGikoDM
       Hint = #12479#12473#12463#12488#12524#12452#12395#26684#32013#12377#12427
       OnExecute = StoredTaskTrayActionExecute
     end
+    object AllImageLinkToClipbordAction: TAction
+      Category = #12473#12524#12483#12489
+      Caption = #12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
+      Hint = #12377#12409#12390#12398#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
+      OnExecute = AllImageLinkToClipbordActionExecute
+      OnUpdate = DependActiveCntentLogActionUpdate
+    end
+    object NewImageLinkToClipBoardAction: TAction
+      Category = #12473#12524#12483#12489
+      Caption = #26032#30528#12524#12473#12452#12513#12540#12472#12522#12531#12463'URL'#21462#24471
+      Hint = #26032#30528#12524#12473#12363#12425#12452#12513#12540#12472#12408#12398#12522#12531#12463'URL'#12434#12463#12522#12483#12503#12508#12540#12489#12395#12467#12500#12540#12377#12427
+      OnExecute = NewImageLinkToClipBoardActionExecute
+      OnUpdate = DependActiveCntentLogActionUpdate
+    end
   end
   object ToobarImageList: TImageList
     Left = 44
index 8c4aeea..893d398 100644 (file)
@@ -227,6 +227,8 @@ type
     VKRightAction: TAction;
     VKLeftAction: TAction;
     StoredTaskTrayAction: TAction;
+    AllImageLinkToClipbordAction: TAction;
+    NewImageLinkToClipBoardAction: TAction;
        procedure EditNGActionExecute(Sender: TObject);
        procedure ReloadActionExecute(Sender: TObject);
        procedure GoFowardActionExecute(Sender: TObject);
@@ -426,6 +428,8 @@ type
     procedure StoredTaskTrayActionExecute(Sender: TObject);
     procedure LeftTabSelectActionUpdate(Sender: TObject);
     procedure RightmostTabSelectActionUpdate(Sender: TObject);
+    procedure NewImageLinkToClipBoardActionExecute(Sender: TObject);
+    procedure AllImageLinkToClipbordActionExecute(Sender: TObject);
   private
        { Private \90é\8c¾ }
        procedure ClearResFilter;
@@ -443,6 +447,9 @@ type
     procedure ClearNameTextAllEditor();
     procedure MoveURLWithHistory(URL : String);
     procedure BackToHistory(item: TMoveHistoryItem);
+    function GetActiveThreadLinks : IHTMLElementCollection;
+    procedure GetImageLinkURLs(links : IHTMLElementCollection;
+        URLs : TStringList; const Start: Integer);
   public
        { Public \90é\8c¾ }
        procedure RepaintStatusBar;
@@ -4216,7 +4223,114 @@ begin
     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;
 
 end.
 
index 02a1ca7..03a939a 100644 (file)
Binary files a/gikoNavi.res and b/gikoNavi.res differ