|
Модераторы: Snowy, Alexeis, MetalFan |
|
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Наконец-то я выкладываю новую версию своей библиотеки компонентов.
Что нового в этой версии? 1. Добавлен компонент TTexturePanel. 2. В TCustomScrollingImage добавлено масштабирование, а также автоматическое масштабирование по размеру компонента. 3. Изменена иерархия компонентов для скроллинга, теперь TFastScrollingImage наследуется от TScrollingImage. 4. Наследники TCustomScrollingImage, а также компоненты TBitmapContainer и TBitmapPanel теперь имеют свойство Transparent, позволяющее делать компонент прозрачным. 5. Добавлена возможность нестандартной отрисовки изображения в компонентах для скроллинга. 6. Добавлено изменение курсоров для скроллинга в design-time с помощью свойств ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled. 7. В TCustomScrollingImage добавлены свойства RealImagePos, RealImageLeft, RealImageTop, по которым можно узнать настоящие координаты изображения в компоненте, учитывая то, что оно может неполностью заполнять компонент. 8. Добавлено в TCustomScrollingImage свойство CanScrollWithMouse, позволяющее запретить скроллинг с помощью мыши. 9. Исправлен глюк в навигаторе при щелчке в нем правой кнопкой мыши. 10. В модуль ImgCtrlUtils добавлена процедура LoadGraphicToBitmap и немного подправлена функция IsEmptyPicture. 11. Добавлен модуль ImgCtrlsSkins. 12. Устранены другие небольшие баги и ошибки. Жду ваших пожеланий и оценок! Версия 2.1.1: Это сообщение отредактировал(а) Snowy - 4.12.2006, 14:17 Присоединённый файл ( Кол-во скачиваний: 395 ) ImgCtrls211.zip 160,46 Kb |
|||
|
||||
Illusion Dolphin |
|
|||
Эксперт Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 13 Всего: 63 |
Из первых впечатлений:
1) ScrollingImage FitImage -> Abstract Error или деление на ноль ( function TCustomScrollingImage.GetFitImageScale: Extended; begin Result := Min(ClientWidth / FPicture.Width, ClientHeight / FPicture.Height); //тутя бы проверил FPicture на не nil и FPicture.Height и FPicture.Width на не о end; ) 2) Я бы добавил события на скрол мыши, если их нет (я не заметил) события на скрол мыши 3) ScrollingImageNavigator1 - чтобы можно было правой кнопкой задавать размер области - было бы очень неплохо -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
1) Ой, сенкс, не заметил.
2) Насчет этого события у меня есть сомнения. Его сделать несложно, но оно будет работать только тогда, когда компонент будет иметь фокус. Но удобно ли это? В демке я сделал возможность скроллинга колесом мыши, когда курсор находится над компонентом. Мне кажется, что это удобнее, а делается не так уж сложно. В хелпе об этом даже написал. Но если я неправ, то прошу меня поправить. 3) Работаем! Версия ведь не последняя. Но насчет правой клавиши не уверен, потому что может понадобиться сделать контекстное меню. Так что думаю сделать просто метод, который будет вызывать зум в навигаторе. А вызывать этот метод можно будет по событиям от мыши в рантайм. Это сообщение отредактировал(а) s-mike - 19.3.2005, 20:11 |
|||
|
||||
offline |
|
|||
Опытный Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
Компоненты хорошие. Особенно удивило, что при масштабировании изображения, границы изображения сглаживаются, а не остаются в зазубринах как в стандартном TImage. Но, сглаживание происходит не полностью. Возможно что, то нужно дополнительно выставить, но я ничего не нашел?
|
|||
|
||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Вот этого я как раз и не понял . Ничего особенного для масштабирования я не использовал - апишная функция StretchBlt. Масштабирование конечно не очень качественное, но зато более-менее быстрое. Но если нужно качественное, то есть событие OnScaleImage, где можно как угодно масштабировать изображение. |
|||
|
||||
offline |
|
|||
Опытный Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: нет Всего: 7 |
Да вроде при уменьшении картинки она выглядит более приятней, чем в стандартном TImage но не столь идеально как в компоненте G32. Будет ли идти работа в направлении улучшении качества картинки при изменении размера (Resample)?
|
|||
|
||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Функций для ресэмплинга существует много, своих я пока не придумал. Чужих брать не хочется. StretchBlt врядли заменю, разве что найду что-то более быстрое. Но естественно хотелось бы найти (или придумать ) что-то более качественное и быстрое. |
|||
|
||||
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 |
Спасибо Это сообщение отредактировал(а) s-mike - 20.3.2005, 10:40 |
|||
|
||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
См. функцию SetStretchBltMode + HALFTONE -------------------- С уважением, г-н Посол. |
|||
|
||||
s-mike |
|
|||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
p0s0l, спасибо, но это я знаю. Но тут дело вот в чем: HALFTONE в SetStretchBltMode не работает под Win9x. Просто получается, что под этими ОС это свойство будет просто не востребовано, поэтому я решил, что лучше сделать событие на масштабирование.
Источник: http://msdn.microsoft.com/library/default....itmaps_6cth.asp |
|||
|
||||
p0s0l |
|
|||
Г-н Посол Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 16 Всего: 112 |
s-mike, это оно конечно есть такое дело... Но я бы всё равно добавил такое свойство, тем более что труда это много не отнимет, всего десяток лишних строчек... А то что оно не будет работать на Win9x - дык возьми свойство AlphaBlend у TForm - оно тоже не работает на Win9x, но всё-таки его добавили... Просто картинка в Win9x будет выглядеть хуже, чем в Win2k/XP - согласись: это всё же лучше, чем если бы везде выглядело "плохо" ? Тем более, учитывая то, что процент людей, использующи Win9x постоянно падает...
В общем, если бы я делал эти компоненты, то я бы сделал такое свойство... А ставить его в True или нет - оставил бы на совести программиста, который бы использовал эти компоненты, ему виднее - надо это или нет... Но дело твоё конечно ... Ну и я решил потестить немного... Честно говоря, почти ниодного дейсвия я не смог сделать без каких либо глюков, или непонятностей - очень сыро, недоделано и недоработано! 1. Только-только кинул компонент на форму... Загрузил картинку... Ставлю Transparent = True, FitImage = True, как лезут сплошные "Range Checking Error"... 2. FitImage - всё-таки нужно после его изменения в True перемасштабировать картинку... А то как-то неудобно, что нужно специально изменять размеры... 3. --- 4. Не вижу свойства Proportional - может я не хочу, чтобы всё было пропорционально ? 5. Странная работа FitImage - если изменить размер по горизонтали - то масштаб не меняется, если по вертикали - меняется... Странная логика... Кто сказал, что вертикаль главнее горизонтали ? В итоге не очень красивые ситуации получаются... 6. Zoom - имхо, должно быть ZoomX и ZoomY... Если Proportional = True, то эти Zoom'ы при изменении друг другу приравниваются... 7. FitImage = True, размер компонента больше размера картинки - Zoom не делается автоматически больше 100%... Имхо, нужно ввести доп. свойство типа АвтоУвеличения - если оно = True, то Zoom может делаться больше 100, иначе - не может. 8. В общем, как-то необдуманно и глючно работает система увеличения - нужно её пересмотреть, перерыть, перетестить. И главное - удобство использования, и гибкость. Гибкость почти отсутствует... Ладно, теперь беру TBitmapPanel: 9. В общем опять, загружаю эту же картинку... Хочу испробовать Transparent, ставлю в True... Но чтобы проверить, нужно увеличить компонент так, чтобы было незанятное картинкой место... Увеличиваю - опять "Range Checking Error"... Мдя... Возможно, это тот же глюк, что и в п.1 В общем, подумав, что всё-таки дело в особенности картинки, загрузил другую - эффект тот же... Вывод: если Transparent = True, и есть незанятое место, то Range Checking Error... Поглядев на свойства, понял, что тут больше тестить нечего... Достаю ScrollingImage, загружаю в него картинку: 10. Ставлю FitImage = True - Abstract Error... Причем дальше вроде как всё работает - размеры картинки подгоняются под размеры контрола... Ставлю FitImage = False - опять Abstract Error... В общем, при изменении FitImage вылазит ошибка 11. AutoCenter = True, FitImage = False, меняю размеры компонента - автоцентрирования не проиходит 12. Непонятно: CanScroll = True, CanScrollWithMouse = False, как теперь я могу скроллировать ? 13. По поводу п.12 думаю: наверное, есть какой-то метод для скроллирования... Вижу ScrollBy - он работает как со включенным CanScroll, так и с выключенным... Зато работает он как-то странно... Т.е. сдвигает картинку, но вообще по-левому... Зачем этот метод такой нужен ? Если он для внутреннего использования, то народовать его не надо... Вроде больше ничего интересного в свойствах не вижу... Теперь достаю FastScrollingImage: 14. Тоже очередная проблема с Transparent... 15. В общем, пробую Zoom - меняю-меняю - нифига не масштабируется... Так как и было в реальном масштабе - так и осталось (FitImage = False)... Запускаю проект - показывается в Zoom-масштабе... Т.е. в Design-time не работает эта весчь... 16. FitImage делаю True, тоже в Design-time не масштабируется... Хотя Zoom меняется... Видимо - это последствие п. 15... Запускаю проект - Exception EReadError, Error reading FastScrollingImage1.FitImage: Floating point division by zero... Потыкав еще свойства, я потом уже вообще ни при каких значения FitImage и Transparent не мог запустить проект... Дело спасло только удаление компонента и вытаскивание нового... 17. Ставлю свойство Cursor, выбрал крестик - запускаю - стрелочка... Свойство не работает... 18. Убавил размеры компонента, чтобы не полностью влезала картинка... Ставлю ScrollButton = mbRight, всё равно двигается не правой, а левой кнопкой... В общем я уже устал и тестить и писать... SBScrollingImage - даже не стал смотреть... Это сообщение отредактировал(а) p0s0l - 20.3.2005, 22:12 -------------------- С уважением, г-н Посол. |
|||
|
||||
s-mike |
|
||||||||||||||||||||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Уже в общем то исправлено, об этом еще Illusion Dolphin говорил.
В рантайм оно так должно и быть. В дизайн-тайм после исправлений abstract error тоже работает (обновление скоро выложу).
А это что значит?
Не видел чтобы в каком либо из графических вьеров или редакторов была такая возможность, ИМХО то что это есть в TImage - извращение.
Вот этого я до конца не понял. Изображение ужимается под размер контрола, если оно больше клиентской облсти компонента. Пропорционально.
Опять же говорю - сделать несложно, но вот какое этому практическое применение? Это разумная мысль, согласен.
Хм, хотелось бы услышать более конкретную информацию. 1) Что глючно? 2) В чем неудобства? 3) Какая нужна гибкость? Сам я может о чем-то не догадываюсь?
Range check error не замечал, но то что это свойство работает неправильно - факт. Буду исправлять.
Это не глюк, я и делал его с таким расчетом, достаточно посмотреть исходный код. Я делал компонент по образу и подобию ACDSee и там такого не наблюдается, изображение центрируется только при загрузке. Да и практической ценности ИМХО в этом никакой. Если я не прав - прошу поправить. Добавлено @ 23:10
Сделано свойство для TSBScrollingImage для возможности скроллинга только скроллбарами. Для других компонентов этой серии идентично CanScroll. Наверно надо его перенести все-таки в TSBScrollingImage, наверно так будет понятней. |
||||||||||||||||||||||
|
|||||||||||||||||||||||
s-mike |
|
||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Хе-хе, ScrollBy - это не моего компонента метод, а унаследован от TWinControl и предназначен естественно совершенно не для того. Так что претензии ко мне тут совершенно необоснованные. Для этого предусмотрен метод ScrollImage. Добавлено @ 23:29
Ндаа... Что-то там с VCL-ем не то. Не хайдится дочерний контрол-контейнер изображения. Попробую разобраться. |
||||
|
|||||
s-mike |
|
||||
Опытный Профиль Группа: Участник Сообщений: 425 Регистрация: 16.1.2005 Где: Киев Репутация: 5 Всего: 16 |
Симитировать не получилось, поподробнее плиз...
Похоже нужно это свойство спрятать. Оно ничего не дает и не даст. Для изменения курсора служат три других свойства: ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled. Но скорей всего в новой версии они будут переименованы. |
||||
|
|||||
Правила форума "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. |