Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Region Maker - Окна Произвольной Формы | Создаём Утилиту   Найти похожие ветки 

 
DevilDevil ©   (2006-03-29 05:32) [0]

Все мы когда-нибудь видели симпатичные приложения нестандартной
(непрямоугольной) формы. Согласитесь, подобные приложения намного
привлекательнее обычных (прямоугольных). Достаточто хорошим примером
нестандартного окна (региона) является программа Microsoft Media Player.
Выбрав в меню "Вид\Параметры полного режима" режим "автоматически скрывать строку меню"
или "Вид\Режим обложки", Вы убедитесь в правоте моих слов.

Почему же таких (привлекательных) приложений не так уж и много?
Связано это с многими причинами. Во-первых, не многие программисты
обладают даже начальными знаниями по программированию регионов (нестандартных окон).
Во-вторых, программирование таких приложений на чистом WinAPI представляет некую сложность.

Существенно облегчить эту задачу смог один (или больше) мужик, создавший один Delphi компонент.
Допустим, у Вас есть bmp рисунок, в центре которого красочное изображение (ну, кнопочки, эмблемы, фон...
- см. Microsoft Media Player), а всё остальное (ненужное) окрашено, например, чёрным. Вообще, довольно
удобно рисовать вид своего окна прямо в Paint или Photoshop. Ну так вот, загрузив этот рисунок в одно
из свойств Delphi компонента (предположим, в Picture), откомпилировав и запустив такой проект, Вы получите
долгожданное - Ваше окно преобрело произвольную (определённую Вами в рисунке) форму и окрасилось
яркими красками нарисованного ранее изображения. Правда, здорово?

Да не совсем!!! Во-первых, скорость каждой компиляции увеличивается на пару секунд. Связано это с тем,
что при каждой компиляции, в exe сохраняется тот самый рисунок-регион. Поэтому (во-вторых), размер exe
существенно увеличивается. Двадцати четырёх битный растр 800х600 занимает 1 440 054 байт (1,37 Мб).
В-третьих, грузится такая программа на пару секунд дольше. Связано это с медленным алгоритмом создания
региона.

Решаются ли эти проблемы? Да. Как минимум, уменьшить время компиляции можно. В книге Михаила Флёнова
"Программирование в Delphi глазами Хакера" приведена функция, которая позволяет во время исполнения программы
получить регион из рисунка (объекта TBitmap). Создание региона из моего рисунка 800х600 отняло 770 миллисекунд
(0,77 секунды) на моём Athlon1700. Уменьшить размер программы тоже можно. Сам рисунок можно хранить в
JPEG файле, а образ региона - в двуцветном растре, где белый - ненужный цвет, а чёрный - нужный.
Экономия: 20 Кб (JPEG) + 60 Кб (2-цветный образ) + 100 Кб (модуль JPEG) = 180 Кб < 1 406 Кб (1,37 Мб) !!!

Прошло немного времени, до меня дошло, что, в принципе, двуцветный растр можно сжать, причём, адаптировав
формат файла под регионы, можно получить существенный выигрыш в скорости. Разработал метод сжатия,
получил хорошие результаты: размер файла - 6 Кб (в 10 раз меньше), скорость распаковки - 90 миллисекунд
(в 9 раз меньше). Прошло ещё какое-то время, и я нашёл способ максимально быстрого создания регионов.
Скорость снизилась до 10 миллисекунд. Правда, и его можно было уменьшить, скажем, до 5 миллисекунд.
Прошло ещё с пол-года, и я додумался до другого (усовершенствованного CCITT Group 3 алгоритма). Долго
не решался реализовать (из-за сложности), и вот на днях всё-таки сделал! Приготовьтесь!
Размер: 2 900 байт (меньше 3 Кб), Скорость: 1-2 миллисекунды! ВОТ ЭТО - РЕЗУЛЬТАТ!

Всё предыдущее - вступление, сейчас - к сути! Я разработал dll пока с одной функцией:
function SaveRgnToFile(Bitmap : TBitmap; Color : TColor; FileName : string) : boolean;

Bitmap - рисунок. Color - цвет в этом рисунке, который считается "ненужным". Если он равен High(TColor),
то используется цвет по умолчанию - цвет левого верхнего угла. FileName - куда сохранить.
Создал так же ReadRegion.pas для чтения этого региона из файлов, памяти и ресурсов. Увеличивает
размер exe всего на 997 байт.

ПРЕДЛАГАЮ СОТРУДНИЧЕСТВО!
Я продолжаю доработку dll, добавляю другие сложные функции по работе с регионами. Но мне нужен
в помощь человек или больше, который запрограммирует действительно удобную визуальную среду,
включающую графический редактор (карандаш, линия, прямоугольник, текст, ластик, увеличение...),
Viewer и имеющую по различным критериям выделить из Jpeg, Gif, Png, Bmp регион. Всё это, конечно,
используя мою dll. Если кто-то уже подумал, что заработает на этом деньги, огорчу. Давайте сделаем
это на благо коллег и прогресса вцелом.

!!!
Но сначала, нужно иметь возможность скачать наработки. Если у кого-то есть сайт и ему не жалко
300 кб, то пусть напишет мне, я вышлю архив, а потом сделаем на форуме ПРЯМУЮ ссылку.

В архиве: SaveRgn.dll + SaveRgn.pas для работы с dll, ReadRegion.pas - модуль для чтения регионов,
Regions.doc - статья по программированию регионов и первая версия Region Maker - утилита для
создания файлов-регионов.


 
antonn ©   (2006-03-29 06:32) [1]

DevilDevil ©   (29.03.06 5:32)
Допустим, у Вас есть bmp рисунок, в центре которого красочное изображение (ну, кнопочки, эмблемы, фон...
- см. Microsoft Media Player), а всё остальное (ненужное) окрашено, например, чёрным. Вообще, довольно
удобно рисовать вид своего окна прямо в Paint или Photoshop.

есть такое понятие, как альфаканал... "прозрачный цвет" в топку.

> В архиве: SaveRgn.dll + SaveRgn.pas для работы с dll,
> ReadRegion.pas - модуль для чтения регионов,

мдя... а в свободный доступ эта "чудо регионалка" никак не может быть выложена? такая ведь была в старов BUPack для делфи5, думаю и на http://www.torry.net/ есть бесплатное.


 
antonn ©   (2006-03-29 06:42) [2]

ладно, продолжу брюзжание:)

DevilDevil ©   (29.03.06 5:32)
Связано это с медленным алгоритмом создания
региона.

нужно забыть про canvas.pixels[] и открыть для себя scanline()


> Прошло немного времени, до меня дошло, что, в
> принципе, двуцветный растр можно сжать, причём,
>адаптировав
> формат файла под регионы, можно получить существенный
>выигрыш в скорости. Разработал метод сжатия,
> получил хорошие результаты: размер файла - 6 Кб (в 10
>раз меньше), скорость распаковки - 90 миллисекунд
> (в 9 раз меньше).

вах... а встроенный zlib чем не нравится?


> Прошло ещё с пол-года, и я додумался до другого
> (усовершенствованного CCITT Group 3 алгоритма).

мдя... пол-года потерять на регионах...


 
iZEN_   (2006-03-29 07:29) [3]

Обалдеть не встать, чем люди занимаются. ;)


 
ZeroDivide ©   (2006-03-29 08:21) [4]

:)


 
КиТаЯц ©   (2006-03-29 08:25) [5]


> DevilDevil ©   (29.03.06 05:32)
>
> Все мы когда-нибудь видели симпатичные приложения нестандартной
> (непрямоугольной) формы. Согласитесь, подобные приложения
> намного
> привлекательнее обычных (прямоугольных).

Не соглашусь.
+ Они еще и неудобнее.


 
Думкин ©   (2006-03-29 08:48) [6]

Была такая задача. Решил. Мир осчастливливать почему то не захотелось. Ибо много где и у кого видел такое. Причем, первые этапы описанного пролетаются на раз. Вы посмотрите те же проекты ДарлингКиндерсли.

Слов много - а к чему - не понятно.


 
KSergey ©   (2006-03-29 09:16) [7]

недавно тут про графоманов кто-то спрашивал... :)


 
TUser ©   (2006-03-29 09:17) [8]

Программа должна выполнять свои функции. Поэтому нефиг выпендриваться. Интерфес должен быть стандартным.


 
Думкин ©   (2006-03-29 09:20) [9]

> TUser ©   (29.03.06 09:17) [8]

Программы - оне разные. есть типа игры, типа не все Дуум. Или мультимедийные энциклопедии. Например.


 
KSergey ©   (2006-03-29 09:38) [10]

DevilDevil ©   (29.03.06 05:32)  
> Существенно облегчить эту задачу смог один (или больше)
> мужик, создавший один Delphi компонент.

Я так и не понял: этот мужик или его творение имеют какое-то отношение к дальнейшему повествованию?

> Допустим, у Вас есть bmp рисунок, в центре которого красочное
> изображение (ну, кнопочки,

Выделенное меня заинтересовало, но я так и не увидел где-либо ниже упоминание о том, что это поддерживается. Вопрос: красиво нарисованные кнопочки поддерживаются в нижеописанной библиотеке?

> Да не совсем!!! Во-первых, скорость каждой компиляции увеличивается
> на пару секунд.
> Связано это с тем,
> что при каждой компиляции, в exe сохраняется тот самый рисунок-
> регион. Поэтому (во-вторых), размер exe
> существенно увеличивается.

Ну, это легко поправить вынеся файл с картинкой наружу. Никто ведь не заставляет влинковыветь его в exe. Есть много способов хранить его отдельно.

> Двадцати четырёх битный растр
> 800х600 ....

К стати, о разрешениях. Мониторных.
У меня выставлено 640х480, у товарища - 1200х1600. Мы с ним будем иметь одинаковые размер окна? (я как-то не увидел по этому поводу опровержений)

>  Сам рисунок можно хранить в JPEG файле

По-моему, все же нет. Если рисунок содержит контрастные переходы (линии. например) - это будет очень коряво. Тут нет смысла экономить.

> Прошло немного времени, до меня дошло, что, в принципе,
> двуцветный растр можно сжать

RLE?

> Всё предыдущее - вступление, сейчас - к сути! Я разработал
> dll пока с одной функцией:
> function SaveRgnToFile(Bitmap : TBitmap; Color : TColor;
>  FileName : string) : boolean;

Я не понял, а как же самая главная мега фунция CreateСurvedWindow??

> Создал так же ReadRegion.pas для чтения этого региона из
> файлов, памяти и ресурсов. Увеличивает

Ах вот оно!

> Но мне нужен
> в помощь человек или больше, который запрограммирует действительно
> удобную визуальную среду,
> включающую графический редактор (карандаш, линия, прямоугольник,
>  текст, ластик, увеличение...),

А Paint чем не угодил? Еще один велосипед хочется?

> Давайте сделаем это на благо коллег и прогресса вцелом.

Есть у меня стойкое подозрение, что этого дела.... много, короче.

> Но сначала, нужно иметь возможность скачать наработки. Если
> у кого-то есть сайт и ему не жалко
> 300 кб, то пусть напишет мне, я вышлю архив, а потом сделаем
> на форуме ПРЯМУЮ ссылку.

А всякие narod.ru - чем плох?


 
Polevi ©   (2006-03-29 10:05) [11]

интересно, аффтар тектовый редактор написал уже ?


 
Rouse_ ©   (2006-03-29 10:08) [12]

угу, и тетрис забыл :)


 
Gero ©   (2006-03-29 10:23) [13]

> Все мы когда-нибудь видели симпатичные приложения нестандартной
> (непрямоугольной) формы.

Ни разу не видел. Когда попадает в руки очередное уродство, сразу появляется желание из него выйти. Хорошо когда еще кнопку закрытия окна можно найти.


 
tsa   (2006-03-29 10:26) [14]


> облегчить эту задачу смог один (или больше) мужик

:))


 
Думкин ©   (2006-03-29 10:39) [15]

> Ни разу не видел. Когда попадает в руки очередное уродство

Так о чем речь - и почему уродство? Не все программы - для бухгалтеров. Их список - ширявее.


 
Gero ©   (2006-03-29 10:49) [16]

> Думкин ©   (29.03.06 10:39)

Да, мне вот как-то программа для разгона процессора попадалась, причем официальная от производителя мат. платы. Вся круглая, ромбовидная и черт-поймешь-какая. Зачем? Кому нужны такие программы?


 
Думкин ©   (2006-03-29 10:51) [17]

> Gero ©   (29.03.06 10:49) [16]

Такие? А я знаю? Но у меня зарядка для телефона круглая - и ничего - работает. А это главное.

Но окна нестандартной формы все-таки имеют свое применение. Например, в упоминавшихся уже мной энциклопедиях для детей от ДарлингКиндерсли. Согласитесь, что стандартная серость виндов для детей - не вполне кузяво. Или нет?


 
Gero ©   (2006-03-29 10:57) [18]

> Думкин ©   (29.03.06 10:51)

Если программа носит презентационный характер, то, действительно, ее можно и разукрасить. И показать один раз.
А если программа нужна чтобы в ней работать, или просто пользоваться ею неоднократно, то извольте.
А энциклопедия для детей, конечно, может быть и разукрашенной.


 
Слоник   (2006-03-29 10:58) [19]

а чего злые-то такие? интересно человеку программировать, на это наложилась показавшаяся полезной идея. по-моему прекрасно. неужели развлечения ради пишете корпоративный софт в стол?


 
Думкин ©   (2006-03-29 11:00) [20]

> Gero ©   (29.03.06 10:57) [18]

А энциклопедия для детей - это тоже программа. :) Вот и все.
Или игра - "Угадай мелодию". Вполне неплохо смотрелась. Да и еще куча проектов.
Для работы, в том смысле ,котрый мы вкладываем(надеюсь одинаковый) - конечно, без украшательств. Функционал важнее.


 
Думкин ©   (2006-03-29 11:01) [21]

> Слоник   (29.03.06 10:58) [19]

Расшифруйте. Желательно в кодировеке 1251.


 
КиТаЯц ©   (2006-03-29 11:03) [22]


> Gero ©   (29.03.06 10:49) [16]
>
> Да, мне вот как-то программа для разгона процессора попадалась,
>  причем официальная от производителя мат. платы. Вся круглая,

Знаю. От ASUS. Ужас!


 
tsa   (2006-03-29 11:05) [23]


> Gero ©   (29.03.06 10:57) [18]

Работать в комфорте лучше, в приятном светлом красивом месте, на стенах что бы картины, из окна замечательный вид, сотрудники бодры и веселы :) Столовая рядом для обеда и подобное. Это лучший выбор. Дисциплина если есть, то перечисленное не помешает хорошо работать.
"Почему он ушёл?? - да ему вид из окна понравился" :P


 
Gero ©   (2006-03-29 11:22) [24]

> [22] КиТаЯц ©   (29.03.06 11:03)
> Знаю. От ASUS. Ужас!

Нет, у меня была от Gigabyte :)))


 
antonn ©   (2006-03-29 11:28) [25]

КиТаЯц ©   (29.03.06 11:03) [22]
Знаю. От ASUS. Ужас!

ой, вы от микростара не видели:))
а еще есть софт к старым цифровым мыльницам - поубивал бы за такое...


 
DevilDevil ©   (2006-03-29 12:47) [26]

Г О С П О Д А!!!

Давайте перестанем заниматься всякой ерундой!!!
Если есть, что сказать по существу, пишите, если  нет - ИЗВОЛЬТЕ.

Думаю, необходимость программирования окон нестандартных
размеров ещё долго будет актуальна. Я создаю удобную утилиту
и модуль для быстрого чтения. Многим окажется полезным.
И в этом плане, обсуждать здесь нечего. Не надо засорять форум.

Кроме того, из вас ещё ни кто утилиты не видел, не ощутил её прелести.

Текущий вопрос (единственно обсуждаемый):
предоставит ли кто место на своём сайте под нужды скачивания и просмотра

Благодарю за внимание


 
Kerk ©   (2006-03-29 12:49) [27]

DevilDevil ©   (29.03.06 12:47) [26]
предоставит ли кто место на своём сайте под нужды скачивания и просмотра


Если вещь действительно работает, могу в кладовке место дать


 
Ketmar ©   (2006-03-29 13:06) [28]

>DevilDevil ©   (29.03.06 12:47) [26]
вах. обявился новый модератор. всем падать ниц!
Сударь, а вы в курсе, что можно читать/писать уже готовые регионы? если уж вам так охота иметь маленькие размеры, сжимайте эти регионы любым LZ-алгоритмом. будут те же 1-2 кб. я, помнится, лет эдак с 5 назад это написал за пол-часа.
так вот, ваша же цитата: "Не надо засорять форум." "компрене ву?" (ц)


 
Gero ©   (2006-03-29 13:08) [29]

> Кроме того, из вас ещё ни кто утилиты не видел, не ощутил
> её прелести.

Так показывай, мы же хотим прелесть ощутить.


 
antonn ©   (2006-03-29 13:57) [30]

Gero ©   (29.03.06 13:08) [29]
Так показывай, мы же хотим прелесть ощутить.

дык он же просит, чтобы ее кто нибудь выложил:)

автору: не переоценивайте значимость регионов, от них прок только на Win9x. Много ли из присутствующих людей пишет программы под Win98 и со скинабельным интерфейсом?
Вот пример, где создается форма "непрямоугольная" (кстати, открытые исходники) - http://kladovka.net.ru/index.cgi?pid=list&rid=318
если сможете сделать такую же регионами - поставлю памятник:) Вообще, не надо равняться на большинство факов из интернета, в которых "непрямоугольные" окна обычно регионами создаются.
использование для создания регионов отдельной библиотеки - непозволительная роскошь (даже если там и будут реализованы механизмы сохранения/загрузки), кстати, сколько она сейчас уже весит?
А если нужен будет resize для окна - это предусмотренно?


 
Джо ©   (2006-03-29 13:57) [31]

> [30] antonn ©   (29.03.06 13:57)
> автору: не переоценивайте значимость регионов, от них прок
> только на Win9x

То есть?


 
Ketmar ©   (2006-03-29 14:03) [32]

>antonn ©   (29.03.06 13:57) [30]
никогда не сравнивали скорость вывода layered-windows и ограниченых регионами? альфа-канал (вкупе с color key) таки тормозит.
впрочем, регионы тоже. %-)
вывод: не надо делать окон странной формы. %-)


 
KSergey ©   (2006-03-29 14:11) [33]

Товарисч!
Нельзя ли ответить на мои вопросы? Мне действительно интересно услышать на них ответ.

PS
Вот что было бы дейсивительно прикольно - это сделать anti-aliasing для границ непрямоугольного окна.
А то обычно он корявые и угловатые слишком уж получаются. А это была ба фишка новой библитеки. Да и поддержка теперь есть для базы этого дела - альфа-каналы.


 
tsa   (2006-03-29 14:15) [34]

Если снята галка "отображать содержимое окна при перетаскивании", то появляющаяся при перетаскивании рамка окна прямоугольная! Получается на экране всё обман - окно вовсе и не "странной формы" - форма обычная, просто пользователю закрывают глаза на правду :)
Вот, и круглые кнопки - они же даже не кнопки. Просто кружки цветные.. без фокуса.
Автор, разубеди такой подход.


 
Ketmar ©   (2006-03-29 14:37) [35]

>KSergey ©   (29.03.06 14:11) [33]
пока некрософт не сделает нормальной поддержки альфа-каналов (где альфа задаётся попиксельно, а не "сразу и для всех"), антиалиасинг делать долго и лениво.


 
antonn ©   (2006-03-29 15:11) [36]

Джо ©   (29.03.06 13:57) [31]
То есть?

на Win2K и выше поддерживаются "слойные" окна, когда система сама просто не отрисовывает некоторые участки (+ еще можно и прозрачные сделать).

Ketmar ©   (29.03.06 14:03) [32]
у меня компутер позволяет много чего делать и не тормозит, поэтому ниче не знаю:)))

KSergey ©   (29.03.06 14:11) [33]
Вот что было бы дейсивительно прикольно - это сделать anti-aliasing для границ непрямоугольного окна.

вот о чем я и говорил. регионами - никак. либо постоянно скриншотить задний фон (но это глюк)

Ketmar ©   (29.03.06 14:37) [35]
пока некрософт не сделает нормальной поддержки альфа-каналов (где альфа задаётся попиксельно, а не "сразу и для всех"), антиалиасинг делать долго и лениво.

а они это сделали... с Win2k. пример я дал выше. Могу дать еще ссылку на программку, где реализовал такой подход (программка в общем фуфел, но сам факт:)) с попиксельной прозрачностью.


 
Ketmar ©   (2006-03-29 15:16) [37]

>Ketmar ©   (29.03.06 14:37) [35]
"попиксельная прозрачность" -- это вы про color keys? сам могу ответить ссылкой на мои screen mates, которые это используют. %-) однако я имел в виду регулирование именно АЛЬФА-КАНАЛА для каждого пикселя. т.е. не два варианта (0% и 100%), а включая все промежуточные. или я отстал от жизни, и уже есть такое API (стандартное)?
как реализовать без layered-windows я знаю. только оно криво будет, как ни пиши.


 
antonn ©   (2006-03-29 15:38) [38]

Ketmar ©   (29.03.06 15:16) [37]
ну и я про "альфазначение" каждого пикселя:)
про функцию UpdateLayeredWindow()


 
Ketmar ©   (2006-03-29 15:55) [39]

мда. слона-то я и не заметил. %-)


 
DevilDevil ©   (2006-03-29 17:47) [40]

вах. обявился новый модератор. всем падать ниц!
Сударь, а вы в курсе, что можно читать/писать уже готовые регионы? если уж вам так охота иметь маленькие размеры, сжимайте эти регионы любым LZ-алгоритмом. будут те же 1-2 кб. я, помнится, лет эдак с 5 назад это написал за пол-часа.
так вот, ваша же цитата: "Не надо засорять форум." "компрене ву?" (ц)


Размер региона = 32 + 16 * количество прямоугольников. В сложных регионах
таких прямоугольников ОЧЕНЬ МНОГО, и, даже сжатые будут занимать больше 3кб.
Кроме того к exe прилинкуется 26кб (модуль zlib). Эффективность снижается.

Вообще алгоритм сжатия алгоритму сжатия - рознь. В данном случае,
словарный алгоритм неэффективен. Эффективны методы сжатия 2цветных
изображений, например, CCITT Group 3. Он отлично сжимает тексты (тексты-рисунки).
Учитывая специфику регионов, можно создать ещё более эффективный комрессор.
Именно этим я и занялся, взяв за основу половину идей CCITT Group 3. Поэтому степень
сжатия так высока (в 20 раз).

Хотя не отрицаю, твоя идея (была) более воплотима и заслуживает внимания. Если будет время,
попробуй сжать мой регион - интересен результат. Кстати, я попробовал дожать мой
файл-регион zlib-ом, получилось: 2 900 байт -->> 1 869 байт. Неплохой результат! Но, опять таки
не эффективен, т.к. модуль zlib добавляет 26Кб.



Страницы: 1 2 3 вся ветка

Форум: "Прочее";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.012 c
6-1137084456
bloodman
2006-01-12 19:47
2006.04.30
Перечислить сет. интерфейсы, Как?


15-1144682254
rolex2002
2006-04-10 19:17
2006.04.30
помогите с информатикой


15-1144303687
fast2
2006-04-06 10:08
2006.04.30
Неужели невозможно???


5-1130421252
Priest
2005-10-27 17:54
2006.04.30
Выпадающий список знач свойства и ReadOnly


2-1145007717
Ezorcist
2006-04-14 13:41
2006.04.30
Boolean и bool?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский