Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TListView and Drag&Drop 
:(
    Опции темы
Illusion Dolphin
  Дата 6.2.2004, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Что-то я нигде не нашёл, как можно перетащить элемент из TListView в проводник\рабочий стол, и после перетаскивания программа хотя бы получила конечную папку как результат.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
<Spawn>
Дата 7.2.2004, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Наверное, нужно использовать интерфейс IDropTarget, но я пока с ними почти не работал, так что большего сказать не могу.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Illusion Dolphin
Дата 7.2.2004, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Администрация, очень хороший пример, в интернете нашёл всего одну статью, неплохо было бы в FAQ занести, а то везде только односторонние функции как на приложение кидать. Вот ссылка, где всё подробно написано:

http://podgoretsky.com/ftp/Docs/Delphi/D3/...ogLib/ch_04.htm


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Medved
Дата 7.2.2004, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 14
Всего: 154



Цитата(Illusion @ 7.2.2004, 12:30)
Администрация, очень хороший пример, в интернете нашёл всего одну статью, неплохо было бы в FAQ занести...

Спасибо. Обязательно добавим.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
crazynetwork
Дата 12.4.2011, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



И так, тема очень старая,  но не раскрыта. Кто то знает как сделать так как написал топикстартер? ДрагендДроп из приложения и получить путь к папке, В КОТОРУЮ  перетаскивается ...
PM MAIL   Вверх
crazynetwork
Дата 13.4.2011, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



Цитата(crazynetwork @ 12.4.2011,  21:25)
И так, тема очень старая,  но не раскрыта. Кто то знает как сделать так как написал топикстартер? ДрагендДроп из приложения и получить путь к папке, В КОТОРУЮ  перетаскивается ...

Народ, помогайте, выручайте. Как узнать конечный путь файла?
PM MAIL   Вверх
Snowy
Дата 13.4.2011, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



PM MAIL   Вверх
crazynetwork
Дата 13.4.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет




Дело в том что

 begin
    DropFileSource1.Files.Add('C:\' + li.Caption);
    li := ListView1.GetNextItem(li, sdBelow, [isSelected]);
  end;

А как получить например в Label будущий путь к файлу, то есть там куда мы его перетягиваем, при том еще до того как он оказался там?

Смысл в том что бы при перетаскивании узнать путь где он будет лежать (куда мы его собрались перетянуть)
PM MAIL   Вверх
Snowy
Дата 13.4.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Нигде он не будет лежать.
Ты перетягиваешь данные между двумя приложениями.
А будет оно сохранять файл на диск или открывать, или передавать по сети - это уже дело того приложения, которому ты файл отдаёшь.
Оно не обязано докладывать, что будет с этими данными делать.
Узнать это можно лишь перехватывая файловые операции.
PM MAIL   Вверх
crazynetwork
Дата 13.4.2011, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



Дело в том что файл надо "перетягивать" с фтп сервера. Что бы его скачать надо знать место куда мы его скачиваем. И наоборот что бы драгенддропнуть файл должен находиться на локальном диске. 

П.С. вариант копировать файл в папку темп и потом его драгать и дропать не подходит.
PM MAIL   Вверх
crazynetwork
Дата 15.4.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



У кого есть решение данного вопроса ?
PM MAIL   Вверх
kami
Дата 15.4.2011, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(crazynetwork @  15.4.2011,  21:29 Найти цитируемый пост)
У кого есть решение данного вопроса 

Snowy уже все сказал. Решения этого вопроса не существует. Это ограничение механизма drag&drop windows, сделанное в угоду независимости источника от приемника. объяснение. Но - есть обходные маневры решения передачи "пока отсутствующих" данных. Например, воспользуйтесь drag&drop component suite (ссылки также дал Snowy), а именно - асинхронной операцией. Второй метод (afair) - "застопориться" в drop-событии\методе, скачать файл во временную папку и продолжить выполнение drop метода.

Добавлено через 8 минут и 4 секунды
Кстати, у d&d component suite есть демки подобного "дропа" 

Это сообщение отредактировал(а) kami - 15.4.2011, 22:39
PM MAIL WWW   Вверх
crazynetwork
Дата 17.4.2011, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



Цитата(kami @ 15.4.2011,  22:39)
Цитата(crazynetwork @  15.4.2011,  21:29 Найти цитируемый пост)
У кого есть решение данного вопроса 

Snowy уже все сказал. Решения этого вопроса не существует. Это ограничение механизма drag&drop windows, сделанное в угоду независимости источника от приемника. объяснение. Но - есть обходные маневры решения передачи "пока отсутствующих" данных. Например, воспользуйтесь drag&drop component suite (ссылки также дал Snowy), а именно - асинхронной операцией. Второй метод (afair) - "застопориться" в drop-событии\методе, скачать файл во временную папку и продолжить выполнение drop метода.

Добавлено @ 22:47
Кстати, у d&d component suite есть демки подобного "дропа"

Раскопал демку AsyncSource with Filestreams. Проверил, оно там даже работает. Чего не делал повторить отдельно не получается, не работает и все тут. На форме есть листвью, в котором отображаются файлы с фтп на который я попадаю через Synapse. Помогите выдрать нужный код и заюзать его для моей задачи (drag&drop). 

procedure TForm2.Button1Click(Sender: TObject);
var i:integer;
FTPClient: TFTPSend;
begin
  FTPClient:=TFTPSend.Create;
  FTPClient.TargetHost:=host;
  FTPClient.TargetPort:=21;
  FTPClient.UserName:=login;
  FTPClient.Password:=pass;
  FTPClient.PassiveMode:=true;
  if FTPClient.Login then
   begin
     ListView1.Clear;
     FTPClient.List(FTPClient.GetCurrentDir,false);
     for i := 0 to FTPClient.FtpList.Count-1 do
       begin
         with ListView1.Items.Add do
           begin
             Caption:=FTPClient.FtpList[i].FileName;
             if FTPClient.FtpList[i].Directory then
                SubItems.Add('директория')
             else
               SubItems.Add('файл');
             SubItems.Add(DateToStr(FTPClient.FtpList[i].FileTime))
           end;
       end;
   end;
end; 






PM MAIL   Вверх
crazynetwork
Дата 30.4.2011, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



У кого то работает этот код ? :
http://articles.org.ru/cn/showdetail.php?cid=5752

Это сообщение отредактировал(а) crazynetwork - 30.4.2011, 16:39
PM MAIL   Вверх
crazynetwork
Дата 30.4.2011, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 16.10.2009

Репутация: нет
Всего: нет



На просторах инета был найден такой код:

Код

//a few units are being used, note that you do NOT have to
//install Drag and Drop Component Suite....
uses  shlobj, clipbrd,
  DragDrop, DropSource, DragDropFile, DragDropFormats,
---
//initialize DROP SOURCE...
procedure TForm1.FormCreate(Sender: TObject);
begin
  DropEmptySource1 := TDropEmptySource.Create(form1);
  DropEmptySource1.DragTypes := [dtCopy];
  DataFormatAdapterSource := TDataFormatAdapter.Create(form1);

  DataFormatAdapterSource.DataFormatName := 'TVirtualFileStreamDataFormat';
  DataFormatAdapterSource.DragDropComponent := dropemptysource1;
  dataformatadaptersource.Enabled := true;

  (DataFormatAdapterSource.DataFormat as TVirtualFileStreamDataFormat).OnGetStream := OnGetStream;
end;

---
// Dragging procedure... you can use either DragDetectPlus (from component) during
// MouseDown event or simply use TComponent's dragging = automatic... NOTE you
// must give the name of the file (as it will appear for drop TARGET) here.

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
    if DragDetectPlus(Handle, Point(X,Y)) then begin
      if listview1.Selected = nil then exit;
      TVirtualFileStreamDataFormat(DataFormatAdapterSource.DataFormat).FileNames.Clear;
     

TVirtualFileStreamDataFormat(DataFormatAdapterSource.DataFormat).FileNames.Add(listview1.Selected.Capti

on);
      DropEmptySource1.Execute;
    end;
end;
---

---
// This procedure will happen immediately after drop has been made from application; note
// that we already have provided the file name so we still have to feed contents :)

// instead of source file, if you want to have memo1.contents to the "copied" file,
// you would use :
// Stream := TMemoryStream.Create;
// Stream.Write(memo1.text[1],length(memo1.text));
// Stream.Seek(0,soFromBeginning);

procedure TForm1.OnGetStream(Sender: TFileContentsStreamOnDemandClipboardFormat;
  Index: integer; out AStream: IStream);
var
  Stream: TStream;
  fn:string;
begin
  // This event handler is called by TFileContentsStreamOnDemandClipboardFormat
  // when the drop target requests data from the drop source (that's us).
  fn := 'whateversourcefile';
  Stream := TFileStream.Create(fn,fmOpenRead or fmShareDenyNone);
  try
    // Write the file contents to a regular stream...
    // ...and return the stream back to the target as an IStream. Note that the
    // target is responsible for deleting the stream (via reference counting).
    AStream := TFixedStreamAdapter.Create(Stream, soOwned);
  except
    Stream.Free;
    raise;
  end;
end;



Но при копировании файла создается пустой файлик с размером 0 и все.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.