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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2014, 05:47   #1
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию Анимированный маркер на TImage

Привет.
Необходимо поместить два анимированных маркера на крупную картинку (схема большого размера).

Что есть:
- гиф с маркером в виде вращающихся кусочков кольца размером 32*32 пикселя (но не проблема на кадры нарезать, если нужно);
- крупная картинка (TImage) на TScroolBox, на которую нужно наложить анимированный маркер, при этом саму картинку можно перемещать (т.е. маркер может оказаться за пределами видимости);
- фотошоп, делфи 2007 (который не умеет работать с пнг форматом).

И все было бы хорошо, но проблема в том, что при выставлении прозрачности фона гифки в true, задний фон не перерисовывается. Он остается таким, какой был при старте программы. При этом большая картинка может масштабироваться пользователем, но маркер должен оставаться в своем первоначальном размере (координаты гифки пересчитываются в зависимости от зума схемы). Repaint гифки ничего не дает - фон не перерисовывается. Установка вручную img.ControlStyle:=img.ControlStyle+[csOpaque] тоже бесполезна.

Поскольку с ходу я простого решения не нашел, то вижу несколько путей:
1. Искать в TGIFImage процедуру отрисовки и править (глюк?).
2. Использовать таймер и TImageList с загруженными кадрами анимации, которые отрисовывать на TPaintBox'е, наложенном поверх той самой схемы.

Далее идет еще несколько бредовых вариантов, которые озвучивать не буду, хоть и не против поднять настроение, но не ценой выглядеть в чьих-то глазах полным извращенцем и любителем изобретать костыли для вполне здорового кода ))

Итак, что посоветуете? Вполне вероятно, что я не знаю чего-то простого и задуманного эмбаркодеровцами как единственно правильного. Фон у того же TLabel отрисовывается просто на ура. А что не так с гифкой в TImage?
exyl вне форума Ответить с цитированием
Старый 04.12.2014, 07:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Наверно я бы попробовал еще два пути:
1) Поставить Делфи поновее, всетки 2007-ка устарела. Да и оплотом надежности она не являлась
2) Использовать GDI+ для рисования. Это значит - TImage фтопку, писать свою отрисовку с нуля.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.12.2014, 13:36   #3
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Что такое "анимированный маркер"?
Если это - анимированный курсор, то какие трудности???
Создайте нужный вам анимированный курсор и подключайте его в своей программе.
Создайте их несколько и меняйте в программе когда хотите и как хотите.
kropotkina-alice вне форума Ответить с цитированием
Старый 04.12.2014, 13:47   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Что такое "анимированный маркер"?
Если это - анимированный курсор, то какие трудности???
Создайте нужный вам анимированный курсор и подключайте его в своей программе.
Создайте их несколько и меняйте в программе когда хотите и как хотите.
Я думаю, что как бы нет...
Цитата:
Сообщение от exyl Посмотреть сообщение
Необходимо поместить два анимированных маркера на крупную картинку (схема большого размера).
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 15:32   #5
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Я так и не поняла, что имеется в виду под словом "маркер". Ответа от ТС нет.
Я не понимаю, что такое "как бы нет".
Не понимаю выражений типа "она как бы моя мать", " я её как бы люблю", "я как бы программист", "мне это как бы нужно" и проч.
В русском языке словосочетание "как бы" равносильно слову "приблизительно".
Теперь подумайте, что вы написали...
Чем ТС собирается управлять "двумя маркерами"???
Ему удалось подключить к компу две независимые мыши?
Он собирается управлять вторым курсором с помощью клавиш?
Кто-нибудь способен поставить задачу так, чтобы не пришлось фантазировать или вызывать медиумов?
kropotkina-alice вне форума Ответить с цитированием
Старый 04.12.2014, 15:46   #6
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Я так и не поняла, что имеется в виду под словом "маркер". Ответа от ТС нет.
Я не понимаю, что такое "как бы нет".
Не понимаю выражений типа "она как бы моя мать", " я её как бы люблю", "я как бы программист", "мне это как бы нужно" и проч.
В русском языке словосочетание "как бы" равносильно слову "приблизительно".
Теперь подумайте, что вы написали...
Чем ТС собирается управлять "двумя маркерами"???
Ему удалось подключить к компу две независимые мыши?
Он собирается управлять вторым курсором с помощью клавиш?
Кто-нибудь способен поставить задачу так, чтобы не пришлось фантазировать или вызывать медиумов?
Графический маркер - флажок, который выставляется, например, на карте. Курсор мыши - инструмент, которым выставляется этот флажок. По клику - в точке клика, или перетаскиванием графического обьекта - маркера на карту. Хоть сотню штук таскайте.
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 16:18   #7
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
1) Поставить Делфи поновее, всетки 2007-ка устарела. Да и оплотом надежности она не являлась
2007 - это последний приобретенный конторой дельфин. И если ты предлагаешь "поставить", то перед этим придется купить. Не вариант. И не хотелось бы много времени тратить на написание своего компонента, реализующего озвученный функционал.

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Я так и не поняла, что имеется в виду под словом "маркер". Ответа от ТС нет.
ТС - очень загруженный человек, простите его ))

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Я не понимаю, что такое "как бы нет".
Стараюсь не пользоваться такими формулировками, но в данном контексте эти слова имеют оттенок неуверенности.

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Чем ТС собирается управлять "двумя маркерами"???
Управлять по большей части программа будет. Координаты выставляются программно.

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Кто-нибудь способен поставить задачу так, чтобы не пришлось фантазировать или вызывать медиумов?
Фантазия - это хорошо, но есть унылый вики-словарь. Первое же значение:
Цитата:
ма́р-кер. 1. спец. отметка
Что и так ясно из контекста:
Цитата:
Необходимо поместить два анимированных маркера на крупную картинку (схема большого размера).
Iron Monk, все верно. Только эти маркеры даже не придется ставить вручную, они будут размещаться программно.

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

Теперь понятно.
У меня сработал стереотип...
Если бы вместо "крупная картинка" было использовано слово "карта" и хотя бы один раз использовалось слово "маршрут" (или, на худой конец, "путь"), тогда бы вопросы отпали...
kropotkina-alice вне форума Ответить с цитированием
Старый 04.12.2014, 16:38   #9
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Попробовал на 2007 под гифкой картинку потаскать - нормально перерисовывается фон. Жаль только, что анимация не поддерживается.
Iron Monk вне форума Ответить с цитированием
Старый 04.12.2014, 16:54   #10
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от exyl Посмотреть сообщение
И все было бы хорошо, но проблема в том, что при выставлении прозрачности фона гифки в true, задний фон не перерисовывается. Он остается таким, какой был при старте программы. При этом большая картинка может масштабироваться пользователем, но маркер должен оставаться в своем первоначальном размере (координаты гифки пересчитываются в зависимости от зума схемы). Repaint гифки ничего не дает - фон не перерисовывается. Установка вручную img.ControlStyle:=img.ControlStyle+[csOpaque] тоже бесполезна.
А не пробовали ?
1. Отказаться от гифов и использовать простенькую последовательность бээмпэшек (ещё лучше - джипежек)? (что по сути - одно и то же) хоть по таймеру...
2. И тогда в момент смены кадра "анимации" что-то вроде:
Код:
Image1.Picture:=nil;
Image1.Picture.Bitmap.Assign(следующее bmp);
З.Ы. "Игра" с прозрачностью частенько попахивает болезнью к украшательству, а то и вовсе дурновкусием (если только это не проистекает из требований заказчика).
Но в любом случае совершенно необязательно обеспечивать абсолютно плавную регулировку "прозрачности" с шагом 1%.
Можно сделать 4 варианта с шагом 25% с размытием площади маркера - тогда отпадёт необходимость бороться за прорисовку фона

Последний раз редактировалось kropotkina-alice; 04.12.2014 в 16:58.
kropotkina-alice вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимированный осцилограф на WinAPI (С++) oleg kutkov Общие вопросы C/C++ 36 26.02.2014 22:39
Маркер в Chart Viktooor Общие вопросы Delphi 0 23.05.2012 17:40
Не правильно работает маркер заполнения leric Microsoft Office Excel 2 13.02.2010 16:29
Анимированный фон Delph1n Мультимедиа в Delphi 11 31.01.2009 14:47
Маркер Патрон Общие вопросы Delphi 4 14.04.2008 21:45