Будет, но не нужно, т.к. вчера невнимательно посмотрел. Итогом:
В интерфейсной секции просто не были указаны ни LCLType, ни LCLIntf. LCLType нужен для части констант, LCLIntf для функции SetBkMode (и, возможно, для ещё каких-нибудь).
В конечном итоге отказался от ассемблерной конструкции, заменив её аналогичной по логике, но гораздо более читабельной паскальной
Градиент заработал, что смог проверил. Выношу на суд общественности исправленную версию.
P.S. Проверял под x86_64 linux + FPC 2.5.1 svn r15177 + Lazarus svn r24946. Огромная просьба погонять под другими версиями...
Добавлено спустя 6 часов 55 минут 14 секунд: Теперь чуть подробнее про изменения. Что было поправлено:
Процедура InitPixArray; В ней, перед вызовом функции, определяющий цвет пиксела в текущей позиции, я поставил преобразование из TColor в RGB. Для чего: В LCL/FCL TColor = longint с присущими ему (longint'у) отрицательными значениями, и, соответственно при отрицательных значениях на входе будет инверсия битов, что нам не надо.
type ptRGB=^tRGB; tRGB=array[1..4] of byte; {..............} var {.........} Color1,Color2 : ptRGB;
begin {...........} Color1:=@StartC; Color2:=@FinalC; GetColorBetween:=(CalcColorBytes(Color1^[1],Color2^[1]) and $000000FF) or ((CalcColorBytes(Color1^[2],Color2^[2]) shl 8) and $0000FF00) or ((CalcColorBytes(Color1^[3],Color2^[3]) shl 16) and $00FF0000); end;
Для чего. Ассемблер хорош тогда, когда известна машина, на которой написанный код будет работать. В нашем случае это совсем не так. Есть i386, x86_64, mips, arm... Регистры и работа с ними слегка отличается. Мало того, та asm вставка, что была по сути ничего не считала, потому как сразу после загрузки в EAX начального цвета выполнялся переход в конец кода. (je @@exit; --> @@Exit: mov @result, eax). А этот код успешно соберётся на любой машине, где будет fpc/lazarus. Причём компилируется этот код по-разному в зависимости от установок компилятора, но работает одинаково .
Добавлено спустя 3 часа 41 минуту 59 секунд: Попробовал под win32 (fpc 2.4.1 + Lazarus 0.9.29 r24946). Без замечаний.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
alaken, безусловно интересная штука но на мой взгляд имеет один серьёзный недостаток который стоит доработать - отсутствие свойства "Anchors". Я попробовал его прописать в модуле компонента, но он его признаёт тока на этапе проектирования окна, при выполнении приложения игнорирует.
Graphics32 наткнулся случайно перебирая старые форумы Delphi вроде как исходники адаптированы для Lazarus но у меня не компилится (((, останавливается на ассемблерных вставках...
Подлинный автор (ы)Алексей Денисов Разработчик (и) Маттиас Андерссон, Андре Беккедорф, Кристиан Budde, Майкл Bunk, Майкл Хансен, Ангус Джонсон и др.. Первый выпуск 9 марта 2000 ; 10 лет назад Стабильная версия 1,9 / 9 марта 2010 ; 49 дней назад Написано в Delphi , Free Pascal Операционная система Кросс-платформенная Развитие статуса Поддерживает Тип Компьютерная графика Лицензия MPL , LGPL + Связь Исключение Веб-сайтhttp://www.graphics32.org
Graphics32 это бесплатная графическая библиотека для Borland Delphi и Kylix оптимизирован для 32-битных пикселей форматов, которые под лицензией Mozilla Public License. Graphics32 обеспечивает быстрые операции с пикселями и графическими примитивами и почти в 100 раз быстрее, в расчете на пиксель и примерно в 2-5 раза быстрее, рисования линий, чем стандартные компоненты Embarcadero, которые для Windows GDI . Кроме того, она обеспечивает альфа-смешение , Anti Aliasing , а также фильтры для интерполяции и деформации точечных рисунков.
Некоторые из Graphics32 функции включают в себя:
Быстрый попиксельный доступ в 100 раз быстрее по сравнению со стандартными TBitmap
Высокопроизводительное Bitmap альфа-смешивание (в том числе на пиксель альфа-смешения)
Pixel, линии и полигонное сглаживание с субпиксельной точностью (в сочетании с альфа-канал)
Bitmap ресамплинг с высоким качеством реконструкции фильтров (например, Ланцоша , кубический, Митчелл)
Гибкая supersampling реализация для максимального дискретного качества
Изображения избавлены от мерцания компоненты отображаются с оптимизированной двойной буферизацией расширенный MicroTiles основан оптимизированной перерисовке
Примечание: Mozilla Public License означает - можно копировать и изменять исходный код который потом тоже будет под этой лицензией позволяет часть нового кода лицензировать по другой, даже закрытой, лицензией не совместима с GPL.
alaken писал(а):Graphics32 наткнулся случайно перебирая старые форумы Delphi вроде как исходники адаптированы для Lazarus но у меня не компилится (((, останавливается на ассемблерных вставках...
Вроде как они обещают совместимость только с 32-х разрядными системами при этом ссобщая о том, что работа с 64-х разрядными в процессе.
Добавлено спустя 28 минут 58 секунд: Ассемблерные вставки. Всё бы хорошо, но в новых версиях FPC (>= 2.4) надо указывать тип ассемблера. В коде модулей используется код интеловского ассемблера, а в FPC по умолчанию AT&T.
Добавлено спустя 50 минут 12 секунд: Откомпилировалось. С правкой и asm частей тоже. Потому что у меня x86_64... и FPC Но вот потестить не могу. Если будет интересно - приаттачиваю патчик. Если будет в такой конфигурации работать - можно и разрабам правку отправить
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Подскажите компонент типа StringGrid, умеющий объединять ячейки по вертикали, горизонтали или от X,Y до X+n,Y+n. Гуглил долго. Нагуглил лишь под Delphi.
На случай если у кого-то, как и у меня, появится необходимость работы с UTF-8 в приложении, которое не использует LCL (например в консольном), а ставить LCL в зависимости не желательно, выкладываю сокращённую версию модуля LCLProc.pas. Это копия LCLProc, из которой убрано почти всё, не связанное с UTF-8, и в которую добавлены несколько необходимых функций из FileUtil. Форматирование сохранено, поэтому модуль можно будет синхронизировать с новыми версиями LCLProc с помощью diff.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Посоветуйте компонент, который крутится и что-то делает в своем собственном потоке. Разъясняю...
Открываю Query. Запрос большой, данных много. Где-нибудь в уголочке включается и крутится какая-нибудь анимашка, показывающая, что прога не зависла. После открытия запроса анимашка убирается.
Почти идеально подходит ProgressBar.Style := pbstMarquee; он он работает в основном потоке и потому прорисовка не идет - все замораживается. Можно, конечно самому с потоками поизголяться... может готовый компонент есть? или что-нибудь из стандартной палитры подойдет?
dunin писал(а):Почти идеально подходит ProgressBar.Style := pbstMarquee; он он работает в основном потоке и потому прорисовка не идет - все замораживается. Можно, конечно самому с потоками поизголяться... может готовый компонент есть? или что-нибудь из стандартной палитры подойдет?
не делай отрисовку, в дополнительных потоках! лучше выполнение работы перенеси в дополнительный поток.