Wenn dies Ihr erster Besuch hier ist,
lesen Sie bitte zuerst die Hilfe - Häufig gestellte Fragen
durch. Sie müssen sich vermutlich registrieren,
bevor Sie Beiträge verfassen können. Klicken Sie oben auf 'Registrieren', um den Registrierungsprozess zu
starten. Sie können auch jetzt schon Beiträge lesen. Suchen Sie sich einfach das Forum aus, das Sie am meisten
interessiert.
das folgende Beispiel aus meinem Buch <i>COM/DCOM/COM+ mit Delphi</i> demonstriert das Drag&Drop aus externen Anwendungen (wie zum Beispiel WordPad oder Microsoft Word) in ein TMemo des eigenen Delphi-Programms. Das eigene Programm muss dazu das COM-Interface <b>IDropTarget</b> implementieren:
<pre>
{ ************************************************** **************
Source File Name : TMemoDragDropFrm.pas
Typ : Hauptformular
Autor : Andreas Kosch
Compiler : Delphi 4.02 CSS
Betriebssystem : Windows 98
Beschreibung : Text via OLE Drag&Drop übernehmen aus einer
anderen Anwendung (wie zum Beispiel WordPad)
übernehmen.
16.01.2003: Test mit Delphi 7 und Microsoft Word XP unter Windowx XP
************************************************** ************** }
function TFormMain.DragEnter(const dataObj: IDataObject;
grfKeyState: Longint;
pt: TPoint;
var dwEffect: Longint): HResult;
begin
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;
function TFormMain.DragOver(grfKeyState: Longint;
pt: TPoint;
var dwEffect: Longint): HResult;
begin
dwEffect := DROPEFFECT_COPY;
Result := S_OK;
end;
function TFormMain.DragLeave : HResult;
begin
Result := S_OK;
end;
function TFormMain.Drop(const dataObj: IDataObject;
grfKeyState: Longint;
pt : TPoint;
var dwEffect : Longint): HResult;
var
aFmtEtc : TFORMATETC;
aStgMed : TSTGMEDIUM;
pData : PChar;
begin
if (dataObj = nil) then
raise Exception.Create('IDataObject-Zeiger ist ungültig!');
with aFmtEtc do
begin
cfFormat := CF_TEXT;
ptd := nil;
dwAspect := DVASPECT_CONTENT;
lindex := -1;
tymed := TYMED_HGLOBAL;
end;
OleCheck(dataObj.GetData(aFmtEtc, aStgMed));
try
pData := GlobalLock(aStgMed.hGlobal);
// Text ersetzen
Memo1.Text := pData;
finally
GlobalUnlock(aStgMed.hGlobal);
ReleaseStgMedium(aStgMed);
end;
Result := S_OK;
end;
Comment