Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
Drag&Drop и рисование
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Drag&Drop и рисование (Прочитано 10172 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Andy
Гость
Drag&Drop и рисование
«
:
13-04-2004 23:26 »
Доброго времени суток!
Есть проблема: неверная (частичная) отрисовка канваса (объект от TGraphicControl) при событии OnDragOver с DragImageList...
Написал вопрос - сам туго понимаю, но, кто сталкивался, поймет и поможет в решении проблемы...
Записан
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
Drag&Drop и рисование
«
Ответ #1 :
14-04-2004 09:20 »
а можно код в студию?
Записан
я люблю shelek.ru
Александр
Опытный
Offline
Пол:
Угадай кто?
Drag&Drop и рисование
«
Ответ #2 :
14-04-2004 14:30 »
Поподробнее что именно и где не полностью отрисовывается? А то на вскидку сказать трудно.
Записан
Бороться и искать, найти и перепрятать.
Anonymous
Гость
Drag&Drop и рисование
«
Ответ #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
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
Drag&Drop и рисование
«
Ответ #4 :
14-04-2004 16:11 »
а какие, собственно, контролы? от кого унаследованы?
у меня пока две идеи: перекрашивать контрол через Invalidate, или выставлять прозрачность у DragImage (можно, в принципе, и в битмапе перед добавлением).
Записан
я люблю shelek.ru
Andy
Гость
Drag&Drop и рисование
«
Ответ #5 :
15-04-2004 13:45 »
Цитата: x77
а какие, собственно, контролы? от кого унаследованы?
от TGraphicControl...
у меня пока две идеи: перекрашивать контрол через Invalidate, или выставлять прозрачность у DragImage (можно, в принципе, и в битмапе перед добавлением).
Все так и есть... Более подробно о проблеме: DragOver возникает, когда курсор заходит на контрол. Вместе с этим начинается отрисовка фокуса контрола. Но в это время некоторый кусок DragImage уже находится над контролом, и как раз регион пересечения DragImage и контрола не перерисовывается...
Записан
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
Drag&Drop и рисование
«
Ответ #6 :
16-04-2004 10:31 »
Andy
, т.е. прозрачность выставлена? а от кого, всё-таки, унаследованы контролы?
Записан
я люблю shelek.ru
Andy
Гость
Drag&Drop и рисование
«
Ответ #7 :
16-04-2004 12:10 »
Цитата: x77
Andy
, т.е. прозрачность выставлена? а от кого, всё-таки, унаследованы контролы?
Контролы яж сказал от TGraphicControl...
в общем проблему решил! нашел вот что:
при драг-н-дропе DragImage делает LockWindowUpdate родительского окна. И поэтому невозможно отрисовать область родителя над которой находится DragImage
проблема решается так :
//
ImageList_DragShowNolock(FALSE);
...Рисуем все что хотим;
ImageList_DragShowNolock(TRUE);
//
Вот так. Всем спасибо за участие. Тема закрыта
Записан
Александр
Опытный
Offline
Пол:
Угадай кто?
Drag&Drop и рисование
«
Ответ #8 :
20-04-2004 13:51 »
Пожалуйста!
Записан
Бороться и искать, найти и перепрятать.
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
Delphi
(Модератор:
x77
) > Тема:
Drag&Drop и рисование
Загружается...