![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GRush Controls
homm © (2005-10-22 16:03:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
Эпиграф:
"Лучшее враг хорошего"
Многие из вас знакомы с котролами RBControls от Nathanaлl VERON.
Еще большим из вас, наверное знам порт этих контролов под KOL
от RA. Два месяца назад я тоже впервые увидел эти контролы.
Надо сказать что они меня сильно порадовали и я даже стал разбиратся
в исходниках, присылать баг репорты и замечания по коду, и примерно
дня через 3 я понял что ни Nathanaлl VERON ни RA до этого ни разу
не работали с графикой. Многие наверное замечали что RB просто не
реально долго изменяют свой размер, достаточно не быстро рисуются
и прорисовка их в некоторых случаях не совсем коректна. Все это
подталкнуло меня к написанию своего аналога, полностью заменившего
бы контролы RB.
Итак почти через два месяца работы (ну нет у меня возможности
писать каждый день) я хочу поделится своими трудами - GRushControls.
Оновные отличия (преимущества) GRush Controls по сравнению с RB Controls.
-------------------------------------------------------------------------
Первое и самое главное - они БЫСТРЕЕ, причем я говорю не о процентах и
даже не "разах". Они быстрее на порядок! Стоить наверное уточнить о
что под скоростью прорисовки я имею ввиду не только реакцию на
Invalidate, хотя и ее тоже, но и на изменение размеров контрола.
Но что значит "быстрее"? Фактически на их основе становится реально
развешать панелей с градиентом по форме, развернутой на весь экран,
нагрузить ее элементами под завязку и запустить все это чудо на любой
машине с процессором P200 MMX и метрами так восмью видео памяти не
переживая что на разворачивание формы пользователь будет лицезреть
"в реальном времени".
-------------------------------------------------------------------------
Второе о чем бы я хоте упомянуть коректность прорисовки. Попробуйте при
16 битах запустить RB и вы неприменно увидите полосы на градиенте. Еще
например в RB видны какието "битые пикселы" внизу у градиента панели.
Но это по большому счету не так важно, гораздо важнее то что ...
-------------------------------------------------------------------------
В третьих RB - прямо не контролы, а спльшной компромис. Яркий пример -
в панели нельзя использовать схлаживание рамки однавременно с градиентной
заливкой. В GRush таких ограничений нет. Вы в можете задать сглаживание,
градиент, произвольную ширину Border'а, отдельно настроить размер скругления
по вертикали и горизонтали, поместить рисунок, отфармотировать надпись
(слова "выбрать ориентацию текста" слабо подходят для выражения сути
происходящего). Все выше перечисленое можно проделать не только с панелью.
Можно вполне задать Border для сплиттера, или вставить изображение в CheckBox.
Кроме того большинство параметров прорисовки для каждого "состояния" задаются
отдельно (всего состояний четыре: нормальное, с наведеным курсором, с нажатием,
неактивный контрол) это позволяет делать вещи, о которых я даже не подазревал
кагда писал компаненты (элементрарные прмер - смещение градиента на пиксаль
вниз в состоянии "нажато" придает эфект утапливаемой кнопки)
-------------------------------------------------------------------------
Кроме того:
* Размер кода GRush меньше примерно на 5 кб
* Размер выполняемого приложения в памяти в общем случае меньше
(конкретные цифры зависят он размеров компанентов и аоличества панелей)
* Много еще приятных мелочей.
Из недостатков (читать: еще не дописал):
* MCK в проекте начало существование с сегодняшнего дня. Ничего кроме создания
контролов она делать еще не умеет, посему все свойства надобно где нибудь
в FormCreate выставлять (в вемах ощие принцип показан).
* Отсутствуют некоторые контролы (ProgressBar, StyleManager, возможно Memo)
* Кнопка не может быть "вдавлена" (AllowAllUp), не работает DoubleClick.
* Не работает TAB.
* Не все задуманое безобразие относительно взаимного расположения рисунка (Glyph)
и текста реализовано.
* Безобразная работа с Glyph (сам Bitmap)
После всего прочтенного наверняка у многих возник вопрос:
"А где это чудо можно закачать?"
Ответ прост:
http:/www.homm86.narod.ru
Огромное спасибо shalex и RA за помощь и тестирование.
ЗЫ Прошу тех, кого не затруднит присылать отзывы и предложения
сюда на фрум (расматриваются даже сообщение типа "а вот сдесь пиксель должен быть
$fffefd, а он $fffefc"), а также небольшой снимок градиентной панели в (!) 16 битах
в формате PNG на мыло вместе с моделью вашей видео карты (тут недавно глюки у одного
человека были, как бы не пришлось все ядро прорисовки переделывать).
--
____________________________________________________________
С уважением,
Карпинский Александр | mailto:homm86@mail.ru
Vladimyr (2005-12-01 19:28:00) [61]2 homm :
да нечего, собственно, раскрывать...
глюк то проявится, то нет (чаще нет)
системы никакой не заметил
homm (2005-12-01 10:22:00) [62]Мельком глянул (дома буду только в воскресенье).
2 Vladimyr
В универе под 2000 (что то возле селерон 400) все работает (с сайта скачал, не с собой принес если что). Вы говорите в некоторых случаях? может стоит раскрыть?
2 MTsv DN
> Оговорюсь сразу - Я ПРОЧИТАЛ: Если будут проблемы типа "в
> 9х прозрачность не работает, в ХРени все ОК" то это к Владимиру.
Это не отричение от всех проблем прозрачности, это действительно только про DrawTransparent.
У тебя в деме стоит Transparent=TRUE, а у меня в демах прописано
OnFormCreate...
homm_altTransparent := TRUE.
Это и есть основное отличие старого механизма от нового. Он задается новой функцией (я то думал это сразу бросится в глаза).
Все это безобразие в демах тоже появляется (вылет винды)?
Vladimyr (2005-11-30 16:46:00) [63]Глюки наблюдаются в 2000-й винде.
Конечно, это не ХР, но и не 98! :)
MTsv DN (2005-11-30 11:37:00) [64]Привет...
Вот обещанный проект:
исходники (9 kB) : http://www.uus4u.com/download/modules/KOLnMCK/demo_src.zip
exe&comments (95 kB): http://www.uus4u.com/download/modules/KOLnMCK/demo_exe.zip
Все комментарии в demo_exe.zip.
УБЕДИТЕЛЬНАЯ ПРОСЬБА. КТО ЕЩЕ МОЖЕТ ПРОТЕСТИРОВАТЬ НА WINDOWS 98, СДЕЛАЙТЕ ЭТО. ОПИСАНИЕ ТЕСТА В demo_exe.zip
С Уважением MTsv DN
MTsv DN (2005-11-30 09:43:00) [65]Привет...
Я не обновлял KOL. Я взял готовые exe-шники из архива :)
А Windows какая?
На сайте у homm86'a есть патч, который обновляет файл KOL.PAS до версии 2.22+. Все нормально работает...... НО ТОЛЬКО В WINDOWS ХР
2 homm86
Оговорюсь сразу - Я ПРОЧИТАЛ: Если будут проблемы типа "в 9х прозрачность не работает, в ХРени все ОК" то это к Владимиру .
Но при обновлении до 2.22+ и gRush 0.30, я в Windows 98 ожидал, в крайнем случае, неправильную "прозрачность". Однако, Windows 98 зависла, а затем аварийно завершилась...без каких-либо последующих проблем, но все же... Сейчас попытаюсь создать минимальный проект, как сделал отпишусь...
С Уважением MTsv DN
Vladimyr (2005-11-29 22:42:00) [66]Я не обновлял KOL. Я взял готовые exe-шники из архива :)
MTsv DN (2005-11-29 09:46:00) [67]> В демах из последней версии архива наблюдается интересный глюк:
> при первом запуске программы иногда не прорисовывается кусок формы (одна из панелей), там остаётся кусок экрана, который был раньше.
> Если провести мышью над этим куском, то он прорисовывается и дальше работает нормально.
> Глюк был замечен в DemoProject55.exe и Aladin.exe.
А Вы обновили KOL до версии 2.22+ или хотя бы прочитали файл #README#RUS#.txt. У меня такого не наблюдается...
С Уважением MTsv DN
Vladimyr (2005-11-28 16:40:00) [68]В демах из последней версии архива наблюдается интересный глюк:
при первом запуске программы иногда не прорисовывается кусок формы (одна из панелей), там остаётся кусок экрана, который был раньше.
Если провести мышью над этим куском, то он прорисовывается и дальше работает нормально.
Глюк был замечен в DemoProject55.exe и Aladin.exe.
homm (2005-11-25 18:25:00) [69]news v0.30 от 25.11.05
[*] Очень мне не нравятся дела в KOL с функцией DrawTransparent и я решил использовать системную TransparentBlt там, где это возможно. Если будут проблемы типа "в 9х прозрачность не работает, в ХРени все ОК" то это к Владимиру
[*] Наконец-то контролы стали чичтить за собой мусор при уничтожении. Теперь используется CustomObj вмест CustomData
[*] При изменении Caption больше не нужно вызывать SetAllNeedUpdate, теперь он вызывается автоматически
[*] Оптимизированы конструкторы, вынесен общий код
[*] Теперь используется OnPaint вместо перехвата WM_PAINT. Это будет экономить немного кода, если в проекте уже используется OnPaint. Если нет, то немного кода будет экономить директива GRUSH_OLD_PAINT
Убедительная просьба
Прочтите ReadMe прежде чем пользоватся.
Кстати с этой версией идет отличный бонус (какой - в Readme).
MTsv DN (2005-11-21 13:17:00) [70]О-о-о... :)
Сенкс....
homm (2005-11-21 12:48:00) [71]
> MTsv DN (21.11.05 11:20) [93]
Вот тут тебе и пригодится перехват OnRecalcRects.
procedure TForm1.GRushProgressBar2RecalcRects(Sender: PGRushControl;
var Rects: TRects);
var W: integer;
begin
with Rects.DefBorderRect do begin
W := Right - Left;
Left := Sender.Width - W;
Right := Left + W
end;
end;
Мысли шире ;)
MTsv DN (2005-11-21 11:20:00) [72]Привет...
Огромная просьба... Если возможно, добавить для ПрогрессБара свойство "обратного заполнения", т.е. справа налево и сверху вниз (в зависимости от Vertical)...
С Уважением MTsv DN
homm (2005-11-13 18:11:00) [73]news v0.29 от 13.11.05
[*] Исправлены зеркала, особено для сплиттера и прогрессбара.
[-] Дико извеняюсь, но я в прошлой версии забыл убрать Vertical у ProgressBar.
[+] Событие OnProgressChange;
[+] События OnProgressChange, OnRecalcRects можно теперь в зеркале делать.
Прозрачность в KOL пока в подвешаном состоянии, если нужна - испльзуйте 2.21.
Vladimir Kladov (2005-11-11 23:33:00) [74]В 2.22 исправлено же вроде?
homm (2005-11-11 23:23:00) [75]
> 1. Иногда не работает autosize, Вы учитываете шрифт (при
> разных настройках Винды) при определении размера контрола?
>
Шрифт учитывает KOL. AUTOSIZE счисается для стандартных shadowoffsets, может ты их измняеш?
> 2. В win95 (уж так получилось, что прогу пришлось запустить
> на Pentium I) при стандартных свойствах контролов grushbutton
> не виден на grushpanel (виден только caption), если grushbutton
> задизабленный, то все ок. Может какие-то свойства нужно
> менять?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127191462&n=10
SPeller (2005-11-11 13:05:00) [76]Мнда... Тогда проще будет рисовать самому, по всей видимости.
Vladimir Kladov (2005-11-11 11:06:00) [77]он отлавливается, но если его запретить (кстати единственный правильный вариант тогда - отдать фокус обратно), то нажатие есть, а визуально кнопка не нажимается. Можно по отжатию фокус возвращать, тогда в приходе фокуса надо запоминать окно, от которого фокус. А если это окно не нашего приложения - как быть?
SPeller (2005-11-11 06:00:00) [78]Тогда надо проверить приход события WM_SETFOCUS, и если приходит, то отлавливать его..?
Vladimir Kladov (2005-11-10 20:10:00) [79]LikeSpeedButton через убирание стиля WS_TABSTOP как раз и сделан. Но у Windows есть свое мнение по поводу оконного класса 'BUTTON', если нажать мышкой, то фокус все-таки за ним (вроде так получается). Можно попробовать сделать BitBtn на другом классе, например, Static.
Кнопка с картинкой сделана через стиль. Может другое сочетание стилей надо. Какое - не знаю.
GMax (2005-11-10 13:19:00) [80]2 Vladimir Kladov:
насчёт bitbtn.
а как бы тогда получить кнопку одновременно с текстом и иконкой ?
в MSDN вроде такие нарисованы ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/buttons/usingbuttons.asp),
но по крайней мере в KOL при присвоении иконки текст пропадает.