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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы Drag and Drop 
V
    Опции темы
DarkProg
Дата 25.5.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Вот маюсь уже который день с вновь обострившейся проблемой(ну заглох у меня проект на какое-то время и поиск решения отложил, а теперь надо)

В общем проблема в том что при перетаскивании из одно скролбокса объекта TStaticText в 95% случаев всё происходит нормально, но в остальных 5 случаях объект висит в воздухе, т.е. к скролбоксу он не пристыковался(по немонятной мне причине)

Также если на объекте TStaticText  выполнить счелчок мышкой, то тоже самое - висит в воздухе, тоже самое происходит при перетаскивании на практически любые расстояния внутри одно скролбокса.

Объясните мне что не так, я файл проекта со всеми настройками приложил в атаче(здесь только необходимое для решения конкретной задачи и всего проекта над которым работаю нет, потому как ненужно)

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  ________________________________________________.rar 311,40 Kb


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 26.5.2010, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Я не пойму что никто не знает решение этой проблемы  smile 


Я считал, что я искать не умею, ан нет не похоже...


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kami
Дата 26.5.2010, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(DarkProg @  26.5.2010,  16:44 Найти цитируемый пост)
 никто не знает решение этой проблемы

Вполне возможно.
Я недавно начал работать с D2010, и ко всему прочему - не сталкивался с необходимостью Drag and Dock, удалось победить только 
Цитата(DarkProg @  25.5.2010,  21:31 Найти цитируемый пост)
если на объекте TStaticText  выполнить счелчок мышкой, то тоже самое - висит в воздухе, 

что для полного решения проблемы, конечно, мало.
PM MAIL WWW   Вверх
DarkProg
Дата 26.5.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Цитата(kami @  26.5.2010,  18:11 Найти цитируемый пост)
удалось победить только 

Как???
В принципе проблема была и в более разных версиях делфи, т.е. это от версии не зависит.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
kami
Дата 26.5.2010, 21:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(DarkProg @  26.5.2010,  21:13 Найти цитируемый пост)
В принципе проблема была и в более разных версиях делфи, т.е. это от версии не зависит.

Да я не спорю, но мне вообще не приходилось сталкиваться с Drag&Dock - не было необходимости.
Код того, как решено:
Код

procedure TForm1.StaticText1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  fx := X;
  fy := Y;
  // запомнили координаты нажатия.
end;

procedure TForm1.StaticText1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
  if (fx <> 0) and (fy <> 0) then
    if (Abs(fx - X) > 10) or (Abs(fy - Y) > 10) then
    // если нажатую мышку переместили более чем на 10 пикселей,
    // можно считать, что перетаскивание начато.
      StaticText1.BeginDrag(True);
end;

procedure TForm1.StaticText1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  fx := 0;
  fy := 0;
  // забыли координаты нажатия.
end;

PM MAIL WWW   Вверх
DarkProg
Дата 26.5.2010, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Хорошо попробую в том же ключе домыслить и остальную проблему.

Спасибо, kami


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Dapo
Дата 27.5.2010, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



StaticText при докинге меняет парента на TCustomDockForm, потому и "висит". Докинг начинается сразу после того как мышку опустили на контрол. При перетаскивании на другой скроллбокс докинг считается завершенным, и парентом становится другой скролбокс... Ну а если на одном и том же - событие EndDock не происходит ... вот и висит на TCustomForm...  дальше не копал. Наверное особенности реализации механизма??? 
PM MAIL   Вверх
DarkProg
Дата 27.5.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Цитата(Dapo @  27.5.2010,  08:27 Найти цитируемый пост)
StaticText при докинге меняет парента на TCustomDockForm, потому и "висит". Докинг начинается сразу после того как мышку опустили на контрол. При перетаскивании на другой скроллбокс докинг считается завершенным, и парентом становится другой скролбокс... Ну а если на одном и том же - событие EndDock не происходит ... вот и висит на TCustomForm...  дальше не копал. Наверное особенности реализации механизма???  


Событие EndDock происходит даже если таскать в пределах одного скролбокса, но как я описал выше проблема проявляется периодически и как её решить я не знаю...


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Dapo
Дата 27.5.2010, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

В любом случае нужно копать в сторону парента, или делать свой dock.

Это сообщение отредактировал(а) Dapo - 27.5.2010, 10:45
PM MAIL   Вверх
DarkProg
Дата 27.5.2010, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Цитата(Dapo @  27.5.2010,  10:42 Найти цитируемый пост)
В любом случае нужно копать в сторону парента, или делать свой dock.

этим и занимаюсь прада сейчас не очень плотно, потому как ёпрст некоторые преподователи бесполезных предметов считают свои предметы самыми нужными и посему т*********** мой мозг.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
DarkProg
Дата 28.5.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

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



Ладно рассказываю как решается сия проблема, может кому понадобится.

В один из скролбоксов помещаем элемент у этого элемента задаём всё чтобы его можно было таскать(я использовал панельку), потом выполняем по нему один клик и начинаем таскать все остальные элементы - всё рульно.

Програмный клик тоже работает, только не путать с Panel1.Click - это не катит.

Да кстати решение то оказывается было, просто я забыл о нём...

Всё тема закрыта.


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
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.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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