![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Здравствуйте.
Я уже неделю пытаюсь решить одну задачу: нужно поверх формы и всех присутствующих контролов нарисовать линию, а потом стереть. Пытался решить следующими способами: 1) вызвать у формы и у всех дочерних компонентов Invalidate, затем нарисовать линию. Этот способ, во-первых, плох тем, что нужно перерисовывать все из-за какой-то линии, а во-вторых, мне не удалось его реализовать . 2) нарисовать линию XOR-маской и затем ее отксорить еще раз. Вот это я просто не знаю как сделать. Во всех случаях я рисую получив контекст обьекта Screen, чтобы линия была поверх контролов. Я думаю, что второй способ реализовать невозможно, потому что я рисую на Screen'е, а контролы у меня как-бы под ним, так вряд ли получится как-то считать цвета их точек. Может кто-нибудь уже сталкивался с такой проблемой? P.S. Ой, забыл сказать, я ведь рисую линию с заданной точки до текущего положения мышки. Поэтому я перерисовываю линию каждый раз (при движении мыши) и мне ее надо стирать с экрана. В этом и проблема, что я не могу ее стереть. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| МММ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 18.6.2002 Репутация: нет Всего: 1 |
А если форму (ы) прорисовывать!!!
With TCanvas.Create Do try form1.Refresh; Handle:=GetDC(0); Pen.Color:=random(color); pen.Mode :=pmNotXor ; MoveTo(form1.Left+ 10,form1.top +10); LineTo(form1.Left+x,form1.top+y); finally Free; end; можно здесь X , Y глобальные переменные координат мышки брать |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Мне надо нарисовать поверх формы и всех контролов!!! По этому я рисую на объекте Screen. Получаю его DC через Handle...
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Ого! А это и правда работает! Только я сделал так:
with TCanvas.Create do try Handle:=GetDC(0); Pen.Color:=clBlack; Pen.Mode :=pmNotXor ; MoveTo(FOldX, FOldY); LineTo(Mouse.CursorPos.X, Mouse.CursorPos.X); finally Free; end; Только я не понимаю почему тут в первой строке так написанно. Я всегда думал, что DC и Handle - разные вещи. Спасибо МММ! -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Handle - это абстракция, как вам известно это числовой индификатор какого-то объекта(в данном случае объекта виндос). Скорее всего это какой-то указатель для внутреннего пользование системой. Короче говоря, handle есть практически у любого объекта виндос и VCL во всех своих компонентах его везде одинакого называет. Соотсветсвенно TCanvas.Handle - это хэндл device context'а как TWinColntrol.Handle - хэндл окна, или TFont.Handle - хэндл фонта.
-------------------- Волны гасят ветер... |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Спасибо, Fantasist. Я посмотрел тип свойства Handle у Canvas, он и правда HDC! А я всегда думал, что он как у всех компонентов.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |