![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| DelphiFun |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Имеется 2 компонента TImage: Image1, Image2.
Image2 поверх Image1 ( размеры обоих идентичны ). Image2.Visible по загрузке у меня False. На Image1 производится отрисовка через Image1.Canvas. После того, как я отображаю Image2 ( код на кнопке ):
Все заливается белым, не видно прошлого Image1. Разве Image2.Transparent:=true; недостаточно для того, чтобы первый компонент был виден? Как можно сделать так, что когда ( пустой ещё ) Image2 только становится быть видимым, чтобы при этом виделся и прошлый Image1? Кстати, ещё проблемка такая есть... При том же расположении ( размеры Image'ев одинаковые ), когда "рисуешь" ( реализовано простейшим соединением линией текущей и прошлой точки ) на Image2 всё начинает моргать и DoubleBuffered:=True; не решает ситуацию. Как можно обойти эту проблему? Добавлено @ 03:07 Хм, первую проблему вроде бы решил. После Image2.Visible:=true; можно сделать:
что и нужно, Image2 действительно прозрачна и соответственно виден Image1; Не поверите, но 3 часа сегодня пробился с этой проблемой, написал сообщение в форум и тут же нашёл ответ А вот со второй проблемой ( когда всё жутко моргает, видно как перерисовывается ) с этим не знаю что делать.. Подскажите, а? |
||||
|
|||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Проблема даже интереснее. Делаю:
рисую на нём и мелькает так, что виднеется Image1, хотя Image НЕ прозрачный.. |
|||
|
||||
| ivan219 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Может с ночало на рисовать обе картинки или одну а потом зделать эти картинки видимыми т.е.
и на обеих вкл.
|
||||
|
|||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
неа, тоже не прокатывает.. Всё равно изображение мелькает.
Причем и вот это уже проделывал:
и со второй тоже самое проделывал и хоть ты тресни! Как отключить эту перерисовку?? |
|||
|
||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 704 Регистрация: 19.1.2006 Где: Новосибирск Репутация: 1 Всего: 20 |
используй ImageList, и один Image, и будет тебе счастье
-------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| Paradise |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 22.11.2006 Репутация: нет Всего: нет |
Действительно, зачем тебе два Image, используй один: 1) создается две процедуры (одна для фона, другая для линий (или что ты там рисуешь)); 2) в определенном месте кода, или при определенном событии используешь эти процедуры. Попробуй |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
ещё имеет смысл включить для формы DoubleBuffered := TRUE. тогда чтобы у тебя не лежало на этой форме, оно сначала будет отрисовываться на виртуальный bitmap, и по идее, мерцания там не будет.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
x77
Я в первом сообщении написал, что не решило это проблемы в моём случае. Paradise Ну вообще проблема у меня в следующем. Имеется некоторый рисунок отрисованный на канве. Нужно скажем нарисовать линию. Рисуется она как в MSPaint зажимаешь кнопку мыши, ведёшь и отпускаешь. Цвет фона у меня белый. Когда происходит процесс "ведёшь" - я реализую это просто. Рисую следующую линию, прошлую закрашиваю цветом фона, белым. Но получается, что и рисунок на канве также затирается этими белыми линиями. Чтобы как-то выйти из этой ситуации. Я решил расположить 2 TImage. На одном ( нижнем ) основной рисунок, на переднем ( прозрачном ) рисуем линию, после того как рисовании линии закончено кидаем её на задний фоновый. Всё бы ничего, но как начало моргать Что-то не понял я твоего хода мысли про 2 процедуры, обясни пожалуйста подробнее. Каким образом это может решить проблему, или как можно исключить второй Image? Касательно одной картинки ( Image ), приходит в голову только такое решение. Сохранять прошлое состояние канвы в TBitmap, рисуем линию ( при этом белыми линиями уродуем текущую канву ), после отпуска рисовании линии, рисуем его на прошлом состоянии и выгружаем результат в текущий рисунок. Но это с "уродством" текущей картинки, т.к. будет заливаться белыми линиями, хотя после окончания рисования, белые линии исчезнут.. но всё-таки.. |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
А она и будет моргать тыже каждый раз перересовываеш картинку можно попробовать на время ресования на одной картинке зделать вторую не активной.
Можно код посмотреть |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Код я бы не хотел открывать.
А как же первую картинку сделать "неактивной". По видимому это именно то, что мне нужно, да не получается.. |
|||
|
||||
| ivan219 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1121 Регистрация: 19.11.2005 Где: Планета земля Репутация: 2 Всего: 12 |
Через Enable
|
|||
|
||||
| Paradise |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 22.11.2006 Репутация: нет Всего: нет |
У меня тоже было чтото такое:
Когда я рисовал несколько графиков на канве формы, то получалось чтото вроде анимации (было видно как изображается каждая точка графика), но когда я стал ето все делать на Image анимации никакой небыло, просто белый фон до тех пор пока график не нарисуется полностью. У меня было две процедуры (одна рисовала фон и координатную плоскость - Ф1, а другая графики Ф2), с помощью процедуры Ф1 я предавал начальный вид Image потом рисовал сколько хотел графиков процедурой Ф2, если нужно стереть все нарисованные графики, то Ф1. Только сопровождалось все это мерцанием белого фона (по моему твоя проблема). Ты рисуешь мышкой, потому при движенни мышкой рисунок перерисовывается и мигает фон (если мышкой не двигать то мерцания нет (я правильно понял?)). Предлагаю тебе попробывать мой способ на канве формы, если получится, то нужно искать замену Image. Компонент ControlBar1 (закладка Additional) так же рисует как и канва формы. Это сообщение отредактировал(а) Paradise - 5.12.2006, 15:42 |
|||
|
||||
| DelphiFun |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 10.11.2006 Репутация: нет Всего: нет |
Эту проблему мне удалось обойти стороной.
Отличный пример на тему рисовалки: ...\Delphi7\Demos\Doc\Graphex\ где показано как можно стирать прошлую линию не закрашивая "цветом фона", а закрашивать теми цветами, что были под текущим нарисованым объектом. Происходит это через "Pen.Mode := pmNotXor" канвы картинки. Таким образом мне удалось обойтись без второй картинки. Но столкнулся со следующей проблемой, которая опять порождает необходимость введения второго Image, как и в прошлом случае. Может быть Вы подскажете как обойтись без него..? А задача такая. Необходимо кинуть на канву некоторый объект ( прямая линия, кривая, окружность и т.д. и т.п. ), каким образом можно изменить размеры его? Получается что, опять введение второго Image на котором будет этот объект, ему присвоить "Stretch := True" ( изначально размер его совпадает с размером объекта ) и изменять мышкой уже этот Image, после окончания деяния перекладывать его на основной Image.. Пока что такое решение у меня. Но тут думаю опять начнуться проблемы с перерисовкой.. Есть ли у Вас какие-либо предположения как это сделать можно по другому? ( вовсе не обязательно, что переразмерять прийдётся простые объекты, но и части канвы. Это я к тому, что объекты мат. формулой не задашь. ) |
|||
|
||||
| Paradise |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 22.11.2006 Репутация: нет Всего: нет |
Насчет изменения размера ничего не могу сказать, но я забыл об одном компоненте PaintBox в закладке System. В нем есть событие OnPaint и рисует как канва формы, и прозрачен он сам-по-себе. По идее с этим компонентом у тебя проблемы должны исчезнуть каким бы ты способом не рисовал. Удачи
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
DelphiFun, вообще мерцание закономерно
-------------------- 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. |