Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Tornament
67 / 67 / 2
Регистрация: 28.10.2010
Сообщений: 325
1

Получение пути к перетаскиваемому в Edit файлу

18.10.2012, 22:38. Просмотров 1085. Ответов 2
Метки нет (Все метки)

Допустим есть Edit1.
Как сделать так, что бы при перетягивании ярлыка на Edit1. В Edit1 заносился или сам путь к файлу, или если это ярлык путь к файлу на который указывает ярлык.

Допустим есть ярлык на "C:\Program Files\WinRAR\WinRAR.exe" а находится он на рабочем столе.
"C:\Users\M&B\Desktop\WinRAR.lnk". И Есть ЧекБокс1.

При CheckBox1.Checked В Edit1 вносится путь к файлу который бросили, в этом случае "C:\Users\M&B\Desktop\WinRAR.lnk"
Иначе Если extractFileExt(...)=('.lnk') то внести в Edit1 путь к файлу указаный в ярлыке...

Если такое возможно, подскажите как. И возмжно ли сию процедуру выполнить для любого визуально отображаемого объекта?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 22:38
Ответы с готовыми решениями:

Получение пути к файлу процесса
Путь некоторых файлов отображается непонятными символами: function...

Drag&Drop: отображение в Edit пути к перетянутому файлу
Требуется функция для перетаскивание файла из проводника в Edit с помощью...

Пробелы в пути к файлу
Добрый день уважаемые форумчане. У меня есть *.ехе - шник, который...

Как вытащить кусок из пути к файлу?
Приветствую! Имею строку: var text: string; begin text:=...

Как укоротить отображение пути к файлу
Здравствуйте. Как укоротить строку пути к файлу, оставив названия первых двух...

2
mss
2632 / 2257 / 275
Регистрация: 24.12.2010
Сообщений: 13,725
18.10.2012, 22:47 2
http://delphi.about.com/od/windowsshellapi/a/accept-filedrop.htm
http://delphiworld.narod.ru/base/filename_by_link.html
1
Tornament
67 / 67 / 2
Регистрация: 28.10.2010
Сообщений: 325
19.10.2012, 03:56  [ТС] 3
Лучший ответ Сообщение было отмечено Tornament как решение

Решение

С чтением пути из Ярлыка разобрался.

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
 uses
  ... ShlObj, Activex, comobj;
 
function NameFromLink(const lnk: string): string;
var
  MyObject: IUnknown;
  MySLink: IShellLink;
  MyPFile: IPersistFile;
  c: PChar;
  pfd: _WIN32_FIND_DATAW;
begin
  Result := '';
  try
    MyObject := CreateComObject(CLSID_ShellLink);
    MySLink := MyObject as IShellLink;
    MyPFile := MyObject as IPersistFile;
    if MyPFile.Load(Pointer(WideString(lnk)), OF_READ) <> S_OK then
      exit;
    c := PChar(lnk);
    MySLink.GetPath(c, MAX_PATH, pfd, 0);
    Result := string(c);
  except
  end;
end;
Добавлено через 32 минуты
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
unit dropFormUnit;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
   Dialogs, StdCtrls;
 
 type
   TDropForm = class(TForm)
     Memo1: TMemo;
     procedure FormCreate(Sender: TObject) ;
   private
     procedure WMDROPFILES(var msg : TWMDropFiles) ; message WM_DROPFILES;
   public
     { Public declarations }
   end;
 
 var
   DropForm: TDropForm;
 
 implementation
 {$R *.dfm}
 
 uses ShellApi;
 
 //form's OnCreate event handler
 procedure TDropForm.FormCreate(Sender: TObject) ;
 begin
   //form is ready to accept files
   DragAcceptFiles( Handle, True ) ;
 end;
 
 (* handle files being dropped on a form *)
 procedure TDropForm.WMDROPFILES(var msg: TWMDropFiles) ;
 const
   MAXFILENAME = 255;
 var
   cnt, fileCount : integer;
   fileName : array [0..MAXFILENAME] of char;
 begin
   // how many files dropped?
   fileCount := DragQueryFile(msg.Drop, $FFFFFFFF, fileName, MAXFILENAME) ;
 
   // query for file names
   for cnt := 0 to -1 + fileCount do
   begin
     DragQueryFile(msg.Drop, cnt, fileName, MAXFILENAME) ;
 
     //do something with the file(s)
     memo1.Lines.Insert(0, fileName) ;
   end;
 
   //release memory
   DragFinish(msg.Drop) ;
 end;
 
 end.
Если использовать сей вариант, то файл перетаскивается на форму, а допустим у меня 2 listbox, и в зависимости на который сброшу туда и добавится. То есть нужна процедура не для формы, а для каждого объекта отдельно...

Добавлено через 27 минут
Так, для перетаскивания чисто на ListBox Надо писать
Delphi
1
2
3
  DragAcceptFiles(Form1.ListBox1.Handle, True);
//Вместо
  DragAcceptFiles( Handle, True ) ;
Хм... Как определять MouseEnter Когда Мышка находится в ДрагСтейт ?

И что делать если листы на Panel1, или на TcontrolPage ???

Добавлено через 18 минут
Хотя, нет, должно быть
Delphi
1
2
3
4
5
 procedure TDropForm.FormCreate(Sender: TObject) ;
begin
  DragAcceptFiles(Form1.ListBox2.Handle, True);
  DragAcceptFiles(Form1.ListBox1.Handle, True);;
end;
А на событие конца перетаскивание, изменить ссылку куда вписывать результат.

Добавлено через 2 часа 29 минут
Нашел вот такую полезную вещь.....

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses ...DropFileClass;
...
var
  Form1: TForm1;
  Df: TDropFile;
...
implementation
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  df:=TDropFile.Create(panel2);
  df.OnDropFiles:=self.FromDropFiles;
end;
 
procedure TForm1.FromDropFiles(Sender: TObject);
begin
  Edit1.Text:=df.Files[0];
end;
...
Panel2 находится на PageControl1...

"Громадный" (Для меня) функционал.
Скачать DropFileClass, и программу с использованием модуля Можно здесь:
http://jqbook.narod.ru/delphi/DropFile.htm
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2012, 03:56

Отделить директорию от полного пути к файлу
делаю кнопку которая создает файл... путь пользователь задает выше и он...

Как извлечь имя файла из полного пути к файлу?
Вот к примеру, я загрузил файл, и в edt1.Text - он записал путь к файлу... ...

Определение полного пути к файлу или папке по клику мыши
Всем доброго времени, соратники по программированию! Помогите решить следующую...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru