![]() |
| ||
|
|
Новости |
Поиск |
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
ECM (2005-10-23 22:54:00) [141]
> Попробуйте в деме строку
> Glyph := NewBitmap(0, 0);
> заменить
> Glyph := NewDIBBitmap(0,0,pf24bit);
Так не падает, но теперь Glyph выводится без прозрачности - на розовом фоне.
> Пришлите небольшой кусочек экрана
http://ecm-soft.pisem.net/files/ss.zip
NewBitmap.png - первоначальный вариант
NewDIB.png - вариант с NewDIBBitmap
homm (2005-10-23 21:40:00) [142]У-У как все запущено...
> все картинки "замусорены"
не понимаю как это. Пришлите небольшой кусочек экрана ;)
> D:\KOL\kol.pas, line 52261 - 52272
if Empty then Exit;
if fHandle = 0 then
begin
if fDIBBits <> nil then
begin
OldBits := fDIBBits;
DC0 := GetDC( 0 );
fDIBBits := nil;
//fDIBHeader.bmiHeader.biCompression := 0;
fHandle := CreateDIBSection( DC0, fDIBHeader^, DIB_RGB_COLORS,
fDIBBits, 0, 0 );
Отсюда вроде как вытекает что
1) Empty=false
2) fHandle=0
3) fDIBBits <> nil
То есть попытка создать DIB секцию, хотя
> Line 1112, "KOLGRushControls.pas"
fGlyphBitmap.DrawTransparent(Bitmap.Canvas.Handle, GlyphRect.Left, GlyphRect.Top, Data.fGlyphBitmap.Pixels[0,0]);
где fGlyphBitmap сроду не DIB (по крайней мере мне кажется что LoadFromResourceName не должна DIB возвращать).
Попробуйте в деме строку
Glyph := NewBitmap(0, 0);
Glyph.LoadFromResourceName(hInstance, 'ICO1');
заменить
Glyph := NewDIBBitmap(0,0,pf24bit);
Glyph.LoadFromResourceName(hInstance, 'ICO1');
и скажите что получится. (по крайней мере в RB так битмап для подгрузки из ресурса создается, и ес-сно DrawTransparent рисуется).
ЗЫ Ой народ вы бы видели эту красотищу (GRushProgressBar)! Пойду еще часок полюбуюсь...
ECM (2005-10-23 19:57:00) [143]Попробовал запустить под Win98 ... Все демки выпадают по Assert (включил в опциях проекта)
Can not create DIB section, error: 87, Параметр задан неверно. (D:\KOL\kol.pas, line 52280, address $428238)
Вот стек вызовов для DemoProject99:
> + $DC[004281F4]{DEMOPROJECT99.EXE} KOL.TBitmap.GetHandle + $DC
> + $6[004287C2]{DEMOPROJECT99.EXE} KOL.TBitmap.Convert2Mask + $6
> + $50[00427F10]{DEMOPROJECT99.EXE} KOL.TBitmap.StretchDrawTransparent + $50
> + $2D[00427EB5]{DEMOPROJECT99.EXE} KOL.TBitmap.DrawTransparent + $2D
> + $34[0042ABBB]{DEMOPROJECT99.EXE} KOLGRushControls.DrawGRushControlState (Line 1112, "KOLGRushControls.pas" + 133) + $34
> + $4C[004270C4]{DEMOPROJECT99.EXE} KOL.TControl.GetBoundsRect + $4C
> + $26[0042ADAF]{DEMOPROJECT99.EXE} KOLGRushControls.CheckNeedUpdate (Line 1149, "KOLGRushControls.pas" + 3) + $26
> + $19[0042B7CB]{DEMOPROJECT99.EXE} KOLGRushControls.WndProcGRush (Line 1368, "KOLGRushControls.pas" + 129) + $19
> + $2B[00427223]{DEMOPROJECT99.EXE} KOL.TControl.Invalidate + $2B
> + $3[0042B75E]{DEMOPROJECT99.EXE} KOLGRushControls.WndProcGRush (Line 1356, "KOLGRushControls.pas" + 117) + $3
> + $41[00428DCD]{DEMOPROJECT99.EXE} KOL.EnumDynHandlers + $41
> + $D5[00426D11]{DEMOPROJECT99.EXE} KOL.TControl.WndProc + $D5
> + $5C[00426C98]{DEMOPROJECT99.EXE} KOL.TControl.WndProc + $5C
> + $14[00425404]{DEMOPROJECT99.EXE} KOL.CallCtlWndProc + $14
> + $61[00425475]{DEMOPROJECT99.EXE} KOL.WndFunc + $61
> + $18C[00426B90]{DEMOPROJECT99.EXE} KOL.TControl.CreateWindow + $18C
> + $C[004254DC]{DEMOPROJECT99.EXE} KOL.CallTControlCreateWindow + $C
> + $E[004274AE]{DEMOPROJECT99.EXE} KOL.TControl.CreateChildWindows + $E
> + $22[00426A26]{DEMOPROJECT99.EXE} KOL.TControl.CreateWindow + $22
> + $C[004254DC]{DEMOPROJECT99.EXE} KOL.CallTControlCreateWindow + $C
> + $E[004274AE]{DEMOPROJECT99.EXE} KOL.TControl.CreateChildWindows + $E
> + $22[00426A26]{DEMOPROJECT99.EXE} KOL.TControl.CreateWindow + $22
> + $C[004254DC]{DEMOPROJECT99.EXE} KOL.CallTControlCreateWindow + $C
> + $10[004254F4]{DEMOPROJECT99.EXE} KOL.Run + $10
> + $8[0042D062]{DEMOPROJECT99.EXE} DemoProject99.DemoProject99 (Line 148, "D:\KOL\Components\GRush\Demos\DemoProject99.dpr" + 5) + $8
Возможно это ошибка в KOL (2.18) - не разбирался...
Если Assert-ы запретить - запускается, но все картинки "замусорены"...
homm (2005-10-23 19:56:00) [144]Thaddy > controls seem more stable for now
Сократ персональный 4.1 > элементы управления кажутся более конюшней сейчас
Ой, не могу, "конюшней" ;o))
2 SPeller, ECM, fellix
Развели тут offtopic.
Насчет организации ProgressBar, кому какой подход больше нравится?
1) Задать MaxProgress фиксировано в 100 и не мучится, тогда прямо на контроле выводить N% (в RB так)
2) Оставить пользователю MaxProgress, пусть пользуется, а выводить в попугаях, процент кому надо в Caption дорисуют.
3) Оставить пользователю MaxProgress, пусть пользуется, но выводить M%, пересчитывая попугаев на проценты.
Пока оставлю наверное вариант 2. Пока еще не совсем готово. Завтра выложу обновление.
SPeller (2005-10-23 19:49:00) [145]fellix (23.10.05 15:10) [18]
Естественно, качал несколько раз
Я вот, честно говоря, вообще не понимаю проблем с народом :-) Слышу всё, что на народе скорости хреновые, рвётся, лагает и т.п., но сам не замечал. Да, скорость бывает не ахти, но всё всегда качается. Медленно но верно. Эксплорером. :)
ECM (2005-10-23 16:01:00) [146]
> Уж если что-то утверждаю, значит уверен
Эх..все бы так...:)
fellix (2005-10-23 15:10:00) [147]> ECM © (23.10.05 14:02) [16]
Естественно, качал несколько раз. Ну нельзя же собеседника за лоха воспринимать. Уж если что-то утверждаю, значит уверен. Тем более, что предыдущие варианты скачивались нормально.
Thaddy (2005-10-23 14:26:00) [148]Looks good.....
.... but RA/RB ;) controls seem more stable for now.... I had some unexpected difficulties, I will check them out. Maybe my fault.
Both sets are a good thing!
ECM (2005-10-23 14:02:00) [149]Наличие EXE-шника в демо уже является правилом (во всяком случае для КОЛ).
> fellix (23.10.05 11:07) [15]
> ...unexpected end of archive ...
Такое бывает если файл недокачан...Скорость скачивания с narod.ru очень "тосклива" - если качать через IE - часто обрывается...:)
fellix (2005-10-23 11:07:00) [150]> homm
Мне кажется, SPeller прав. Хоть один демо-EXEшник в пакете должен быть. Обычные законы промоутинга.
Не стоит заставлять пользователя даже компилить - он должен сразу видеть, что получит. К тому же, я так понимаю, это уже третий вариант выложен, а в первом ни одна демка не компилилась без ошибок - приходилось вручную править.
Да еще, при установке пакета лезут warnings & hints (Delphi 5). Лучше бы от них избавиться.
Ну и пока последнее: третий вариант grushcontrols.zip: unexpected end of archive (WinRAR 3.50). Кстати, tinypictures тоже.
SPeller (2005-10-23 09:58:00) [151]Да всё я знаю :) Просто вроде как положено скомпиленную дему выкладывать. За ЕХЕшки спасибо :)
homm (2005-10-23 08:52:00) [152]Кто нибудь объясните человеку, что ставить надо только MCK, а коловские не надо. Тем не менее залил с ехе смотри на здоровье ;)
SPeller (2005-10-23 06:53:00) [153]Это надо ставить компоненты, потом компилять. Неужели сложно готовую ЕХЕшку туда сунуть?
homm (2005-10-22 21:34:00) [154]> А то мне ГЛУБОКО ЛЕНИВО устанавливать компоненты только ради того, чтобы посмотреть на их внешний вид.
4 из 5 дем коловские, ставить ниче не надо, а вид как у RB, только лучше ;)
SPeller (2005-10-22 20:27:00) [155]Кстати, на сайте ссылочки такае есть у тебя:
file:///F:/HTML/homm86/ets.zip
file:///F:/HTML/homm86/old/ets.055.zip
file:///F:/HTML/homm86/old/ets.075.zip
Поменял бы..
SPeller (2005-10-22 20:17:00) [156]А это... Влодить в архив ЕХЕшник скомпиленной демы можно? А то мне ГЛУБОКО ЛЕНИВО устанавливать компоненты только ради того, чтобы посмотреть на их внешний вид.
MTsv DN (2005-10-22 18:20:00) [157]
> 2 MTsv DN
> > Первое: так и не смог отобразить на кнопке картинку...
>
> В демах есть и не раз
> Gluph := NewBitMap(0, 0);
> Gluph.LoadFromResourceName(hInstance, 'RAZOR');
> Button4.All_GlyphBitmap := Gluph;
> Gluph.Free;
Да... Я уже разобрался...
> > Второе: для моих надобностей не хватает Prpgress, ComboBox
> и UpDown
> Помнится в каком-то посте ты (а может не ты?) говорил, что
> RB кнопку
> приклел на ComboBox. Это наверное лучший выход т.к. делать
> "дорисовку"
> не получится (там и темы, и прочие глупости перерисовываются
> когда хотят),
> а самому ComboBox с нуля писать накладно и не экономично
> (размер ехе).
Да-да...приклеиваю кнопку на комбик... Но прогресса не хватает :о)
> 2 MTsv DN
> Дак
> > MCK в проекте начало существование с сегодняшнего дня.
>
> > Ничего кроме создания контролов она делать еще не умеет
Усек :о)
С Уважением MTsv DN
homm (2005-10-22 18:04:00) [158]2 MTsv DN
Дак
> MCK в проекте начало существование с сегодняшнего дня.
> Ничего кроме создания контролов она делать еще не умеет
homm (2005-10-22 18:03:00) [159]2 MTsv DN
> Первое: так и не смог отобразить на кнопке картинку...
В демах есть и не раз
Gluph := NewBitMap(0, 0);
Gluph.LoadFromResourceName(hInstance, 'RAZOR');
Button4.All_GlyphBitmap := Gluph;
Gluph.Free;
> Второе: для моих надобностей не хватает Prpgress, ComboBox и UpDown
Помнится в каком-то посте ты (а может не ты?) говорил, что RB кнопку
приклел на ComboBox. Это наверное лучший выход т.к. делать "дорисовку"
не получится (там и темы, и прочие глупости перерисовываются когда хотят),
а самому ComboBox с нуля писать накладно и не экономично (размер ехе).
> P.S. Для Demo'к не хватает RES файлов..
Добавил.
2 ECM
> Совет: Выбрось DCU из архива - толку от них нет, а вес добавляет...:)
Уже знаю. Выкинул.
MTsv DN (2005-10-22 17:42:00) [160]P.S.S. Bitmap отобразил (в MCK), но только "вручную". Через image не получилось...
С Уважением MTsv DN