![]() |
| ||
|
|
Новости |
Поиск |
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
Thaddy (2005-11-02 20:01:00) [101]<CITATION>
3. Уже упоминалось... Если на GRushPanel использовать GRushButton и KOLEdit
(так эффект заметнее), то появляются блики... Причем не только KOLEdit на и
заголовок окна тоже...
</CITATION>
This seems to be a bug in KOL: Boundsrect is always two pixels short X and Y direction.
Boundsrect should be exactly the bounding rectangle, inclusing everything, of a control. Since sometime now, it isn't anymore.
Try a Paintbox with the following OnPaint routine:
procedure PaintBoxPaint(sender:PControl; DC:HDC);
begin
sender.margin:=0;
sender.canvas.brush.color:=clNavy;
sender.canvas.fillrect(sender.boundsrect);
end;
This only works properly like this:
procedure PaintBoxPaint(sender:PControl; DC:HDC);
var
R:TRect;
begin
sender.margin:=0;
R:=sender.BoudsRect;
InflateRect(R,2,2);
sender.canvas.brush.color:=clNavy;
sender.canvas.fillrect(R);
end;
And as such I consider this a bug in KOL, not in GRush Controls, because it happens also in other controls.
Maybe somebody can explain this behaveour?
Regards,
Thaddy
MTsv DN (2005-11-02 14:00:00) [102]2 homm
Привет...
Появились некоторые замечания:
1. При Height кнопки < 21 текст не отображается...
2. При размерах кнопки < 19 (по длине и высоте) не отображается рисунок...
Пробывал bmp 11x11 на кнопку 17х17 - пусто; 18х17 - пусто; 19x18 - пусто;
19x19 - норма...
3. Уже упоминалось... Если на GRushPanel использовать GRushButton и KOLEdit
(так эффект заметнее), то появляются блики... Причем не только KOLEdit на и
заголовок окна тоже...
С Уважением MTsv DN
homm (2005-11-02 10:58:00) [103]homm © (31.10.05 07:39) [54]
Разобрался. В функции WndProcGRush добавь третьей строкой
if Data = nil then exit;
Щас нет возможности обновить.
MTsv DN (2005-11-02 07:11:00) [104]
> Спасибо все работает. У меня вот еще вопрос можно ли сделать
> так чтобы кнопки не выделялись пунктирной линией?
Для каждой кнопки:GRushButton1.All_DrawFocusRect := false;
С Уважением MTsv DN
NightLord (2005-11-02 00:35:00) [105]Спасибо все работает. У меня вот еще вопрос можно ли сделать так чтобы кнопки не выделялись пунктирной линией?
MTsv DN (2005-11-01 20:39:00) [106]
> В каком смысле удалить? И что помагло? Мне тож надо в 7-
> мую =(
Ничего удалять не надо...
Просто берешь файл: GRushControls_D6.dpk, переименновываешь его в GRushControls_D7.dpk... И в GRushControls_D7.dpk все _D6 заменяешь на _D7... и ВСЕ...
С Уважением MTsv DN
NightLord (2005-11-01 19:52:00) [107]
> nicesc (01.11.05 09:15) [55]
> Народ, подскажите как в 7ку её перегнать
>
> Всё разобрался, нужно было удалить system.pas/dcu
В каком смысле удалить? И что помагло? Мне тож надо в 7-мую =(
nicesc (2005-11-01 10:15:00) [108]Если положить стандартныйконтр на GRushPanel то при наведении курсора на кнопку GRushButton возникает эффект мерцания, и если бежит прогресс бар создается эффект мерцания
nicesc (2005-11-01 09:18:00) [109]Всё разобрался, нужно было удалить system.pas/dcu
nicesc (2005-11-01 09:15:00) [110]Народ, подскажите как в 7ку её перегнать
homm (2005-10-31 07:39:00) [111]Вылетает если PAS_VERSION. Надо было с этого начинать. Буду смотреть...
DmiSb (2005-10-31 06:55:00) [112]Не, все равно не хочет вторая форма нормально удаляться [36]
Не знаю как в 7 Дельфе, но в 5-ой - ошибка
И никакие REBUILDне помогают
Сегодня скачал КОЛ 2.19 и последний GRush.
Поставил только эти два пакета - ошибка не пообеждается
homm (2005-10-30 20:24:00) [113]
> Из недостатков (читать: еще не дописал):
> * Не работает TAB.
Упс. Оказывается для поддержки этой клавиши не нужно ничего дописывать. У форм и аплетов есть такие процедуры Tabulate и TabulateEx. Просто не знал.
MTsv DN (2005-10-30 07:56:00) [114]
> 2 MTsv DN
>
> > Кто хочет, может посмотреть эту картинку http://www.uus4u.
>
> > com/download/other/demoproject55_win98.png Специально
> заменил
> > BITMAP в ico.res.
>
> Что это, кстати за дешевая подделка? Сей скрин из ХРени.
> ППКС
Привет...
homm, это не подделка, это ЛЕНЬ... Лень было Винду перегружать :) http://www.uus4u.com/download/other/98.jpg- это Винда 98... Поэтому повторюсь... В 98ой работает нормально...
С Уважением MTsv DN
homm (2005-10-29 20:53:00) [115]Свойства All_AlphaRect, XXX_BorderRect ( далее - "вышеупомянутые ректы" ;))
пересчитываются при изменении размеров компонента. Чтобы иметь возможность
их изменить я эксплуатировал OnResize, который вызывался сразу после вычисления
вышеупомянутых ректов, но до Invalidate, именно в нем (OnResize) и следовало
изменять вышеупомянутые ректы. Возникали две проблемы.
1) если контрол создается строкой например
ProgressBar2 := PGRushControl(NewGRushProgressBar(Panel4).SetSize(45, 200).SetPosition(12, 40));
ProgressBar2.OnResize := ProgressBar2OnResize;
то приходится еще раз изменять размеры контрола, после присвоения процедуры.
2) В ProgressBar сама полоса и есть BorderRect, и было бы неплохо иметь
возможность его изменить перед отображением.
Найденое решение: (возможно придется чуток подправить сырца, если у кого
используются вышеупомянутые ректы):
Нафиг эти свойства нужны! Вместо этого ввести событие
OnRecalcRects : TOnRecalcRects
TOnRecalcRects = procedure( Sender: PGRushControl; var Rects: TRects ) of object;
TRects = record
DefBorderRect: TRect;
OverBorderRect: TRect;
DownBorderRect: TRect;
DisBorderRect: TRect;
AlphaRect: TRect;
end;
Итого изменения в версии 0.27 от 29 октября 2005
[-] Отжал целых 800 байт! Все на чистой оптимизации, без потери функциональности ест-сно.
[+] Новое событие OnRecalcRects вызывается всякий раз когда GRush'и сами изменяют бордеры.
[*] Точка на RadioBox стала без острых углов, организовано как у CheckBox.
[*] В скринах 98 были не закрашеные точки бордера. Что-то с этом сделел, но не могу проверить. :(
[*] CommandActions поправил для правильного AutoSize для CheckBox и RadioBox.
[*] В MCK деме показал, как сделать то, что MTsv DNпредложил насчет ProgressBar.
2 MTsv DN
> Кто хочет, может посмотреть эту картинку http://www.uus4u.
> com/download/other/demoproject55_win98.png Специально заменил
> BITMAP в ico.res.
Что это, кстати за дешевая подделка? Сей скрин из ХРени. ППКС
homm (2005-10-28 21:41:00) [116]
> 1) Рядом с KOLLabel (на расстоянии примерно 10-15 пикселей)
> происходит затирание: http://kol.lighthost.ru/1.png
Проект пожалуйста, а то даже примерно не понял о чем ты.
> Может я придираюсь, но указанные пиксели должны быть либо
> цветом фона, либо....
shalex, ты наверное знаеш ответ, но другим будет полезно.
Достаточно сложно срезать подложку и на ней рисовать компонент (и возможно ли вообще?).
1) Следует указать All_ColorOuter := AlignColorTo16Bit($XXXXXX); где $XXXXXX должно быть близко к цвету подложки.
2) Можно отказатся от сглаживания. All_Antialiasing := false;
> fellix (27.10.05 12:36) [46]
1) *.tar.zip это неприрывный *.zip
2) rar принято распространять самораспоковывающимся (+70 кб)
3) У меня нет лицензии на WinRar.
4) У меня нет старого rar (<=2.9), а открывать архивы приходится на машинах именно с ним.
4) Кто-то вопил что RBControls сжатые RAR'ом не скачиваются (блин. кто же это был...)
5) Если я 7zip запакую лично ты мне спасибо скажеш? (с ним размер раза в 3 менше будет наверное)
6) Тебе спросить бельше нечего?
7) Еще пара сообщений с такой чущью и лично я тебя перестану замечать.
shalex (2005-10-27 21:37:00) [117]И еще одно предложение-просьба: вместе с версией указывайте дату выпуска, а то не понятно: уже новая версия или еще старая... нужно запоминать номер версии... удобней, когда есть дата.
shalex (2005-10-27 20:05:00) [118]1) Рядом с KOLLabel (на расстоянии примерно 10-15 пикселей) происходит затирание: http://kol.lighthost.ru/1.png
2)
> ЗЫ Прошу тех, кого не затруднит присылать отзывы и предложения
>
> сюда на фрум (расматриваются даже сообщение типа "а вот
> сдесь пиксель должен быть
> $fffefd, а он $fffefc")
Может я придираюсь, но указанные пиксели должны быть либо цветом фона, либо.... http://kol.lighthost.ru/2.png
fellix (2005-10-27 12:36:00) [119]> homm © (27.10.05 07:23) [44]
> ...возможно ли было новую версию выложить, не перепаковывая архива?
Цитирую: "[18] ...предыдущие варианты скачивались нормально".
Кстати, а зачем так сложно - tar + zip ? Используйте WinRAR - размер будет почти вдвое меньше; все только спасибо скажут. (P.S. С tinypictures.zip та же ситуация.)
homm (2005-10-27 07:29:00) [120]
> > Кажется autosize не работает в RadioBoxе... может еще
> где-то?
> autosize не "не работает", а работает некорректно... После
> autosize увеличьте ширину на 3 пикселя и все...
кажется я знаю куда надо копать (ButtonActions). Я в принципе о нем (автосайз) еще и не думал.