Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Image Controls 2.0 
:(
    Опции темы
s-mike
Дата 19.3.2005, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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
PM MAIL WWW   Вверх
Illusion Dolphin
Дата 19.3.2005, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 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
PM MAIL WWW ICQ   Вверх
s-mike
Дата 19.3.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



1) Ой, сенкс, не заметил.
2) Насчет этого события у меня есть сомнения. Его сделать несложно, но оно будет работать только тогда, когда компонент будет иметь фокус. Но удобно ли это? В демке я сделал возможность скроллинга колесом мыши, когда курсор находится над компонентом. Мне кажется, что это удобнее, а делается не так уж сложно. В хелпе об этом даже написал. Но если я неправ, то прошу меня поправить.
3) Работаем! smile Версия ведь не последняя. Но насчет правой клавиши не уверен, потому что может понадобиться сделать контекстное меню. Так что думаю сделать просто метод, который будет вызывать зум в навигаторе. А вызывать этот метод можно будет по событиям от мыши в рантайм.

Это сообщение отредактировал(а) s-mike - 19.3.2005, 20:11
PM MAIL WWW   Вверх
offline
Дата 19.3.2005, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



Компоненты хорошие. Особенно удивило, что при масштабировании изображения, границы изображения сглаживаются, а не остаются в зазубринах как в стандартном TImage. Но, сглаживание происходит не полностью. Возможно что, то нужно дополнительно выставить, но я ничего не нашел?


PM MAIL   Вверх
s-mike
Дата 19.3.2005, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(kirilllius @ 19.3.2005, 22:27)
Особенно удивило, что при масштабировании изображения, границы изображения сглаживаются, а не остаются в зазубринах как в стандартном TImage.

Вот этого я как раз и не понял smile . Ничего особенного для масштабирования я не использовал - апишная функция StretchBlt. Масштабирование конечно не очень качественное, но зато более-менее быстрое. Но если нужно качественное, то есть событие OnScaleImage, где можно как угодно масштабировать изображение.
PM MAIL WWW   Вверх
offline
Дата 19.3.2005, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: нет
Всего: 7



Да вроде при уменьшении картинки она выглядит более приятней, чем в стандартном TImage но не столь идеально как в компоненте G32. Будет ли идти работа в направлении улучшении качества картинки при изменении размера (Resample)?


PM MAIL   Вверх
s-mike
Дата 20.3.2005, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(kirilllius @ 19.3.2005, 23:11)
Будет ли идти работа в направлении улучшении качества картинки при изменении размера (Resample)?

Функций для ресэмплинга существует много, своих я пока не придумал. Чужих брать не хочется. StretchBlt врядли заменю, разве что найду что-то более быстрое. Но естественно хотелось бы найти (или придумать smile ) что-то более качественное и быстрое.
PM MAIL WWW   Вверх
Vit
Дата 20.3.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
s-mike
Дата 20.3.2005, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(Vit @ 20.3.2005, 09:46)
Прикреплю пока тему... Думаю актуально, пусть повисит немного

Спасибо

Это сообщение отредактировал(а) s-mike - 20.3.2005, 10:40
PM MAIL WWW   Вверх
p0s0l
Дата 20.3.2005, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



Цитата
Ничего особенного для масштабирования я не использовал - апишная функция StretchBlt. Масштабирование конечно не очень качественное, но зато более-менее быстрое.
Эта функция тоже может сглаживать... Правда не при любых масштабах... Но можно сделать свойство, где бы включалось сглаживание... Хуже, думаю, никому от этого не станет...
См. функцию SetStretchBltMode + HALFTONE


--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 20.3.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



p0s0l, спасибо, но это я знаю. Но тут дело вот в чем: HALFTONE в SetStretchBltMode не работает под Win9x. Просто получается, что под этими ОС это свойство будет просто не востребовано, поэтому я решил, что лучше сделать событие на масштабирование.

Источник: http://msdn.microsoft.com/library/default....itmaps_6cth.asp
PM MAIL WWW   Вверх
p0s0l
Дата 20.3.2005, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 16
Всего: 112



s-mike, это оно конечно есть такое дело... Но я бы всё равно добавил такое свойство, тем более что труда это много не отнимет, всего десяток лишних строчек... А то что оно не будет работать на Win9x - дык возьми свойство AlphaBlend у TForm - оно тоже не работает на Win9x, но всё-таки его добавили... Просто картинка в Win9x будет выглядеть хуже, чем в Win2k/XP - согласись: это всё же лучше, чем если бы везде выглядело "плохо" ? Тем более, учитывая то, что процент людей, использующи Win9x постоянно падает...
В общем, если бы я делал эти компоненты, то я бы сделал такое свойство... А ставить его в True или нет - оставил бы на совести программиста, который бы использовал эти компоненты, ему виднее - надо это или нет...

Но дело твоё конечно smile...

Ну и я решил потестить немного... Честно говоря, почти ниодного дейсвия я не смог сделать без каких либо глюков, или непонятностей - очень сыро, недоделано и недоработано! smile

1. Только-только кинул компонент на форму... Загрузил картинку... Ставлю Transparent = True, FitImage = True, как лезут сплошные "Range Checking Error"...

2. FitImage - всё-таки нужно после его изменения в True перемасштабировать картинку... А то как-то неудобно, что нужно специально изменять размеры...

3. ---

4. Не вижу свойства Proportional smile - может я не хочу, чтобы всё было пропорционально ?

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...

Поглядев на свойства, понял, что тут больше тестить нечего... smile

Достаю 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


--------------------
С уважением, г-н Посол.
PM   Вверх
s-mike
Дата 20.3.2005, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(p0s0l @ 20.3.2005, 22:03)
1. Только-только кинул компонент на форму... Загрузил картинку... Ставлю Transparent = True, FitImage = True, как лезут сплошные "Range Checking Error"...

Уже в общем то исправлено, об этом еще Illusion Dolphin говорил.
Цитата(p0s0l @ 20.3.2005, 22:03)
2. FitImage - всё-таки нужно после его изменения в True перемасштабировать картинку... А то как-то неудобно, что нужно специально изменять размеры...

В рантайм оно так должно и быть. В дизайн-тайм после исправлений abstract error тоже работает (обновление скоро выложу).
Цитата(p0s0l @ 20.3.2005, 22:03)
3. ---

А это что значит?
Цитата(p0s0l @ 20.3.2005, 22:03)
4. Не вижу свойства Proportional  - может я не хочу, чтобы всё было пропорционально ?

Не видел чтобы в каком либо из графических вьеров или редакторов была такая возможность, ИМХО то что это есть в TImage - извращение.
Цитата(p0s0l @ 20.3.2005, 22:03)
5. Странная работа FitImage - если изменить размер по горизонтали - то масштаб не меняется, если по вертикали - меняется... Странная логика... Кто сказал, что вертикаль главнее горизонтали ? В итоге не очень красивые ситуации получаются...

Вот этого я до конца не понял. Изображение ужимается под размер контрола, если оно больше клиентской облсти компонента. Пропорционально.
Цитата(p0s0l @ 20.3.2005, 22:03)
6. Zoom - имхо, должно быть ZoomX и ZoomY... Если Proportional = True, то эти Zoom'ы при изменении друг другу приравниваются...

Опять же говорю - сделать несложно, но вот какое этому практическое применение?
Это разумная мысль, согласен.
Цитата(p0s0l @ 20.3.2005, 22:03)
7. FitImage = True, размер компонента больше размера картинки - Zoom не делается автоматически больше 100%... Имхо, нужно ввести доп. свойство типа АвтоУвеличения - если оно = True, то Zoom может делаться больше 100, иначе - не может.

Цитата(p0s0l @ 20.3.2005, 22:03)
8. В общем, как-то необдуманно и глючно работает система увеличения - нужно её пересмотреть, перерыть, перетестить. И главное - удобство использования, и гибкость. Гибкость почти отсутствует...

Хм, хотелось бы услышать более конкретную информацию.
1) Что глючно?
2) В чем неудобства?
3) Какая нужна гибкость?
Сам я может о чем-то не догадываюсь?

Цитата(p0s0l @ 20.3.2005, 22:03)
9. В общем опять, загружаю эту же картинку... Хочу испробовать Transparent, ставлю в True... Но чтобы проверить, нужно увеличить компонент так, чтобы было незанятное картинкой место... Увеличиваю - опять "Range Checking Error"... Мдя... Возможно, это тот же глюк, что и в п.1
В общем, подумав, что всё-таки дело в особенности картинки, загрузил другую - эффект тот же...
Вывод: если Transparent = True, и есть незанятое место, то Range Checking Error...

Range check error не замечал, но то что это свойство работает неправильно - факт. Буду исправлять.
Цитата(p0s0l @ 20.3.2005, 22:03)
11. AutoCenter = True, FitImage = False, меняю размеры компонента - автоцентрирования не проиходит

Это не глюк, я и делал его с таким расчетом, достаточно посмотреть исходный код. Я делал компонент по образу и подобию ACDSee и там такого не наблюдается, изображение центрируется только при загрузке. Да и практической ценности ИМХО в этом никакой. Если я не прав - прошу поправить.
Добавлено @ 23:10
Цитата(p0s0l @ 20.3.2005, 22:03)
12. Непонятно: CanScroll = True, CanScrollWithMouse = False, как теперь я могу скроллировать ?

Сделано свойство для TSBScrollingImage для возможности скроллинга только скроллбарами. Для других компонентов этой серии идентично CanScroll. Наверно надо его перенести все-таки в TSBScrollingImage, наверно так будет понятней.
PM MAIL WWW   Вверх
s-mike
Дата 20.3.2005, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(p0s0l @ 20.3.2005, 22:03)
13. По поводу п.12 думаю: наверное, есть какой-то метод для скроллирования... Вижу ScrollBy - он работает как со включенным CanScroll, так и с выключенным... Зато работает он как-то странно... Т.е. сдвигает картинку, но вообще по-левому... Зачем этот метод такой нужен ? Если он для внутреннего использования, то народовать его не надо...

Хе-хе, ScrollBy - это не моего компонента метод, а унаследован от TWinControl и предназначен естественно совершенно не для того. Так что претензии ко мне тут совершенно необоснованные. Для этого предусмотрен метод ScrollImage.
Добавлено @ 23:29
Цитата(p0s0l @ 20.3.2005, 22:03)
15. В общем, пробую Zoom - меняю-меняю - нифига не масштабируется... Так как и было в реальном масштабе - так и осталось (FitImage = False)... Запускаю проект - показывается в Zoom-масштабе... Т.е. в Design-time не работает эта весчь...

Ндаа... Что-то там с VCL-ем не то. Не хайдится дочерний контрол-контейнер изображения. Попробую разобраться.
PM MAIL WWW   Вверх
s-mike
Дата 20.3.2005, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



Цитата(p0s0l @ 20.3.2005, 22:03)
Запускаю проект - Exception EReadError, Error reading FastScrollingImage1.FitImage: Floating point division by zero...
Потыкав еще свойства, я потом уже вообще ни при каких значения FitImage и Transparent не мог запустить проект... Дело спасло только удаление компонента и вытаскивание нового...

Симитировать не получилось, поподробнее плиз...
Цитата(p0s0l @ 20.3.2005, 22:03)
17. Ставлю свойство Cursor, выбрал крестик - запускаю - стрелочка... Свойство не работает...

Похоже нужно это свойство спрятать. Оно ничего не дает и не даст. Для изменения курсора служат три других свойства: ImageCanScrollCursor, ImageDragCursor, ImageScrollDisabled. Но скорей всего в новой версии они будут переименованы.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1671 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.