Comment mettre en œuvre le Drag & Drop à partir de la messagerie outlook ou thunderbird pour un delphi forme?
Quelqu'un déjà mis en œuvre Drag & Drop des messages e-mail à partir d'Outlook et/ou Thunderbird (à partir de maintenant "OT") à un Delphi forme.
J'ai besoin de donner à l'utilisateur un moyen de stocker des e-mails importants dans mon application de base de données sans écrire de OT de plugins. Actuellement, ils utilisent cette technique:
- de OT de cliquer sur un email
- enregistrer sous...
- enregistrer sur le bureau ou le dossier temp,
- faites glisser et déposez le fichier de sauvegarde sur le Delphi forme.
De temps après la modification que je veux faire:
- de OT de cliquer sur un email
- faites glisser et déposez le fichier de sauvegarde sur le Delphi forme.
Donc en gros, j'ai mis en place le drag & drop à partir de l'explorateur. J'ai besoin d'une couche supplémentaire qui permet à ma demande de voir l'e-mail d'origine OT comme un fichier normal, donc je peux faire glisser à partir de l'OT, comme s'il était normal de la fenêtre de l'explorateur windows.
Remarque: je n'ai pas besoin de soutenir tous les OT versions. Je peux accepter de ne pas prendre en charge Outlook 2003 (par exemple), mais pas 2010. Ainsi dans le cas de la technique ne fonctionnera pas automatiquement pour tous les OT versions je préfère celui qui fonctionne avec la dernière.
Note finale: Il est évident de toute façon je suis intéressé uniquement en faisant glisser & laisser tomber les mails (et non pas les éléments de Calendrier Outlook, par exemple). Une idée serait de glisser-Déposer les pièces jointes trop. Mais cela pourrait être une amélioration supplémentaire pour l'avenir.
OriginalL'auteur LaBracca | 2011-01-21
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser OLE Drag&Drop, mais alors vous devez être en mesure de traiter les données que vous recevez, car chaque application peut stocker des données dans son propre format. Vous pouvez trouver une belle Delphi mise en oeuvre de OLE Drag&Drop ici
Outlook Express et Thunderbird devrait vous transférer des données dans RFC2822 format ou quelque chose de semblable, Outlook sera probablement de transfert de données dans son propre format de message, il shuould ont été documentés dans le cadre de la Microsoft Open Specification programme
J'ajoute une remarque: Bureau de 64 bits n'est pas pris en charge, jusqu'à ce que nous allons avoir la version 64 bits du compilateur. De toute façon, il n'est pas un gros problème pour l'instant (janvier 2011).
OriginalL'auteur
Tout d'abord, si vous pouvez trouver un prêt de la bibliothèque qui fait cela hors de la boîte (comme celle proposée par ldsandon) l'utiliser, parce que tout cela à la main est pénible et frustrant. La documentation est à la fois incomplète et peut contenir des bugs: vous finirez par faire des trucs par essai et erreur et Google ne vous sauvera pas, car pas beaucoup de gens se plonger dans les profondeurs de Ole glisser-déposer, et la plupart de ceux qui ne servira probablement de prêt-à-code.
Comment faire cela dans la plaine de Pascal
Théoriquement, l'API utilisée pour faire de votre poignée de l'application OLE des gouttes est très simple. Tout ce que vous devez faire est de fournir une mise en œuvre de la
IDropTarget
interface qui fait ce que vous avez besoin et de les appelerRegisterDragDrop
fournir la poignée de votre fenêtre de l'application et de l'interface.Voici comment mon de la mise en œuvre ressemble:
La mise en œuvre de
DragEnter
,DragOver
etDragLeave
est trivial, considerring je suis en train de faire ce pour une expérience: je vais accepter tout:Le vrai travail va être fait dans
TDropTargetImp.Drop
.Ce code accepte le "Drop", semble pour certains CF_FILECONTENTS, il l'ouvre comme TYMED_ISTORAGE, des gouttes de chaque flux unique dans cet espace de stockage dans un fichier de
C:\Temp\<stream_name>.bin
; j'ai essayé cela avec Delphi 2010 et Outlook 2007, il travaille tout droit: ouvrir les fichiers enregistrés (beaucoup d'entre eux!) Je trouve tout de l'e-mail de manière inattendue. Je suis sûr qu'il y a de la documentation quelque part qui explique exactement ce que chacun de ces fichiers est censé contenir, mais je n'ai pas vraiment de soins de sur le point d'accepter de glisser-déposer des fichiers à partir d'Outlook, de sorte que je n'ai pas regardé de loin. Encore une fois, ldsandon de lien a l'air prometteur.Ce codes a l'air assez court, mais ce n'est pas la source des difficultés. La documentation pour ce qui était vraiment en manque; j'ai frappé la route bloque à chaque coin de rue, à commencer par ceci:
Msdn documentation claire dit que la seule valeur valide pour "lindex" est -1: devinez quoi, -1 n'a pas de travail, de 0!
Puis il y a cette petite ligne de code:
plus précisément, ces deux consts:
d'obtenir cette combinaison est une question d'essais et d'erreurs. Je n'aime pas l'essai et l'erreur: c'Est la combinaison optimale de drapeaux pour ce que je veux? Cela fonctionne sur toutes les plateformes? Je ne sais pas...
Puis il y a la question de prise de tête ou la queue du contenu réel reçu à partir d'Outlook. Par exemple le SUJET de l'email a été trouvé dans ce flux:
__substg1.0_800A001F
. Le corps du message a été trouvé dans ce flux:__substg1.0_1000001F
. Pour un simple e-mail message que j'ai reçu 59 flux de taille non nulle.+1 Beau travail!!!!
+1 j'ai vraiment merci pour ce post. Je vous remercie de votre attitute de partager vos connaissances. C'est un plus pour l'ensemble de la communauté. Ceci dit je vais choisir lsandon répondre, car les acceptée car "il semble vraiment" ça va résoudre mon problème esaily. De toute façon je vais l'essayer, et dans le cas où il ne sera pas, je vais revenir ici et de changer d'avis au sujet de cette décision.
Pas sûr de ce que la doc MSDN vous lisez ceci dit lindex n'était valable que
-1
, mais qui peut avoir été pour un format différent. À partir de blogs.msdn.com/b/oldnewthing/archive/2008/03/18/8080183.aspx, "Le contenu du fichier en format de presse-papiers utilise le lindex comme un index de base zéro qui permet de sélectionner les fichiers virtuel de l'appelant est en train de parler. Si nous avons un seul fichier virtuel, son indice est égal à zéro."OriginalL'auteur Cosmin Prund