Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Drag & Drop, из приложения 
:(
    Опции темы
z-END
Дата 16.2.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



каким способом можно организовать алгоритм перетаскивания из моего приложения в другие, также как это организовано например в WinRAR?
нашел один топик по этой теме, но слабоват я в этомsmile может кто поподробней разжевать может?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 16.2.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



PM MAIL   Вверх
z-END
Дата 16.2.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



эм.. я это в DRKB все смотрел.. кроме http://forum.vingrad.ru/index.php?act=modu...mp;article=2513 ниче мне неподходит.. и то там не реалзован механизм "перетаскивания" а используется просто "вставка" smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
z-END
Дата 20.2.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Снови, так что мне делать? smile


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 20.2.2006, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Тут нужно курить очень много доки по COM.
В частности по IDropSource и IDataObject.
Как грится, M$ постаралась, чтобы процесс перетаскивания реализовать было легко и удобно - всего парой сотен строк кода.

Прогулялся на тори. В основном все либо платное, либо старое.
http://www.torry.net/pages.php?id=233 - вот более-менее подходящая штуковина.
Реализует нужные интерфейсы. Правда для 5-й дельфи, но хоть что-то.

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


Эксперт
****


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

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



Щас у себя проверил.
Проинсталилось без проблем на семерку.
Вот, нарисовал код:
Код
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DropSource, ComCtrls, ImgList;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    DropFileSource1: TDropFileSource;
    procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    Draggging: boolean;
    DPoint: TPoint;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  DPoint.X := X; DPoint.Y := Y; Draggging := false;
end;

procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  li: TListItem;
begin
  if Draggging then exit;
  Shift := (Shift * [ssLeft,ssRight]);
  if  (Shift = []) or ((abs(DPoint.X - X) <10) and (abs(DPoint.Y - Y) <10)) then
    exit;
  if Listview1.SelCount = 0 then exit;
  DropFileSource1.Files.Clear;
  li := ListView1.Selected;
  while li<>nil do
  begin
    DropFileSource1.Files.Add('C:\' + li.Caption);
    li := ListView1.GetNextItem(li, sdBelow, [isSelected]);
  end;
  Draggging := true;
  DropFileSource1.execute;
  Draggging := false;
end;

end.
Для проверки нужно на форму бросить TDropFileSource и TListView.
В TListView запихать список файлов (в примере файлы лежат на C:\). Поставить MultiSelect в true (не обязательно).
После этого можно спокойненько таскать "файлы" из листбокса куда угодно.
PM MAIL   Вверх
RA
Дата 20.2.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


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

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



От хорошо что я эту тему заметил smile

Помогут тебе компоненты Raize DropMaster.

Остальные вопросы по этим компонентам через PM.

PM   Вверх
z-END
Дата 22.2.2006, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



блин.. ну намучлася я с ними...
во всех компонентах реализован такой вариант:
Цитата(Snowy @ 20.2.2006, 22:13 Найти цитируемый пост)
Draggging := true;
  DropFileSource1.execute;
  Draggging := false;

и вот этот на этот самый execute никак неповлиять... мне ненужен вариант простого копирования, нужен вариант аналогично как в winRAR перетаксивание вызывает за собой процесс разархивации во временную папку а потом перемещение в уже указанную. т.е. из контрола (листвью, листбокс и т.п. это непринципаильно) нужно перетащить столбцы, при этом должны создасьтся файлы (которые имеют имена отличные от указанных в списке, данные в них заполняются из других файлов) при этом процесс копирования нужно осуществлять собственной процедурой.
а во всех подобных контролах весь процесс сводится к TComponent.execute smile
че делать?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 22.2.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Ну и хорошо.
Отдаешь компоненту имена файлов во временной папке (файлов пока нет).
На событие OnDrop вешаешь разархивацию. Файлы появляются.
Добавлено @ 14:21
Вот. Заглянул в справку по этому событию. Там как раз и написано, что оно и предназначено для
Цитата
This event is particularly useful when dragging files from a zipped archive or an internet site into the file system.

Добавлено @ 14:22
Там даже полноценный пример есть, как с ним работать.
PM MAIL   Вверх
z-END
Дата 22.2.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(Snowy @ 22.2.2006, 14:18 Найти цитируемый пост)
Отдаешь компоненту имена файлов во временной папке (файлов пока нет).
На событие OnDrop вешаешь разархивацию. Файлы появляются.

это гутsmile
но елси у меня файлы по 50 метров... копирование их методом execute убьет приложение минуты на 2, а я этого нехочу...


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 22.2.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



С чего ты решил, что убъет?
Копированием будет заниматься принимающая программ, а не твоя.
А при распаковке - тебе решать, будет твоя отвечать или нет.
PM MAIL   Вверх
z-END
Дата 22.2.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

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



Цитата(Snowy @ 22.2.2006, 14:38 Найти цитируемый пост)
Копированием будет заниматься принимающая программ, а не твоя

может быть и так, но в win2K при drag&drop между приложениями виснут оба до конца выполнения обработки...
т.е. если я из проводника пертащу файлы в фотошоп к примеру, то ни проводник ни фотофоп небудут доступны пока все файлы неоткроются в фотошопе.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
Snowy
Дата 22.2.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Хм. Логично. Тем более, что тебе нужно удалить файлы из временной папки.
Частично тут может помочь установка Dragtypes в [dtMove] .
Правда поможет только в том случае, когда временная папка находится на том же диске, что и target.
Добавлено @ 14:53
Кстати. Кроме этого ты спокойно можешь вынести Execute в другой Thread.
Тогда никакой задержки не будет.
Пусть другой тред выполняет распаковку и ожидание окончания операции.
Добавлено @ 15:00
Я тут еще подумал. Еще логичней будет создавать TDropFileSource динамически.
Тогда ты сможешь спокойно перетаскивать файлы еще раз, в то время, пока предыдущая операция по перетаскиванию продолжает работать в фоне.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

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

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


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

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

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


 




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


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

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