2016-06-28 3 views
0

I 편집 모드와 L의 TWebBrowser는 사용자가 웹 브라우저에서 복사 및 붙여 넣기 텍스트와 이미지를 워드 문서에서 (또는 어디에서든지 정말) 및 붙여 넣기 할 수 있도록 노력하고 있습니다TWebrowser 복사 Word 문서

I에서 다음 코드를 사용하여 붙여 넣기 텍스트를 얻을 수 있었다 :

pvaIn := EmptyParam; 
HtmlEditor.ExecWB(OLECMDID_PASTE, OLECMDEXECOPT_DODEFAULT, pvaIn); 

HTML 편집기 내 TWebBrowser 구성 요소 시도와 웹 브라우저가 리터가 붙여 모르는 것 같다 이미지를 붙여 넣을 때 내 문제가

입니다 이미지가 표시되지만 편집 가능한 텍스트 상자 만 표시됩니다.

Pasting into TWebBrowser

는 TWebBrowser에 이미지를 붙여 넣을 수있는 방법이 있습니까?

+1

웹 (HTML) 페이지에는 이미지가 없습니다. 여기에는 디스크에 별도로 저장된 이미지에 대한 링크가 포함되어 있습니다. 넌 그걸 뭐 붙여 넣을거야? –

+0

@KenWhite 기본 OLECMDID_PASTE 명령을 사용할 수 없다는 뜻입니까? 사용자가 워드 문서의 일부를 브라우저에 복사 한 다음 Indy를 사용하여 이메일로 보냅니다. – MattLaza

+0

텍스트를 복사 할 수 있습니다. OLECMDID_PASTE가 자동으로 이미지를 처리한다고 나는 믿지 않습니다. 어디서 하드 디스크에 있어야하기 때문에 붙여 넣을 이미지를 어디에 두겠습니까? (내가 틀릴 수도있어 대답을 쓰지 않을거야.) –

답변

0

여기 해결책은 비트 맵을 디스크에 저장 한 다음 이미지 html 이미지를 만들어 HTML 위치의 커서에 첨부하는 것입니다.

if clipboard.hasformat(cf_bitmap) then //only if the clipboard currently has a image 
begin 
    bmp := TBitMap.Create(); 
    CreateGuid(uid); 
    try 
     filename := 'cb(' + System.Copy(guidToString(uid), 2, 8) + ').bmp'; //generate a unique filename 
     path := ExtractFilePath(paramstr(0)) + filename;//the location where we will save it 
     bmp.LoadFromClipboardFormat(cf_bitmap, clipboard.GetAsHandle(cf_bitmap), 0); 
     bmp.SaveToFile(path); //save the clipboard image to disk 

     Doc2 := nil; 
     Doc2 := self.HtmlEditor.Document as IHTMLDocument2; 

     if Doc2 = nil then 
      exit; 

     if Assigned(Doc2.Body) then 
     begin 
      Image := Doc2.createElement('img') as IHtmlDOMNode; //create the img element 
      (Image as IHTMLImgElement).src := path; //set this to the path of the image we just saved 

      if GetcaretPos(cursor) then //get the element at the cursor position 
      begin 
       ElementAtCursor := Doc2.elementFromPoint(cursor.X, cursor.Y); 
       Html := '<img src="' + path + '"></img>'; //insert the image after this element 
       ElementAtCursor.insertAdjacentHTML('AfterBegin', Html); 
      end 
      else 
       (Doc2.Body as IHtmlDOMNode).appendChild(Image); //else just append to the body 
     end; 
     finally 
      bmp.free(); 
     end; 
end; 

는 당신이 볼 수 있듯이 첫 번째 단계는 확인하고 그래서 우리는 다음 디스크에 저장하면 클립 보드가 CF_BITMAP가 있는지 확인하는 것입니다. 그런 다음 img HTML 요소를 만들어 해당 파일 이름을 img의 src에 첨부합니다. 마지막으로 우리는 커서가있는 HTML에 img를 추가합니다. 커서를 가져 오면 HTML 본문에 추가합니다.