Witam, jak zrobić DragAndDrop w delphi? Konkretnie chodzi mi o to by przeciagnac z pulpitu jakis plik np tekstowy i zeby mi sie otworzyl w delphi - pobral program jego sciezke czy cokolwiek, po prostu zrobic ten draganddrop z pulpitu do aplikacji
pozdrawiam
Remek
0
0
np. połóż sobie na formie panel (na niego będziesz przeciągał pliki) i memo (będziesz wypisywał, jakie pliki przeciągnąłeś do aplikacji)
- w sekcji public formy deklarujesz dwie funkcje
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
procedure WMDropFiles (hDrop : THandle; hWindow : HWnd);
- poniżej masz ich definicje:
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
case Msg.Message of
WM_DROPFILES : WMDropFiles(Msg.wParam, Msg.hWnd);
end;
end;
procedure TForm1.WMDropFiles(hDrop: THandle; hWindow: HWnd);
var
TotalNumberOfFiles, nFileLength : Integer;
pszFileName : PChar;
i : Integer;
begin
TotalNumberOfFiles := DragQueryFile(hDrop, $FFFFFFFF, Nil, 0);
for i := 0 to TotalNumberOfFiles - 1 do
begin
nFileLength := DragQueryFile(hDrop, i, Nil, 0) + 1;
GetMem(pszFileName, nFileLength);
DragQueryFile(hDrop , i, pszFileName, nFileLength);
Memo1.Lines.Add(pszFileName);
FreeMem(pszFileName, nFileLength);
end;
DragFinish (hDrop);
end;
- W zdarzeniu onCreate formy umieszczasz:
DragAcceptFiles(Panel1.Handle, True);
Application.OnMessage := AppMessage;
-
Przeciągając plik na panel1 w memo wypisuje ci jego ścieśkę
-
w zdarzeniu onClose formy umieszczasz:
DragAcceptFiles (Panel1.Handle, False);
0
Podłącze się pod ten wątek. Ciekawy kod, musze przyznać, ale żeby się
skompilował do uses należy dodać ShellApi, uprzedzam kolejne pytanie.