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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> dragdrop и все все все, TDragObject 
:(
    Опции темы
gonzales
Дата 4.12.2012, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Приветствую уважаемые форумчане!

Решил сделать сделать такой Drag-and-Drop, чтобы перетаскиваемый Image двигался за курсором.

Реализация такая
Код

type

   TDragPanel = class (TDragControlObject)
   protected
     function GetDragImages: TDragImageList; override;
   end;


procedure TForm1.pictStartDrag(Sender: TObject; var DragObject: TDragObject);
  begin
    DragObject:= TDragPanel.Create(sender as tpreviewimage);
    DragObject.AlwaysShowDragImages:=true;
  end;

function TDragPanel.GetDragImages: TDragImageList;
 begin
   Result := TDragImageList.Create(nil);
   Result.Width:=(Control as tpreviewimage).Picture.Bitmap.Width;
   Result.Height:=(Control as tpreviewimage).Picture.Bitmap.Height;
   Result.SetDragImage(Result.AddMasked((Control as tpreviewimage).Picture.Bitmap,clNone), 0, 0);
 end;



tpreviewimage - наследник от Image

Но столкнулся с проблемой, DragObject:= TDragPanel.Create создает объект типа TDragPanel, который естественно не ассептится приемником dragdropa.

Добавил его в список разрешенных

Код

procedure TForm1.Image1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
  begin
    Accept :=  (Source is TPreviewImage)
    or (Source is TPreviewClipart)
    or (Source is TPreviewMask)
    or (Source is TPreviewFrame)
    or (Source is TDragPanel); //добавил
  end;


но у меня естественно не отрабатываются функции Image1DragDrop, которые анализируют Source и в зависимости от типа отрабатывают разному. Например вот так

Код

    if Source is TPreviewBack then
      begin
       Form1.PlaceBackground((Source as TPreviewBack).filename);

      end
    else if Source is TPreviewTemplate then
      begin
        Form1.Placetemplate((Source as TPreviewTemplate).name);
      end


По существу получается - теряется обратная связь между объектом TDragPanel и исходным объектом

Вопрос, как с минимальными потерями все-таки реализовать такую фишку.


Это сообщение отредактировал(а) gonzales - 4.12.2012, 14:43
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
PM MAIL   Вверх
gonzales
Дата 7.12.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



ну в общем сделал сам.
мне не нравиться конечно, но как иначе - не пойму
Код

  TDragImage = class (TDragControlObject)
   private
     FPrImage:TPreviewImage;
   protected
     function GetDragImages: TDragImageList; override;
   published
    property PrImage: TPreviewImage read FPrImage write FPrImage; // Свойство spath
   end;


прицепом вожу с объектом Dragimage исходный объект
--------------------
- мастер, мастер, запорол..., все четыре запорол!!!- я ж тебе только три давал!!!???- да я и образец запорол!!!!
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.0599 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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