Здраствуите друзя! Я хачу перетаскивать из Explorer на Panel и сохранить Message. Может кто подскажет выход из сложившейся ситуации. Я попробовал так :
procedure TForm1.WMDropFiles(var Msg:TWMDropFiles);
var
filename:array[0..255] of char;
begin
dragQueryfile(msg.Drop,0,filename,SIZEOF(filename));
showmessage(filename);
dragfinish(msg.drop);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Panel1.Handle, True );
end;
Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
Дорогой друг, по моему у тебя переменная filename в procedure TForm1.WMDropFiles(var Msg:TWMDropFiles);имеет пустое значение а следовательно бесполезна. Либо ты не догоняешь чего-то, либо замохнулся на слона насосом.
Видите ли, вы реализовали обработчик события WM_DROPFILES для окна, а обозначили в качестве приемника панель. Естесственно, так работать не будет. Есть 3 варианта решения задачи:
1. Наследовать свой компонент TMyPanel от TPanel, в котором определить обработку WM_DROPFILES.
2. Создать Class Helper для TPanel с обработкой WM_DROPFILES. (не уверен, можно ли помещать обработчики событий в хелперы)
3. Переопределить оконную функцию для панели, в которой обрабатывать WM_DROPFILES.
procedure TForm4.NewPanelWinProc(var Msg: TMessage);
var
filename:array[0..255] of char;
begin
if Msg.Msg = WM_DROPFILES then begin
dragQueryfile(msg.WParam,0,filename,SIZEOF(filename));
showmessage(filename);
dragfinish(msg.WParam);
end else OldPanelWinProc(Msg);
end;
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.