2016-06-28 3 views
0

J'ai un TWebBrowser en mode édition et je suis en train de permettre à un utilisateur de copier et coller du texte et des images à partir d'un document Word (ou ne importe où vraiment) et coller dans le navigateur webTWebrowser Copie du document Word

I ont été en mesure d'obtenir le texte à coller à l'aide du code ci-dessous:

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

htmleditor est mon composant TWebBrowser

mon problème est quand essayer et coller une image du navigateur Web semble savoir que l collé une image, mais il affiche simplement une zone de texte modifiable.

Pasting into TWebBrowser

est-il un moyen de coller une image dans un TWebBrowser?

+1

Les pages Web (html) ne contiennent pas d'images. Ils contiennent des liens vers des images qui sont stockées séparément sur le disque. Que serais-tu en train de coller? –

+0

@KenWhite Est-ce que cela signifie que je ne peux pas utiliser la commande OLECMDID_PASTE par défaut? Je voudrais donner la possibilité aux utilisateurs de copier des parties d'un document Word dans le navigateur que je vais ensuite envoyer par e-mail en utilisant Indy – MattLaza

+0

Vous pouvez copier du texte. Cependant, je ne crois pas que OLECMDID_PASTE traitera automatiquement les images pour vous. Où mettrait-il les images qui sont collées, puisqu'elles doivent être sur le disque dur quelque part? (Je peux me tromper, c'est pourquoi je n'écris pas de réponse.) –

Répondre

0

La solution consistait ici à enregistrer le bitmap sur le disque, puis à créer une image html image et à l'attacher au code HTML à l'emplacement du curseur.

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; 

Comme vous pouvez le voir la première étape consiste à vérifier et voir si le presse-papiers a un CF_BITMAP et si oui, nous l'enregistrer sur le disque. Nous créons ensuite un élément HTML img attache ce nom de fichier au src de l'img. Enfin, nous ajoutons l'img au HTML où se trouve le curseur et si nous ne pouvons pas obtenir le curseur, nous ajoutons au corps HTML