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

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

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

Ответить
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

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

Сообщение Attid »

все таки такая тема нужна хоть и в поиске много чего можно уже найти на торри ничегоне началось а на нашем сайте пока тихо.
для начало много всего есть в придачу это примеры
/lazarus/examples/
и компоненты
/lazarus/components/
не знаю есть ли описания всего что там на русском если нет надо будет описать в этом топике.

компонеты еще есть на оф сайте http://www.lazarus.freepascal.org/modul ... eA&show=10
тоже надо будет перенести сюда с описанием на русском.

Lazarus Code and Component Repository


Предотвращение запуска нескольких копий программы.

RxLib от Лагунова Алексея
http://www.alexs75.narod.ru/fpc/rxfpc/index.html

alexsDataSet от Лагунова Алексея
http://www.alexs75.narod.ru/fpc/fbdataset/index.htm

LazReport генератор отчетов на основе freereport
http://lazreport.sourceforge.net/
последняя версия
http://mx.geocities.com/jesusrmx/lazaru ... 608.tar.gz

OpenGL Box позволяет рисовать OpenGL на форме.
http://www.slashstone.com/more/openglbox/

lNet сетевые компоненты
( * Base lNet TCP/UDP - stable
* Telnet Client - stable*
* FTP Client - stable*
* SMTP Client - stable**
* HTTP Client - experimental
* HTTP Server - experimental )
http://wiki.lazarus.freepascal.org/lNet

reportlivre генератор отчетов
https://sourceforge.net/projects/reportlivre/

Orpheus Port куча компонент от поворачиваех лейболов до компонент работающих с ДБ . надо их будет потестить
http://web.fastermac.net/~MacPgmr/OrphP ... tatus.html

Pascal Data Objects компонент доступа к различным БД
http://pdo.sourceforge.net/

Multilanguage unit/framework for Lazarus
http://www.softwareschule.ch/download/laz_multilang.zip
Последний раз редактировалось Attid 08.06.2007 21:51:34, всего редактировалось 3 раза.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Примеры

примеры от shade
svn http://tools.assembla.com/svn/zalex/examples (для анонимного checkout попробуйте guest/guest, если будут проблемы дайте знать или зарегистрируйтесь http://www.assembla.com/ )

пример пазла на лазарусе
http://www.softwareschule.ch/download/laz_puzzle.zip

VNC клиент на Lazarus by David Schenk
http://sourceforge.net/projects/dsk
Последний раз редактировалось Attid 07.06.2007 10:28:50, всего редактировалось 1 раз.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

cgi
CGI Data Modules
Incomplete: Requires implementation of the IDE Interface for data modules.

codetools
The builtin pascal parser and pascal completion/refactoring tools of the IDE.

custom
Obsolete: Use packages instead
User defined components for the IDE

fpcunit
template for a fpcunit gui test runner

gtk
GTK specific components

gtkglarea
An OpenGL control. Only usable with the gtk interface under linux.

htmllite
HTMLLite package. A multithreaded HTML control.

interbase
Interbase database package.

jpeg
JPEG support for LCL and IDE.

memds
TMemDataset датасет работаеющий с памятью или локальным файлом.

mpaslex
Небольшой парсер для pascal.
не является на самом деле компонентом.

mysql
MySQL database package.

sdf
SDF database package.

sqlite
SQLite database package.

synedit
Редактор который используется самим IDE.
оф страница http://sourceforge.net/projects/synedit/

synunihighlighter
Модуль универсальной подсветки для synedit.
http://www.delphist.com/UniHighlighter.html
http://www.delphist.com/unidownloads.html

tdbf
TDBF database package.

turbopower_ipro
A HTML control.
Последний раз редактировалось Attid 08.06.2007 14:00:12, всего редактировалось 1 раз.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

kosteek
постоялец
Сообщения: 203
Зарегистрирован: 24.07.2008 14:57:09
Откуда: Украина, г.Славянск

Сообщение kosteek »

У кого есть ссылка на компонент ASC для Lazarus?
Компонент для кроссплатформенной работы со звуком.

Лежит перед носом и неувидел :D .

svn версия
https://lazarus-ccr.svn.sourceforge.net/svnroot/lazarus-ccr/components/acs
Dzirt
незнакомец
Сообщения: 2
Зарегистрирован: 16.10.2008 15:30:05

Сообщение Dzirt »

для Lazarus есть компоненты на BDE, ADO и какие-нибудь средства создания отчетов?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Dzirt писал(а):какие-нибудь средства создания отчетов

c:\lazarus\components\lazreport

Dzirt писал(а):BDE, ADO

это не кросплатформенные решения, может ZeosLib подойдет ?
Dzirt
незнакомец
Сообщения: 2
Зарегистрирован: 16.10.2008 15:30:05

Сообщение Dzirt »

Attid писал(а):это не кросплатформенные решения, может ZeosLib подойдет ?

Не знаю, нужно посмотреть. ZeosLib - это стандартный или нужно устанавливать, можешь дать ссылку?
voltron
новенький
Сообщения: 64
Зарегистрирован: 06.07.2007 13:27:46
Откуда: Украина

Сообщение voltron »

Dzirt писал(а):ZeosLib - это стандартный или нужно устанавливать, можешь дать ссылку?

Это отдельный компонент, в стандартную поставку Lazarus он не входит. Взять можно по адресам
http://sourceforge.net/projects/zeoslib
http://zeos.firmos.at/
algor
новенький
Сообщения: 11
Зарегистрирован: 24.11.2008 16:36:14

Сообщение algor »

Нет ли под FPC/Lazarus какого-нибудь парсера мат. выражений?
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Код: Выделить всё

Преобразование строки в математическое выражение и получение результата.
Автор: Vimil Saju
Представляю Вашему вниманию сомпонент, на вход которого подаётся строка, содержащая математическое выражение, а на выходе результат вычисления этого выражения. При необходимости Вам не составит труда добавить в компонент такие функции как sin,cos,log,tan и т.д. Единственная неприятность, это присутствие глюка. Если ввести строку типа '5* -3', то мы получим ошибку. Я обязательно в ближайшее время постараюсь исправить данный баг.
Совместимость: Delphi 4.x (или выше)
  Собственно сам исходничек:
  unit MathComponent;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,math;
 
 
 type
 TMathtype=(mtnil,mtoperator,mtlbracket,mtrbracket,mtoperand);
 
 type
 TMathOperatortype=(monone,moadd,mosub,modiv,momul,mopow);
 
 type
 pmathchar = ^Tmathchar;
 TMathChar = record
   case mathtype: Tmathtype of
    mtoperand:(data:extended);
    mtoperator:(op:TMathOperatortype);
 end;
 
 type
   TMathControl = class(TComponent)
   private
    input,output,stack:array of tmathchar;
    fmathstring:string;
    function getresult:extended;
    function calculate(operand1,operand2,operator:Tmathchar):extended;
    function getoperator(c:char):TMathOperatortype;
    function getoperand(mid:integer;var len:integer):extended;
    procedure processstring;
    procedure convertinfixtopostfix;
    function isdigit(c:char):boolean;
    function isoperator(c:char):boolean;
    function getprecedence(mop:TMathOperatortype):integer;
   protected
   published
    property MathExpression:string read fmathstring write fmathstring;
    property MathResult:extended read getresult;
   end;
 
 procedure Register;
 
 implementation
 
 function Tmathcontrol.calculate(operand1,operand2,operator:Tmathchar):extended;
 begin
 result:=0;
 case operator.op of
   moadd:
    result:=operand1.data + operand2.data;
   mosub:
    result:=operand1.data - operand2.data;
   momul:
    result:=operand1.data * operand2.data;
   modiv:
    if (operand1.data<>0) and (operand2.data<>0) then
     result:=operand1.data / operand2.data
    else
     result:=0;
   mopow: result:=power(operand1.data,operand2.data);
 end;
 end;
 
 function Tmathcontrol.getresult:extended;
 var
 i:integer;
 tmp1,tmp2,tmp3:tmathchar;
 begin
 convertinfixtopostfix;
 setlength(stack,0);
 for i:=0 to length(output)-1 do
   begin
    if output[i].mathtype=mtoperand then
     begin
      setlength(stack,length(stack)+1);
      stack[length(stack)-1]:=output[i];
     end
    else if output[i].mathtype=mtoperator then
     begin
       tmp1:=stack[length(stack)-1];
       tmp2:=stack[length(stack)-2];
       setlength(stack,length(stack)-2);
       tmp3.mathtype:=mtoperand;
       tmp3.data:=calculate(tmp2,tmp1,output[i]);
       setlength(stack,length(stack)+1);
       stack[length(stack)-1]:=tmp3;
     end;
   end;
 result:=stack[0].data;
 setlength(stack,0);
 setlength(input,0);
 setlength(output,0);
 end;
 
 function Tmathcontrol.getoperator(c:char):TMathOperatortype;
 begin
 result:=monone;
 if c='+' then
   result:=moadd
 else if c='*' then
   result:=momul
 else if c='/' then
   result:=modiv
 else if c='-' then
   result:=mosub
 else if c='^' then
   result:=mopow;
 end;
 
 function Tmathcontrol.getoperand(mid:integer;var len:integer):extended;
 var
 i,j:integer;
 tmpnum:string;
 begin
 j:=1;
 for i:=mid to length(fmathstring)-1 do
   begin
    if isdigit(fmathstring[i]) then
     begin
      if j<=20 then
       tmpnum:=tmpnum+fmathstring[i];
      j:=j+1;
     end
    else
     break;
   end;
 result:=strtofloat(tmpnum);
 len:=length(tmpnum);
 end;
 
 procedure Tmathcontrol.processstring;
 var
 i:integer;
 numlen:integer;
 begin
 i:=0;
 numlen:=0;
 setlength(output,0);
 setlength(input,0);
 setlength(stack,0);
 fmathstring:='('+fmathstring+')';
 setlength(input,length(fmathstring));
 while i<=length(fmathstring)-1 do
   begin
    if fmathstring[i+1]='(' then
     begin
      input[i].mathtype:=mtlbracket;
      i:=i+1;
     end
    else if fmathstring[i+1]=')' then
     begin
      input[i].mathtype:=mtrbracket;
      i:=i+1;
     end
    else if isoperator(fmathstring[i+1]) then
     begin
      input[i].mathtype:=mtoperator;
      input[i].op:=getoperator(fmathstring[i+1]);
      i:=i+1;
     end
    else if isdigit(fmathstring[i+1]) then
     begin
      input[i].mathtype:=mtoperand;
      input[i].data:=getoperand(i+1,numlen);
      i:=i+numlen;
     end;
   end;
 end;
 
 
 function Tmathcontrol.isoperator(c:char):boolean;
 begin
 result:=false;
 if (c='+') or (c='-') or (c='*') or (c='/') or (c='^') then
   result:=true;
 end;
 
 function Tmathcontrol.isdigit(c:char):boolean;
 begin
 result:=false;
 if ((integer(c)> 47) and (integer(c)< 58)) or (c='.') then
   result:=true;
 end;
 
 function Tmathcontrol.getprecedence(mop:TMathOperatortype):integer;
 begin
 result:=-1;
 case mop of
   moadd:result:=1;
   mosub:result:=1;
   momul:result:=2;
   modiv:result:=2;
   mopow:result:=3;
 end;
 end;
 
 procedure Tmathcontrol.convertinfixtopostfix;
 var
 i,j,prec:integer;
 begin
 processstring;
 for i:=0 to length(input)-1 do
   begin
    if input[i].mathtype=mtoperand then
     begin
      setlength(output,length(output)+1);
      output[length(output)-1]:=input[i];
     end
    else if input[i].mathtype=mtlbracket then
     begin
      setlength(stack,length(stack)+1);
      stack[length(stack)-1]:=input[i];
     end
    else if input[i].mathtype=mtoperator then
     begin
      prec:=getprecedence(input[i].op);
      j:=length(stack)-1;
      if j>=0 then
       begin
        while(getprecedence(stack[j].op)>=prec) and (j>=0) do
         begin
          setlength(output,length(output)+1);
          output[length(output)-1]:=stack[j];
          setlength(stack,length(stack)-1);
          j:=j-1;
         end;
        setlength(stack,length(stack)+1);
        stack[length(stack)-1]:=input[i];
       end;
     end
    else if input[i].mathtype=mtrbracket then
     begin
      j:=length(stack)-1;
      if j>=0 then
       begin
        while(stack[j].mathtype<>mtlbracket) and (j>=0) do
         begin
          setlength(output,length(output)+1);
          output[length(output)-1]:=stack[j];
          setlength(stack,length(stack)-1);
          j:=j-1;
         end;
        if j>=0 then
         setlength(stack,length(stack)-1);
       end;
     end;
   end;
 end;
 
 
 procedure Register;
 begin
   RegisterComponents('Samples', [TMathControl]);
 end;
 
 end.

     

Парсер рабочий, правда я его использовал не как компонент, а как юнит и потом переделывал для других целей. Если будете разбирать - почитайте о польской нотации (записи), все маф парсеры построены на этом принципе.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

почитайте о польской нотации

правильней будет "обратная польская нотация"....
algor
новенький
Сообщения: 11
Зарегистрирован: 24.11.2008 16:36:14

Сообщение algor »

B4rr4cuda писал(а):Парсер рабочий, правда я его использовал не как компонент, а как юнит и потом переделывал для других целей. Если будете разбирать - почитайте о польской нотации (записи), все маф парсеры построены на этом принципе.

Спасибо большое =)
Я уже завалился книгами, ссылками и т.п. и сам начал писать. Практически точно по статье на "Королевстве Delphi" - http://www.delphikingdom.com/asp/viewitem.asp?catalogid=10. Единственное отличие - класс + поддержка переменных (правда, назвать это "фичей" язык не поворачивается =)). Если надо - допишу, код выложу, хотя код-то довольно простой (как оказалось).
Правда, как я понял, обратная польская нотация в статье не используется.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Бегло просмотрел статью, там действительно используется другой подход - вместо обратной записи используется рекурсивное вычисление.
Аватара пользователя
Lazzik
незнакомец
Сообщения: 3
Зарегистрирован: 31.03.2009 20:28:19

Сообщение Lazzik »

А есть Indy под lazarus и где его достать???
Ответить