С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 18.05.2021
Сообщений: 63
1

Drag&Drop получить полный путь до файла

16.08.2021, 11:51. Показов 3111. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно чтобы при перекидывании на определенный компонент формы любого файла в edit1 записывался полный путь до этого файла(я полный нуб по поводу drag and drop)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2021, 11:51
Ответы с готовыми решениями:

Drag&Drop файла с определенными расширениями на Panel
Подскажите как сделать drag and drop файла? Нашел вот это: Работает хорошо, но нужно сделать что...

DrawGrid & Drag&Drop
Здравствуйте. Суть вопроса - поставлена задача по заполнению TDrawGrid формата 5х5 изображениями...

Drag&Drop
Вот я зделал чтоб при перетаскивание c List на Panel окно закрывалась!А как зделать чтоб окно...

Drag&Drop
Доброго времени суток. Подскажите как открыть содержимое файла в Memo, перенеся его на ехешник...

4
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,997
16.08.2021, 12:13 2
Лучший ответ Сообщение было отмечено WD Games как решение

Решение

Например, надо принимать файлы на панель. Вот пример, файлы принимаются на 2 панели и список файлов от каждой панели уходит в свой Label:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
uses
  ... ShellApi;
 
type
  TDropFilesEvent = procedure(Sender: TObject; FileList: TStrings) of object;
 
  TPanel = class(ExtCtrls.TPanel) // Дополнить панель возможностью приёма списка файлов
  protected
    FOnDropFiles: TDropFilesEvent;
    procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
  public
    property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
  end;
 
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject); 
    procedure DropFiles(Sender: TObject; Files: TStrings); // Обработчик события OnDropFiles от панели
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TPanel.WMDropFiles(var Msg: TMessage);
var
  i:integer;
  CountFiles  : integer;
  SizeName    : integer;
  cch         : integer;
  hDrop : integer;
  lpszFile : PChar;
  sl: TStringList;
begin
  // Приём списка файлов из Drag&Drop
  hDrop := Msg.WParam;
  cch := 0;
 
  // Принять все файлы и поместить в sl;
  sl := TStringList.Create;
  CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
  for i := 0 to CountFiles-1 do begin
    SizeName := DragQueryFile(hDrop, i, nil, cch);
    GetMem(lpszFile, SizeOf(Char)*(SizeName+1));
    DragQueryFile(hDrop, i, lpszFile, SizeName+1);
    sl.Add(lpszFile);
    FreeMem(lpszFile);
  end;
  DragFinish(hDrop);
 
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, sl);
  sl.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, True); // Включить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, True); // Включить Drag&Drop для Panel2
  Panel1.OnDropFiles := DropFiles; // Назначить обработчик события
  Panel2.OnDropFiles := DropFiles;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, False); // Выключить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, False); // Выключить Drag&Drop для Panel2
end;
 
procedure TForm1.DropFiles(Sender: TObject; Files: TStrings);
begin
  // В событие через объект [B]Files[/B] передаётся список дропнутых файлов
  if Sender = Panel1 then Label1.Caption := Files.Text;
  if Sender = Panel2 then Label2.Caption := Files.Text;
end;
 
end.
1
1 / 1 / 0
Регистрация: 18.05.2021
Сообщений: 63
16.08.2021, 13:05  [ТС] 3
[dcc32 Error] Unit1.pas(12): E2003 Undeclared identifier: 'ExtCtrls'
[dcc32 Error] Unit1.pas(12): E2029 ',' or ':' expected but ')' found
[dcc32 Error] Unit1.pas(75): E2003 Undeclared identifier: 'Handle'
[dcc32 Error] Unit1.pas(76): E2003 Undeclared identifier: 'Handle'
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,ShellApi, Vcl.StdCtrls, Vcl.ExtCtrls;
 
type
  TDropFilesEvent = procedure(Sender: TObject; FileList: TStrings) of object;
 
  TPanel = class(ExtCtrls.TPanel) // Дополнить панель возможностью приёма списка файлов
  protected
    FOnDropFiles: TDropFilesEvent;
    procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
  public
    property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
  end;
 
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DropFiles(Sender: TObject; Files: TStrings); // Обработчик события OnDropFiles от панели
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TPanel.WMDropFiles(var Msg: TMessage);
var
  i:integer;
  CountFiles  : integer;
  SizeName    : integer;
  cch         : integer;
  hDrop : integer;
  lpszFile : PChar;
  sl: TStringList;
begin
  // Приём списка файлов из Drag&Drop
  hDrop := Msg.WParam;
  cch := 0;
 
  // Принять все файлы и поместить в sl;
  sl := TStringList.Create;
  CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
  for i := 0 to CountFiles-1 do begin
    SizeName := DragQueryFile(hDrop, i, nil, cch);
    GetMem(lpszFile, SizeOf(Char)*(SizeName+1));
    DragQueryFile(hDrop, i, lpszFile, SizeName+1);
    sl.Add(lpszFile);
    FreeMem(lpszFile);
  end;
  DragFinish(hDrop);
 
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, sl);
  sl.Free;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, True); // Включить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, True); // Включить Drag&Drop для Panel2
  Panel1.OnDropFiles := DropFiles; // Назначить обработчик события
  Panel2.OnDropFiles := DropFiles;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, False); // Выключить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, False); // Выключить Drag&Drop для Panel2
end;
 
procedure TForm1.DropFiles(Sender: TObject; Files: TStrings);
begin
  // В событие через объект [B]Files[/B] передаётся список дропнутых файлов
  if Sender = Panel1 then Label1.Caption := Files.Text;
  if Sender = Panel2 then Label2.Caption := Files.Text;
end;
 
end.
Добавлено через 11 минут
AzAtom,
[dcc32 Error] Unit1.pas(12): E2003 Undeclared identifier: 'ExtCtrls'
[dcc32 Error] Unit1.pas(12): E2029 ',' or ':' expected but ')' found
[dcc32 Error] Unit1.pas(75): E2003 Undeclared identifier: 'Handle'
[dcc32 Error] Unit1.pas(76): E2003 Undeclared identifier: 'Handle'
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs,ShellApi, Vcl.StdCtrls, Vcl.ExtCtrls;
 
type
  TDropFilesEvent = procedure(Sender: TObject; FileList: TStrings) of object;
 
  TPanel = class(ExtCtrls.TPanel) // Дополнить панель возможностью приёма списка файлов
  protected
    FOnDropFiles: TDropFilesEvent;
    procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
  public
    property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
  end;
 
  TForm1 = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure DropFiles(Sender: TObject; Files: TStrings); // Обработчик события OnDropFiles от панели
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TPanel.WMDropFiles(var Msg: TMessage);
var
  i:integer;
  CountFiles  : integer;
  SizeName    : integer;
  cch         : integer;
  hDrop : integer;
  lpszFile : PChar;
  sl: TStringList;
begin
  // Приём списка файлов из Drag&Drop
  hDrop := Msg.WParam;
  cch := 0;
 
  // Принять все файлы и поместить в sl;
  sl := TStringList.Create;
  CountFiles := DragQueryFile(hDrop, $FFFFFFFF, nil, cch);
  for i := 0 to CountFiles-1 do begin
    SizeName := DragQueryFile(hDrop, i, nil, cch);
    GetMem(lpszFile, SizeOf(Char)*(SizeName+1));
    DragQueryFile(hDrop, i, lpszFile, SizeName+1);
    sl.Add(lpszFile);
    FreeMem(lpszFile);
  end;
  DragFinish(hDrop);
 
  if Assigned(FOnDropFiles) then
    FOnDropFiles(Self, sl);
  sl.Free;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, True); // Включить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, True); // Включить Drag&Drop для Panel2
  Panel1.OnDropFiles := DropFiles; // Назначить обработчик события
  Panel2.OnDropFiles := DropFiles;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
  DragAcceptFiles(Panel1.Handle, False); // Выключить Drag&Drop для Panel1
  DragAcceptFiles(Panel2.Handle, False); // Выключить Drag&Drop для Panel2
end;
 
procedure TForm1.DropFiles(Sender: TObject; Files: TStrings);
begin
  // В событие через объект [B]Files[/B] передаётся список дропнутых файлов
  if Sender = Panel1 then Label1.Caption := Files.Text;
  if Sender = Panel2 then Label2.Caption := Files.Text;
end;
 
end.
0
Модератор
3758 / 2262 / 783
Регистрация: 15.11.2015
Сообщений: 8,997
16.08.2021, 14:01 4
Лучший ответ Сообщение было отмечено WD Games как решение

Решение

WD Games, для XE версий дописать Vcl. так:
Delphi
1
2
3
4
5
6
7
  TPanel = class(Vcl.ExtCtrls.TPanel) // Дополнить панель возможностью приёма списка файлов
  protected
    FOnDropFiles: TDropFilesEvent;
    procedure WMDropFiles(var Msg: TMessage); message WM_DROPFILES;
  public
    property OnDropFiles: TDropFilesEvent read FOnDropFiles write FOnDropFiles;
  end;
1
1 / 1 / 0
Регистрация: 18.05.2021
Сообщений: 63
16.08.2021, 14:40  [ТС] 5
AzAtom, Большое спасибо вам
0
16.08.2021, 14:40
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2021, 14:40
Помогаю со студенческими работами здесь

Drag & Drop
Как сделать drag&drop файлов из проводника, например, на Memo1, это может быть один, а может быть...

Плавный Drag&Drop
Приветствую, Господа! Пытаюсь сделать Drag&Drop на подобии ListView в Андроиде, только никак не...

Получить имя файла, зная полный путь
Доброго времени суток. Прошу помощи. Ситуация такова: через opendialog в переменную fname...

Как работать с Drag&Drop?
Как с ними работать? какие событие, если можно то простой пример.

Drag & Drop файлов в 2+ edit
Здравствуйте. Как сделать Drag & Drop файлов с пк в edit'ы Есть пример -...

Drag&Drop из Edit в браузер
Как сделать drag and drop из Edit в браузер,например mozilla в поле поиска яндекса. Из любого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru