Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 29.06.2009, 10:06   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Получение пути к файлу путем перетаскивания

Мне нужно сделать так, чтобы при перетаскивании объекта из проводника на Edit путь отображался в этом Edit'е. Вот этот пример я переделал под себя:
Код:
uses ShellAPI;

type  
  procedure FormCreate(Sender: TObject);
  protected
    procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES;

procedure TNewForm.FormCreate(Sender: Tobject);
begin
  DragAcceptFiles(NewForm.Handle, true);
end;

procedure TNewForm.WMDROPFILES (var Msg: TMessage);
var
  i, amount, size: integer;
  Filename: PChar;
begin inherited;
  Amount := DragQueryFile(Msg.WParam, $FFFFFFFF, Filename, 255);
  for i := 0 to (Amount - 1) do
  begin
    size := DragQueryFile(Msg.WParam, i , nil, 0) + 1;
    Filename:= StrAlloc(size);
    DragQueryFile(Msg.WParam,i , Filename, size);
    PathEdit.Text := StrPas(Filename);
    StrDispose(Filename);
  end;
  DragFinish(Msg.WParam);
end;
Все запускается без ошибок, но не работает (курсор не изменяет вид при наведении на Edit с зажатым файлом).
И еще. Я не особо понял этот код, но вроде тут поддерживается перетаскивание нескольких файлов за раз. Эту функцию надо убрать, но я не понимаю что конкретно.
k1r1ch вне форума Ответить с цитированием
Старый 29.06.2009, 10:58   #2
blackstersl
Форумчанин
 
Аватар для blackstersl
 
Регистрация: 23.08.2008
Сообщений: 374
По умолчанию

Что б путь отображался исспользуй PathEdit.Text := extractfilepath(StrPas(Filename));
blackstersl вне форума Ответить с цитированием
Старый 29.06.2009, 10:58   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

добавь


Код:
type  
  procedure FormCreate(Sender: TObject);
  procedure CreateParams(var Params: TCreateParams); override;
  protected
    procedure WMDROPFILES (var Msg: TMessage); message WM_DROPFILES;
и собстра сама процедура:

Код:
procedure TMainFrm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := Params.ExStyle or WS_EX_ACCEPTFILES;
end;
и будет тебе счатье.. а по поводу
Цитата:
Я не особо понял этот код, но вроде тут поддерживается перетаскивание нескольких файлов за раз. Эту функцию надо убрать, но я не понимаю что конкретно.
не понимаешь что делаешь - не делай.. если хочешь програмировать - так читай книжки.. и ты все будешь понимать
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 29.06.2009, 11:25   #4
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Вот теперь работает! Спасибо.
А какая процедура выделяет путь из ярлыка (если например я перетащю ярлык, то должен быть указан путь к объекту)?
Насчет книжек)
Я и так читаю книжку по Delphi, но во-первых теория без практики скучновата, во-вторых, такого я там не нашел. Извините за глупые вопросы, но у меня опыт программирования - 2 месяца.
k1r1ch вне форума Ответить с цитированием
Старый 29.06.2009, 11:33   #5
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

в книжках азы.. без знания их ты не будешь понимать остальное.. если информацыи в книжке не достаточно - то есть яндекс..

для получения пути к из ярлыка юзай от такую функцыю

Код:
uses ShlObj, ActiveX, ComObj;
***
function GetFileNameFromLink(const FileName: String): String;
var
  MyObject: IUnknown;
  MySLink: IShellLink;
  MyPFile: IPersistFile;
  FileInfo: TWin32FINDDATA;
  WidePath: array[0..MAX_PATH] of WideChar;
  Buff: array[0..MAX_PATH] of Char;
begin
  Result := FileName;
  try
    CoInitialize(nil);
    MyObject := CreateComObject(CLSID_ShellLink);
    MyPFile := MyObject as IPersistFile;
    MySLink := MyObject as IShellLink;
    FillChar(WidePath, SizeOf(WidePath), 0);
    StringToWideChar(FileName, WidePath, SizeOf(WidePath));
    MyPFile.Load(WidePath, STGM_READ);
    MySLink.GetPath(Buff, Max_PATH, FileInfo, SLGP_UNCPRIORITY);
    Result := Buff;
  except
  end;
end;

текже можна получить дополнительные параметры.. с которыми запускается приложение (смотри GetArguments) и иконку ярлыка (GetIconLocation)
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 29.06.2009, 17:15   #6
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Спасибо!!!

А как получить имя файла без расширения? ExtractFileName оставляет расширение, может есть какой аналог (типо ExtractFileNameWithoutExt )?

Последний раз редактировалось k1r1ch; 29.06.2009 в 18:16.
k1r1ch вне форума Ответить с цитированием
Старый 29.06.2009, 19:59   #7
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Код:
var s:string;
     i:integer;
begin
s:=ExtractFileName(FiltName);
for i:=Length(s) downto 1 do
 if s[i]='.'
  then break;
Delete(s, i, Length(s));
end;
говорю же читай книги там сказано что из себя представляет строка..
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"

Последний раз редактировалось Ntlegend; 29.06.2009 в 20:23.
Ntlegend вне форума Ответить с цитированием
Старый 29.06.2009, 20:19   #8
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Все работает! Жалко нельзя 2 раза подряд спасибо ставить))
Цитата:
s[i]
То есть выход что переменная типа String это массив Char?! Обалдеть...
k1r1ch вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение текстового диапазона программым путем Lisi4ka Microsoft Office Word 13 11.04.2009 07:27
Как из полного пути к файлу получить имя файла с расширением uraura Компоненты Delphi 2 20.03.2009 15:53
изменение пути к файлу Обыватель Microsoft Office Excel 2 30.09.2008 12:16
Определение пути к файлу Pinya Общие вопросы Delphi 1 07.08.2008 11:22
Получение пути запуска Darth Общие вопросы Delphi 5 28.07.2008 12:37


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS