|
Модераторы: Snowy, Alexeis, MetalFan |
|
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Странно, у меня все нормально. Может быть в таких случаях постить код с ошибкой? Или прислать мне на мыло? Спасибо за проведенное тестирование. Согласен, что компоненты немного сыроватые, хотелось побыстрее выложить новую версию. Скоро думаю уже выкладывать апдейт. В нем постараюсь исправить все вышеуказанные глюки. Насчет спорных вопросов хотелось бы услышать более серьезные аргументы, а также мнение других. |
|||
|
||||
p0s0l |
|
||||||||||||||||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
s-mike, я говорил "баги" и "непонятности"... одни исправляются, другие - объясняются... и заносятся в хелп, если что , а большинство пунктов - были непонятности и предложения... Баги касались почти только FitImage и Transparent - очень портят впечатление... особенно первое впечатление... Всё же стоит проверить получше компоненты, прежде чем выставлять на публику...
1) В большинстве случаев всё что связяно с FitImage - либо не работает, либо приводит к Exception'ам, приводящие к невозможности запуска проекта... 2) Неудобства - некачественное масштабирование... 3) Гибкость: а) добавить Proportional б) добавить свойство, чтобы Zoom мог быть > 100% в) разделить Zoom на ZoomX и ZoomY Для удобства, возможно, все опции масштабирования (если их будет больше 3-4) следует скомпоновать в одно свойство (как к примеру Options у DBGrid)... Насчет:
Или может мне просто надо в какой-то прямоугольник вписать картинку, пусть с небольшим искажением... Не одни ведь вьюверы показывают картинку на форме... Или ты делаешь конкретно для вьюверов компоненты (а судя по последним постам, я убеждаюсь что так, хотя об этом вроде нигде нислова) ?... Если так - то конечно же, всё это (то что выше) будет излишним... Тогда нужно работать в направлении поддерживаемых форматов и в направлении качественного масштабирования, а не сваливать эту часть на пользователя... По-крайней мере масштабирование-то можно постараться сделать (без StretchBlt)...
Возможно это были глюки Delphi после долгих Range Checked Error-ов... хотя... ??? В любом случае, мне кажется, если ты устранишь этот несчастный баг с FitImage, то проблем не будет...
Других глюков в TSBScrollingImage (кроме FitImage, Transparent и Zoom) - не замечено... ЗЫ: По поводу ScrollingImageNavigator - было бы неплохо, если бы как в ACDSee можно было выделять прямоугольник (т.е. так сразу можно указать место и масштаб)... -------------------- С уважением, г-н Посол. |
||||||||||||||||
|
|||||||||||||||||
s-mike |
|
||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Пожалуй так оно и было. Я перед этим исправлял баги
Тоже у меня нормально. Странно. Теперь насчет редактора и вьера. Хотелось бы конечно сделать универсальный компонент, который если и не будет, скажем иметь возможность качественного масштабирования или непропорционального масштабирования или поддержку многих форматов файлов, но будет давать возможность все это добавить. Такую возможность я ставил перед собой при написании этих компонентов. Плюс не хотелось бы изобретать велосипед. Ну например для масштабирования существуют различные функции, многие из них включены в библиотеки. Также существует много библиотек файловых форматов. Зачем мне делать еще одну такую библиотеку? Лучше ИМХО дать возможность использовать существующие. Теперь насчет непрпорционального масштабирования. Раз уж зашла речь о редакторах, то возьмем к примеру фотошоп (мой любимый ). В нем нет непропорционального масштаба, а функция эта осуществляется так же, как скажем изменение размера или добавление контраста. То есть это уже является отдельной функцией, для которой есть отмена и пр. Поэтому даже для редактора можно изменить необходимым образом свойство TScrollingImage.Picture и все изменения отобразятся в компоненте. В добавлении непропорционального масштаба я по прежнему не вижу необходимости. Вот насчет увеличения небольших изображений до размера окна - согласен, можно добавить. Также добавлю выбор метода масштабирования (обычный или Halftone). Ничего, работающего быстрее я пока не нашел (но ищу). Все функции качественного масштабирования, с которыми я работал, выполняются в несколько раз дольше StretchBlt c режимом Halftone. |
||||
|
|||||
p0s0l |
|
||||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
сейчас вытащил заново этот компонент - и на моё удивление свойство как бы и работает... Хм... Загружаю тот старый проект - протираю глаза, смотрю на свойство ScrollButton - оно = mbRight, запускаю - скроллится левой кнопкой! Так что всё-таки возможно, раз это какой-то непостоянный баг, этим страдает не только TSBScrollingImage (я сказал:
Проект сейчас вышлю... Еще одна сомнительная особенность, обнаружил пока возился со ScrollButton, (проверял на TSBScrollingImage и на TFastScrollingImage), если стоит mbRight: если держать правую кнопку (на картинке), потом увести мышь за пределы формы, а там уже отпустить правую кнопку мыши, то при возврате курсора на форму прога думает, что как будто-бы правая кнопка всё еще нажата... Этим не страдает mbLeft... Еще почему-то у TScrollingImage нет свойства ScrollButton ?... Добавлено @ 11:23 Уже собирался выслать проект с багом мышки, как выяснил причину... После некоторых экспериментов наметился такой синдром: если Zoom = 100, то ScrollButton работает... При любых других Zoom'ах скроллируется только левой кнопкой, независимо от значения ScrollButton. Этим страдает как TSBScrollingImage, так и TFastScrollingImage... -------------------- С уважением, г-н Посол. |
||||
|
|||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Насчёт масштабирования - может всё-таки встроишь один из лучших методов, которые ты встречал ?
Т.к. тот, кто будет юзать этот компонент, вряд ли найдёт что-то более лучшее... То бишь сделать свойство СпособМасштабирования, где выбирается: 1 Простое масштабирование (StretchBlt без Halftone) 2 Halftone-масштабирование (StretchBlt с Halftone) 3 Качественное масштабирование (твоё масштабирование) 4 Пользовательское масштабирование (т.е. через OnScaleImage)... Так имхо, в этом смысле, было бы самое то -------------------- С уважением, г-н Посол. |
|||
|
||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Если у TSBScrollingImage выключить ScrollBarVisible, то в Design-time нормально, а в run-time под скролл-бар всё равно отводится место, но оно не отрисовывается (ни Color'ом, ни фоном родителя...), при чем это обнаруживается только если сделать так, чтобы скроллировать можно было только либо по горизонтали, либо по вертикали (но не все вместе)
Да и потом как выяснилось, даже с 2 скроллбарами не всё ок (см. присоединенную картинку) - при запуске рядом со скроллбаром паказывается часть того, что под формой... Если я пишу SBScrollingImage2.Picture.Canvas.xxx (т.е. рисую), то меня перекидывают на показ левой-верхней части картинки (т.е. обнуляется ImagePos)... Имхо, лучше будет, если возможно, то ImagePos не менять... Это сообщение отредактировал(а) p0s0l - 21.3.2005, 13:32 Присоединённый файл ( Кол-во скачиваний: 24 ) bag1.gif -------------------- С уважением, г-н Посол. |
|||
|
||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Навигатор: если обнулить свойство ScrollingImage, то картинка остаётся прежней...
Также, если обнулить Picture у связанного с навигатором имейджа, картинка тоже останется прежней (правда на этот раз исчезнет прямоугольник)... Для удобства, имхо, нужно сделать, чтобы свойству Picture можно было присваивать не только TBitmap, но вообще любой TGraphic (типа как метод LoadGraphic)... TSBScrollingImage: Неправильно настраиваются скроллбары - т.е. если я проскроллируюсь до конца вправо вниз с помощью мышки, на скроллбарах ползунки будут не в концах, а где-то в середине, хотя мотать уже и некуда... (это, кстати, видно на предыдущей картинке - видно уже самый правый край картинки, а на горизонтальном скроллбаре ползунок находится не в конце...) Непонятное описание: ScrollHome, ScrollEnd - имхо, надо указать, куда конкретно, а то что такое "конец изображения" ? (догадаться можно, но всё-таки...) Также, сделав ScrollEnd рядом с обоими скроллабарами появились неправильно отрисованные места (вернее, они не перерисовались, там остался прежний кусок картинки), скорее всего это тот же глюк, что и тот, который при запуске формы был... Это сообщение отредактировал(а) p0s0l - 21.3.2005, 16:18 -------------------- С уважением, г-н Посол. |
|||
|
||||
Vit |
|
|||
Vitaly Nevzorov Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 1 Всего: 207 |
Модератор: Сообщение скрыто. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
s-mike |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
p0s0l, со ScrollButton я понял в чем ошибка, спасибо, буду исправлять, а вот насчет:
я знаю, но к сожелению не понимаю, как это можно исправить Может кто-нибудь поможет? (К слову: этим страдает и IrfanView).
Из-за этого и глюк со ScrollButton
Lanczos3 масштабирует очень качественно (хоть и хуже, чем Halftone), но очень медленно, в 10 раз. Так что скроллинг изображения будет очень медленным. Если найду что-нибудь качественное и быстрое (а может кто-то посоветует?), то сделаю, а пока скорее всего придется довольствоваться 3 методами...
Интересная идея, подумаю. С остальным еще буду разбираться. |
||||||||
|
|||||||||
p0s0l |
|
||||||||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Можно попробовать решить проблему с правой кнопкой через SetCapture...
Добавляем SetCapture в BitmapMouseDown:
Добавляем ReleaseCapture в BitmapMouseUp:
В объявление класса:
А вот и сами процедурки:
-------------------- С уважением, г-н Посол. |
||||||||
|
|||||||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Спасибо, с SetCapture я когда-то пробовал. Но и в этом варианте и тогда мышь не отжималась, т.е. при отжатии кнопки мыши изображение все равно продолжало скроллиться.
|
|||
|
||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
Интересно, какой метод масштабирования используется в ACDSee ? Найти бы такой, да прооптимизировать... Он кстати очень и очень походит на Halftone, почти 1:1... -------------------- С уважением, г-н Посол. |
|||
|
||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Но гораздо быстрее... |
|||
|
||||
Illusion Dolphin |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Ещё пару скажу слов по поводу компонентов.
1) Zoom - хорошое свойство, НО некрасиво работает при его изменении. Если я возьму зум в 100, выделю кусок у изображения., а потом поставлю зум в 400, то получу не увеличение середины того куска, который видел, а другой кусок (происходит смещение). 2) В навигаторе было бы хорошо сделать настройку цвета того прямоугольничка, который показывает текущие рамки. 3) Хотелось бы чтобы было свойство принудительного обновления картинки. Именно такое обновление, которое происходить если вызвать приватный метод Resize. Это то, что наболело... Ща вот думал прибацать в проект пару компонентиков, но из-за пункта 1го может и придётся всё ручками опять бацать... да, ещё, неплохо было бы ввести свойство GetZoom - возвращает эффективный зум, т.е. при фитимэйдж чтобы возвращал с каким зумам отображает, а без фитимэйдж - просто свойство Zoom. Это сообщение отредактировал(а) Illusion Dolphin - 7.4.2005, 19:46 -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
s-mike |
|
||||||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Я как раз так и стремился сделать... Странно, так вроде оно и есть. Можно подробнее?
Есть. TScrollingImageNavigator.Shape.Pen.Color. В новой версии (2.1 - которую надеюсь скоро выложить) есть еще и событие на отрисовку навигатора и прямоугольничка.
А стандартные методы? TCustomScrollingImage.Invalidate.
А свойство Zoom разве работает не так? Или я чего-то не понимаю? |
||||||||
|
|||||||||
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |