Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
1

DragAndDrop в массивах компонентов

15.03.2012, 15:44. Показов 753. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.

Возникла такая проблема:
Есть форма, на ней панель и Image. На панель кладется динамичски создаваемый массив фреймов.
Фрейм простой: панель, на ней Image и Lable.

Нужно:
реальзовать перенос рисунка с основного Image на любой выбранный Image массива фреймов.

Сделано:
прописал 2 процедурки (DragOver и DragnDrop). Их впихиваю их к каждому Image из массива.

Проблема:
при жестком указании на определенный индекс массива (Massive[2].Picture:=form1.Picture) все работает. Но без указания не могу выделить индекс массива под курсором...

Ширина панели - динамическая.
Ширина элемента массива - динамическая. Строится из ширины панели div кол-во элем. массива.

С удовольствием приму альтернативные варианты.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2012, 15:44
Ответы с готовыми решениями:

Компоненты, типы компонентов, классы компонентов в Delphi
Какие есть типы и классы компонентов в Delphi?

Создание Delphi-компонентов. Правила создания компонентов
Текстовый файл содержит несколько вопросов и 4 варианта ответа , из которых только один...

Осуществление DragandDrop
Доброго времени суток. У меня возникла следующая проблема при осуществлении DragAndDrop. Вот код: ...

DragAndDrop free on Layout
Привет, честно искал, но того, что нужно, не нашел. Я хочу перетаскивать view элементы по...

3
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
16.03.2012, 10:59  [ТС] 2
С опозданием, но выкладываю свою наработку:
Массиф фреймов.zip

Но, в основном, меня интересует вот это место:
Delphi
1
2
3
4
5
procedure TForm1.MyDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  if (Sender is TFrame2) then
    (Sender as TFrame2).FrameImage.Picture:=form1.Image1.Picture;
end;
Оно не работает...
0
1173 / 479 / 83
Регистрация: 04.03.2010
Сообщений: 1,019
17.03.2012, 10:36 3
Значит смотри какая штука была:
Delphi
1
2
3
4
if (Sender is TFrame2) then
...
 frameimage.OnDragDrop:=form1.MyDragDrop;
 frameimage.OnDragOver:=form1.MyragOver;
По последним строкам видна установка обработчиков для TImage, значит у этого самого обработчика параметр Sender будет иметь класс TImage и условие как следствие этого не выполнится.

Решил проблему следующим образом:
Сделал "сквозной бросок".
Принцип простой, раз выше идёт проверка на принадлежность к классу TFrame2, то пускай за все "броски" и отвечает этот класс. Т.е. он будет выступать в качестве приёмника, либо передатчика (до этого имага в классе была приёмником\передатчиком). Когда вызывается обработчик кортинки, внутри него вызывается обработчик созданного класса и параметр Sender будет указывать на экземпляр этого класса.

(1) Добавил в класс TFrame2 обработчики D&D для FrameImage.

Delphi
1
2
3
4
5
6
7
8
9
10
procedure TFrame2.Image_DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
 OnDragDrop(Self,Source,X,Y);
end;
 
procedure TFrame2.Image_DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  OnDragOver(Self,Source,X,Y,State,Accept);
end;

(2) Переопределил конструктор и в нём присвоил обработчики (и внёс установку свойства в него )
Delphi
1
2
3
4
5
6
7
8
constructor TFrame2.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
 
 FrameImage.OnDragDrop := Self.Image_DragDrop;
 FrameImage.OnDragOver := Self.Image_DragOver;
 frameimage.DragMode:=dmAutomatic;
end;
P.S. Можно попридумывать и другие способы решения проблемы, этот первый что пришёл в голову.
Вложения
Тип файла: zip Массиф фреймов (New).zip (651.4 Кб, 6 просмотров)
1
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
17.03.2012, 11:05  [ТС] 4
Элегантно!
0
17.03.2012, 11:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2012, 11:05
Помогаю со студенческими работами здесь

В массивах G(8), K(19) определить кол-во и произведение элементов меньших 26 в двух заданных массивах (6;34)
Задать два одномерных массива значений, чтобы величины элементов массивов попадали в заданный...

DragAndDrop файлов Windows в WPF приложение
Здравствуйте! Проблема с перетаскиванием файла Windows в WPF приложение. По событию открывается...

Разработка приложений с использованием стандартных и дополнительных компонентов. Динамическое создание компонентов.
Здравствуйте! Помогите мне, пожалуйста. Условие задачи состоит в следующем: из списка выбираю...

Найти сумму всех компонентов и произведение отрицательных компонентов файла
Создать числовой файл F. Найти сумму всех компонентов и произведение отрицательных компонентов...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru