Эта тема, очевидно, обсуждалась здесь снова и снова, но теперь у меня просто не осталось вариантов с моей точки зрения.
ОС: Windows XP SP3
Итак, вот Пример перетаскивания для RichEdit Я использую в своем приложении:
procedure TForm1.AcceptFiles( var msg : TMessage ); // or TWMDROPFILES
const
cnMaxFileNameLen = 255;
var
i,
nCount : integer;
acFileName : array [0..cnMaxFileNameLen] of char;
begin
// find out how many files we're accepting
nCount := DragQueryFile( msg.WParam, // or msg.Drop
$FFFFFFFF,
acFileName,
cnMaxFileNameLen );
// query Windows one at a time for the file name
for i := 0 to nCount-1 do
begin
DragQueryFile( msg.WParam, { or msg.Drop} i,
acFileName, cnMaxFileNameLen );
// do your thing with the acFileName
MessageBox( Handle, acFileName, '', MB_OK );
end;
// let Windows know that you're done
DragFinish( msg.WParam ); // or msg.Drop
end;
Проблема в том, что после некоторых недавних изменений (к сожалению, я не использую SVN, поэтому не могу отследить, какой коммит создавал эту проблему) Перетаскивание больше не работает.
Я использовал точки останова безуспешно в каждом событии, которое может быть как-то связано (вызвано):
RichEditMouseOver;
RichEditChange;
FormClick;
Мое приложение обрабатывает следующие WM:
procedure WMDropFiles(var Msg: TWMDROPFILES); message WM_DROPFILES;
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
procedure WMGetMinMaxInfo(var AMsg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
procedure CMDialogKey(var Msg: TCMDialogKey ); message CM_DIALOGKEY;
В пустом проекте с TRichEdit на форме - все работает нормально.
Также попытался изменить DragAcceptFiles()
Form1.Handle
на RichEdit.Handle
- все равно не повезло.
При отображении параметров nCount
и acFileName
acFileName не имеет пути к файлу перетаскиваемого файла ... Почему ????
В настоящее время я просто понятия не имею, что делает параметр acFileName теряющим путь к перетаскиваемым файлам. Не могли бы вы подсказать, где скрывается проблема?