Компоненты и примеры

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Компоненты и примеры

Сообщение FeodoR » 26.04.2010 08:02:58

Будет, но не нужно, т.к. вчера невнимательно посмотрел.
Итогом:
  1. В интерфейсной секции просто не были указаны ни LCLType, ни LCLIntf. LCLType нужен для части констант, LCLIntf для функции SetBkMode (и, возможно, для ещё каких-нибудь).
  2. В конечном итоге отказался от ассемблерной конструкции, заменив её аналогичной по логике, но гораздо более читабельной паскальной :)
  3. Градиент заработал, что смог проверил. Выношу на суд общественности исправленную версию.

P.S. Проверял под x86_64 linux + FPC 2.5.1 svn r15177 + Lazarus svn r24946. Огромная просьба погонять под другими версиями...

Добавлено спустя 6 часов 55 минут 14 секунд:
Теперь чуть подробнее про изменения. Что было поправлено:
  1. Процедура InitPixArray;
    В ней, перед вызовом функции, определяющий цвет пиксела в текущей позиции, я поставил преобразование из TColor в RGB.
    Для чего: В LCL/FCL TColor = longint с присущими ему (longint'у) отрицательными значениями, и, соответственно при отрицательных значениях на входе будет инверсия битов, что нам не надо.
  2. Процедура GetColorBetween.
    Замена ассемблерной вставки
    Код: Выделить всё
      asm
         mov EAX, Startcolor
         cmp EAX, endColor
         je @@exit
         mov r1, AL
         shr EAX,8
         mov g1, AL
         shr Eax,8
         mov b1, AL
         mov Eax, endcolor
         mov r2, AL
         shr EAX,8
         mov g2, AL
         shr EAX,8
         mov b2, AL
         push ebp
         mov al, r1
         mov dl, r2
         call CalcColorBytes
         pop ecx
         push ebp
         Mov r3, al
         mov dL, g2
         mov al, g1
         call CalcColorBytes
         pop ecx
         push ebp
         mov g3, Al
         mov dL, B2
         mov Al, B1
         call CalcColorBytes
         pop ecx
         mov b3, al
         XOR EAX,EAX
         mov AL, B3
         shl EAX,8
         mov AL, G3
         shl EAX,8
         mov AL, R3
    @@Exit:
         mov @result, eax
      end;

    на вот такую вот конструкцию (одинаковая часть кода пропущена)
    Код: Выделить всё
    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). Без замечаний.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
FeodoR
новенький
 
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО

Re: Компоненты и примеры

Сообщение alaken » 27.04.2010 10:26:55

FeodoR
огромное спасибо
У вас нет необходимых прав для просмотра вложений в этом сообщении.
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: Компоненты и примеры

Сообщение qivi » 29.04.2010 21:12:32

alaken, безусловно интересная штука но на мой взгляд имеет один серьёзный недостаток который стоит доработать - отсутствие свойства "Anchors". Я попробовал его прописать в модуле компонента, но он его признаёт тока на этапе проектирования окна, при выполнении приложения игнорирует.

Собственно то же самое тока в Линукс;
111.png
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Компоненты и примеры

Сообщение VirtUX » 30.04.2010 00:02:10

Спасибо за компонент - красиво!
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Компоненты и примеры

Сообщение alaken » 30.04.2010 07:34:12

Спасибо FeodoR , это все благодаря ему...

Graphics32 наткнулся случайно перебирая старые форумы Delphi вроде как исходники адаптированы для Lazarus но у меня не компилится (((, останавливается на ассемблерных вставках...

авто-перевод с английской wiki
Graphics32 (GR32)
    Подлинный автор (ы)Алексей Денисов
    Разработчик (и) Маттиас Андерссон, Андре Беккедорф, Кристиан 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
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Re: Компоненты и примеры

Сообщение devICE » 05.05.2010 10:48:50

Есть ли компонент к Lazarus, который выполняет роль веб-браузера с поддержкой CSS. TIpHTMLPanel не устраивает именно отсутствием поддержки CSS.
Аватара пользователя
devICE
новенький
 
Сообщения: 14
Зарегистрирован: 20.02.2010 20:24:05

Re: Компоненты и примеры

Сообщение FeodoR » 06.05.2010 17:00:20

alaken писал(а):Graphics32 наткнулся случайно перебирая старые форумы Delphi вроде как исходники адаптированы для Lazarus но у меня не компилится (((, останавливается на ассемблерных вставках...


Вроде как они обещают совместимость только с 32-х разрядными системами при этом ссобщая о том, что работа с 64-х разрядными в процессе.

Добавлено спустя 28 минут 58 секунд:
Ассемблерные вставки. Всё бы хорошо, но в новых версиях FPC (>= 2.4) надо указывать тип ассемблера. В коде модулей используется код интеловского ассемблера, а в FPC по умолчанию AT&T.

Добавлено спустя 50 минут 12 секунд:
Откомпилировалось. С правкой и asm частей тоже. Потому что у меня x86_64... и FPC :)
Но вот потестить не могу. Если будет интересно - приаттачиваю патчик. Если будет в такой конфигурации работать - можно и разрабам правку отправить :)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
FeodoR
новенький
 
Сообщения: 59
Зарегистрирован: 16.04.2010 12:11:34
Откуда: MSK, ЮАО

Re: Компоненты и примеры

Сообщение VirtUX » 06.05.2010 22:21:16

Подскажите компонент типа StringGrid, умеющий объединять ячейки по вертикали, горизонтали или от X,Y до X+n,Y+n. Гуглил долго. Нагуглил лишь под Delphi.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Компоненты и примеры

Сообщение Padre_Mortius » 17.05.2010 23:00:08

Можно попробовать посмотреть на эти компоненты. Сам их еще не смотрел
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Компоненты и примеры

Сообщение VirtUX » 18.05.2010 00:12:08

Padre_Mortius писал(а):Можно попробовать посмотреть на эти компоненты.

Спасибо! Компонент TKGrid на Mandriva 2010.0, Qt4 (v. 2.1), Lazarus 0.9.29 (SVN 25471) работает, пока, прекрасно.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Компоненты и примеры

Сообщение Odyssey » 23.05.2010 13:17:02

На случай если у кого-то, как и у меня, появится необходимость работы с UTF-8 в приложении, которое не использует LCL (например в консольном), а ставить LCL в зависимости не желательно, выкладываю сокращённую версию модуля LCLProc.pas. Это копия LCLProc, из которой убрано почти всё, не связанное с UTF-8, и в которую добавлены несколько необходимых функций из FileUtil. Форматирование сохранено, поэтому модуль можно будет синхронизировать с новыми версиями LCLProc с помощью diff.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Компоненты и примеры

Сообщение dunin » 02.06.2010 15:22:19

Посоветуйте компонент, который крутится и что-то делает в своем собственном потоке. Разъясняю...

Открываю Query. Запрос большой, данных много. Где-нибудь в уголочке включается и крутится какая-нибудь анимашка, показывающая, что прога не зависла. После открытия запроса анимашка убирается.

Почти идеально подходит ProgressBar.Style := pbstMarquee; он он работает в основном потоке и потому прорисовка не идет - все замораживается. Можно, конечно самому с потоками поизголяться... может готовый компонент есть? или что-нибудь из стандартной палитры подойдет?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Компоненты и примеры

Сообщение скалогрыз » 02.06.2010 15:32:41

dunin писал(а):Почти идеально подходит ProgressBar.Style := pbstMarquee; он он работает в основном потоке и потому прорисовка не идет - все замораживается. Можно, конечно самому с потоками поизголяться... может готовый компонент есть? или что-нибудь из стандартной палитры подойдет?


не делай отрисовку, в дополнительных потоках!
лучше выполнение работы перенеси в дополнительный поток.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Компоненты и примеры

Сообщение dunin » 02.06.2010 16:19:32

скалогрыз писал(а):...
не делай отрисовку, в дополнительных потоках!
лучше выполнение работы перенеси в дополнительный поток.

Спасибо. А компонент подскажет кто-нибудь?
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Компоненты и примеры

Сообщение скалогрыз » 02.06.2010 16:33:38

dunin писал(а):Спасибо. А компонент подскажет кто-нибудь?

нет. вызывай чаще Applicaiton.ProcessMessages :D
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

Рейтинг@Mail.ru