Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Drag&Drop и рисование  (Прочитано 9647 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Andy
Гость
« : 13-04-2004 23:26 » 

Доброго времени суток!
Есть проблема: неверная (частичная) отрисовка канваса (объект от TGraphicControl) при событии OnDragOver с DragImageList...

Написал вопрос - сам туго понимаю, но, кто сталкивался, поймет и поможет в решении проблемы...
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #1 : 14-04-2004 09:20 » 

а можно код в студию?
Записан

Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #2 : 14-04-2004 14:30 » 

Поподробнее что именно и где не полностью отрисовывается? А то на вскидку сказать трудно.
Записан

Бороться и искать, найти и перепрятать.
Anonymous
Гость
« Ответ #3 : 14-04-2004 15:48 » 

Суть такова: при начале Drag-n-Drop для контрола "Control1" создаю DragImage - копия самого контрола:
...
  B := TBitmap.Create;
  DIL := TDragImageList.Create(Self);
  B.Canvas.CopyRect(ClientRect, Canvas, ClientRect)
  DIL.Add( B, nil );
  DIL.SetDragImage( 0, P.X + X, P.Y + Y) ;
....
Потом при событии OnDragOver других контрола "Control2,3 и т.д" хочу их перекрашивать в другой цвет, чтоб было видно над каким конролом происходит DragOver (как это сделано например в виндовом Проводнике когда перетаскиваем файлы на какой-нить папкой):

...
procedure DesignItem1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if (Source is TDesignItem) then
  with (Source as TDesignItem) do
   begin      
     Canvas.Brush.Color := clYellow;
     Canvas.FillRect(ClientRect);
   end;
end;
...
Все отрабатывается, но не происходит заливка куска канваса кот. пересекается с куском DragImage...
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 14-04-2004 16:11 » 

а какие, собственно, контролы? от кого унаследованы?

у меня пока две идеи: перекрашивать контрол через Invalidate, или выставлять прозрачность у DragImage (можно, в принципе, и в битмапе перед добавлением).
Записан

Andy
Гость
« Ответ #5 : 15-04-2004 13:45 » 

Цитата: x77
а какие, собственно, контролы? от кого унаследованы?

от TGraphicControl...

у меня пока две идеи: перекрашивать контрол через Invalidate, или выставлять прозрачность у DragImage (можно, в принципе, и в битмапе перед добавлением).


Все так и есть... Более подробно о проблеме: DragOver возникает, когда курсор заходит на контрол. Вместе с этим начинается отрисовка фокуса контрола. Но в это время некоторый кусок DragImage уже находится над контролом, и как раз регион пересечения DragImage и контрола не перерисовывается...
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #6 : 16-04-2004 10:31 » 

Andy, т.е. прозрачность выставлена? а от кого, всё-таки,  унаследованы контролы?
Записан

Andy
Гость
« Ответ #7 : 16-04-2004 12:10 » 

Цитата: x77
Andy, т.е. прозрачность выставлена? а от кого, всё-таки,  унаследованы контролы?


Контролы яж сказал от TGraphicControl...
в общем проблему решил! нашел вот что:
при драг-н-дропе DragImage делает LockWindowUpdate родительского окна. И поэтому невозможно отрисовать область родителя над которой находится DragImage Жаль
проблема решается так :

//
ImageList_DragShowNolock(FALSE);
...Рисуем все что хотим;
ImageList_DragShowNolock(TRUE);
//
Вот так. Всем спасибо за участие. Тема закрыта
Записан
Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #8 : 20-04-2004 13:51 » 

Пожалуйста!
Записан

Бороться и искать, найти и перепрятать.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines