Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.01.2015, 22:13   #1
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию Линия(закраска)

Я делаю графический редактор и столкнулся с такой проблемой. Мне надо повторить функцию линии пеинта. Объясните как добиваются такого эффекта(то есть я нажал на место формы один раз и линия будет следовать за курсором пока не нажму второй раз). У меня вышло сделать так, но приходится после каждой линии закрашивать фон, а мне надо, что бы закрашивалась лишь последняя линия.
Основной вопрос = Как закрашивать саму линию?

Код прорисовки линии
Код:
    Image1.Canvas.FillRect(ClientRect);
    Image1.Canvas.Pen.Color := ColorDialog1.Color;
    Image1.Canvas.MoveTo(X,Y);
    Image1.Canvas.Pen.Width := 1;
    Image1.Picture.Bitmap.Canvas.LineTo(x2,y2);
Khad515 вне форума Ответить с цитированием
Старый 11.01.2015, 22:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Закрашивать то предыдущую можно прорисовав её цветом фона. А если линия поверх чего-то ранее прорисованного идет, тогда как?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.01.2015, 22:23   #3
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Закрашивать то предыдущую можно прорисовав её цветом фона. А если линия поверх чего-то ранее прорисованного идет, тогда как?
Вот и я хочу понять как закрашивать саму линию, не трогая уже нарисованное. Можешь сказать как линию просто зарисовать цветом фона( не сам фон, а линию?

Последний раз редактировалось Khad515; 11.01.2015 в 22:26.
Khad515 вне форума Ответить с цитированием
Старый 11.01.2015, 23:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Перу цвет фона и рисуй. Но все что под линией тоже этим цветом выкрасится. Обычно все прорисовывают по-новой. Как вариант элементы рисунка сделать объектами, каждый сам себя прорисовывает, в нужной последовательности само собой
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.01.2015, 23:36   #5
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Перу цвет фона и рисуй. Но все что под линией тоже этим цветом выкрасится. Обычно все прорисовывают по-новой. Как вариант элементы рисунка сделать объектами, каждый сам себя прорисовывает, в нужной последовательности само собой
Если просто надо перо сделать цветом фона, то выходит не тот эффект который надо. Мне надо получить эффект движущейся линии. То есть что бы я задал точку начала линии и сразу же конец линии становился в курсоре(это понятно). Но проблема в том, что провожу курсором по полотну, то по себе остается след(пример в скрине). Или я тебя не правильно понял.

Ну и вот почему я спрашивал. Я хочу что бы следа не было, что бы когда я вожу линией за ней не прорисовывались еще одни линии. То есть мне надо, что бы я нарисовал линию, а при след. выполнении события MouseMove прошлая линия закрашивалась, и прорисовывалась другая линия
Изображения
Тип файла: jpg PaintDelphi1.jpg (115.7 Кб, 118 просмотров)

Последний раз редактировалось Khad515; 11.01.2015 в 23:39.
Khad515 вне форума Ответить с цитированием
Старый 12.01.2015, 01:11   #6
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Khad515 Посмотреть сообщение
Я делаю графический редактор и столкнулся с такой проблемой. Мне надо повторить функцию линии пеинта.
В прилагаемых к дельфям демках есть и демка графического редактора, где всё это очень просто реализовано...
Нужно почаще "смотреть под ноги" - ответы на львиную долю вопросов находятся у вас на компьютере, в каталоге Demos...
kropotkina-alice вне форума Ответить с цитированием
Старый 12.01.2015, 13:36   #7
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
В прилагаемых к дельфям демках есть и демка графического редактора, где всё это очень просто реализовано...
Нужно почаще "смотреть под ноги" - ответы на львиную долю вопросов находятся у вас на компьютере, в каталоге Demos...
Ну я то нашел исходники... но вот понять алгоритм не могу. В демке используются собственно созданные процедуры + демка не запускается(. Может кто объяснить, как сделать?

Последний раз редактировалось Khad515; 12.01.2015 в 15:15.
Khad515 вне форума Ответить с цитированием
Старый 12.01.2015, 14:12   #8
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от Khad515 Посмотреть сообщение
Ну я то нашел исходники... но вот понять алгоритм не могу. В демке используются собственно созданные процедуры + демка не запускается не запускается(. Может кто объяснить, как сделать?
Так запускается или не запускается?
Какие "собственно созданные процедуры"?
Вам интересны всего три процедурки - FormMouseDown, FormMouseMove и FormMouseUp...
Что в них такого супер-пуперского и непонятного???
P.S.
Да, а самая вам интересная процедура - DrawShape...

Последний раз редактировалось kropotkina-alice; 12.01.2015 в 14:35.
kropotkina-alice вне форума Ответить с цитированием
Старый 12.01.2015, 15:06   #9
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Так запускается или не запускается?
Какие "собственно созданные процедуры"?
Вам интересны всего три процедурки - FormMouseDown, FormMouseMove и FormMouseUp...
Что в них такого супер-пуперского и непонятного???
P.S.
Да, а самая вам интересная процедура - DrawShape...
Не, те процедуры я знаю)
демка не запускается, но я могу просмотреть код. Да, я не могу понять как работает эта процедура, вообще как выполняется этот алгоритм линии. Можете рассказать?

Последний раз редактировалось Khad515; 12.01.2015 в 15:18.
Khad515 вне форума Ответить с цитированием
Старый 13.01.2015, 15:51   #10
Khad515
Пользователь
 
Регистрация: 11.01.2015
Сообщений: 29
По умолчанию

Короче. Я сделал через доп. имейдж. Линию рисовал на доп. image(который находится над основным image и имейдж доп. - прозрачный). В общем работает зашибись, но есть 1 минус.

Незнаю как обьяснить. Когда рисуешь линию на прозрачном доп. image, фон который находится под дополнительным(то есть основной как бы вылазит поверх прозрачного(тоесть полосы появляются при движении, незнаю как еще обьяснить). Герой который меня понял, отзовись)
Khad515 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закраска ячеек в гриде cL1zMa Общие вопросы Delphi 2 07.10.2014 13:30
Закраска строк в Tstringgrid Алексей_2012 Общие вопросы Delphi 5 15.12.2013 21:24
Закраска диаграммы armagedon_atyrau Microsoft Office Excel 0 15.06.2010 12:48
Закраска Chyvis Помощь студентам 0 13.01.2010 09:31