Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GRush Controls


Страницы:   1 2 3 4 5 6 7 8 9

homm ©   (2005-10-22 16:03:00) 

Эпиграф:
"Лучшее враг хорошего"

Многие из вас знакомы с котролами 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 при присвоении иконки текст пропадает.


Страницы:   1 2 3 4 5 6 7 8 9

Наверх

Титульная страница Поиск, карта сайта Написать письмо