All, Please ignore my last post. It appears that, had I tested the program outside of Delphi, I would have found that it was actually working. Something causes Outlook to crash when I test it by running it from within Delphi.
Another lesson learned. Kind regards, Darren -----Original Message----- From: Darren McBride [mailto:[EMAIL PROTECTED] Sent: 22 September 2006 01:02 To: 'Borland's Delphi Discussion List' Subject: Delphi with IDropTarget and Outlook 2003 Folks, I am using Outlook 2003 with Delphi 6 and I am trying to implement COM Drag and Drop using samples that I have gathered from around the internet. Unfortunately, for some unknown reason, whenever I drag an Outlook message over my form, Outlook crashes completely with the 'Send details to Microsoft' dialog. I am only able to test this on Outlook 2003, so I don't know if it is version specific. Can anyone tell me if there is a problem with the following code, or even if it works with previous versions of Outlook. I don't even get a breakpoint in the DragEnter or DragOver methods, suggesting that something is wrong with my RegisterDragDrop procedure call. All help very much appreciated. The code for my form is posted below. There are no controls on the form. Many thanks, Darren unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ActiveX; type TForm1 = class(TForm, IDropTarget) protected function DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; function IDropTarget_DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; function IDropTarget.DragOver = IDropTarget_DragOver; function DragLeave: HResult; stdcall; function Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end; var Form1: TForm1; implementation uses ComObj; {$R *.dfm} constructor TForm1.Create(AOwner: TComponent); begin inherited Create(AOwner); OleInitialize(nil); OleCheck(RegisterDragDrop(Handle, Self as IDropTarget)); end; destructor TForm1.Destroy; begin RevokeDragDrop(Handle); OleUninitialize; inherited Destroy; end; function TForm1.DragEnter(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; begin ShowMessage('Beep'); dwEffect := DROPEFFECT_COPY; Result := S_OK; end; function TForm1.IDropTarget_DragOver(grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; var m: TPoint; i: Integer; begin ShowMessage('Beep'); dwEffect := DROPEFFECT_COPY; m := pt; Windows.ScreenToClient(Handle, m); i := SendMessage(Handle, EM_CHARFROMPOS, 0, MAKELPARAM(m.x, m.y)); SendMessage(Handle, EM_SETSEL, Lo(i), Lo(i)); Result := S_OK; end; function TForm1.DragLeave: HResult; stdcall; begin Result := S_OK; end; function TForm1.Drop(const dataObj: IDataObject; grfKeyState: Longint; pt: TPoint; var dwEffect: Longint): HResult; stdcall; var Medium: TStgMedium; Format: TFormatEtc; begin dataObj._AddRef; Format.cfFormat := CF_TEXT; Format.ptd := nil; Format.dwAspect := DVASPECT_CONTENT; Format.lindex := -1; Format.tymed := TYMED_HGLOBAL; if dataObj.GetData(Format, Medium) = S_OK then begin end; dataObj._Release; dwEffect := DROPEFFECT_COPY; Result := S_OK; end; end. _______________________________________________ Delphi mailing list -> Delphi@elists.org http://www.elists.org/mailman/listinfo/delphi