https://wiki.freepascal.org/api.php?action=feedcontributions&user=Aliotti&feedformat=atomFree Pascal wiki - User contributions [en]2024-03-29T08:31:18ZUser contributionsMediaWiki 1.35.6https://wiki.freepascal.org/index.php?title=hash&diff=46466hash2010-12-14T11:18:54Z<p>Aliotti: /* Unit md5 */</p>
<hr />
<div>The package '''hash''' contains implementations for crc, md5, NTLM (1?) and, under Linux, crypt. Crypt might be better used from pkg "user".<br />
<br />
== Unit md5 == <br />
<br />
This unit implements the MD5 digest algorithm according to the specifications in RFC 1321. There are routines to calculate hashes from some buffer, or a hash from an entire file. <br />
<br />
The test program md5test calculates the hash value for some reference string. The reference output is provided for comparison.<br />
<br />
It has the units that:<br />
<br />
* Implements a NTLM version 1.0, password hash algorithm-unit : ntlm.pas<br />
* Implements a MD2 digest algorithm (RFC 1319)-unit: md5.pp<br />
* Implements a MD4 digest algorithm (RFC 1320)-unit: md5.pp<br />
* Implements a MD5 digest algorithm (RFC 1321)-unit: md5.pp <br />
* Implements CRC algorithm-unit:crc.pas<br />
<br />
<br />
<br />
Go to back [[Package_List|Packages List]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=hash&diff=45971hash2010-10-28T16:30:26Z<p>Aliotti: </p>
<hr />
<div>The package '''hash''' contains implementations for crc, md5, NTLM (1?) and, under Linux, crypt. Crypt might be better used from pkg "user".<br />
<br />
== Unit md5 == <br />
<br />
This unit implements the MD5 digest algorithm according to the specifications in RFC 1321. There are routines to calculate hashes from some buffer, or a hash from an entire file. <br />
<br />
The test program md5test calculates the hash value for some reference string. The reference output is provided for comparison.<br />
<br />
It has the units that:<br />
<br />
* Implements a NTLM password hash algorithm-unit:ntlm.pas<br />
* Implements a MD2 digest algorithm (RFC 1319)-unit:md5.pp<br />
* Implements a MD4 digest algorithm (RFC 1320)-unit:md5.pp<br />
* Implements a MD5 digest algorithm (RFC 1321)-unit:md5.pp <br />
* Implements CRC algorithm-unit:crc.pas<br />
<br />
<br />
<br />
Go to back [[Package_List|Packages List]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=hash&diff=45970hash2010-10-28T16:26:58Z<p>Aliotti: /* Unit md5 */</p>
<hr />
<div>The package '''hash''' contains implementations for crc, md5, NTLM (1?) and, under Linux, crypt. Crypt might be better used from pkg "user".<br />
<br />
== Unit md5 == <br />
<br />
This unit implements the MD5 digest algorithm according to the specifications in RFC 1321. There are routines to calculate hashes from some buffer, or a hash from an entire file. <br />
<br />
The test program md5test calculates the hash value for some reference string. The reference output is provided for comparison.<br />
<br />
It has the units that:<br />
<br />
* Implements a NTLM password hash algorithm - ntlm.pas<br />
* Implements a MD2 digest algorithm (RFC 1319)<br />
- md5.pp<br />
* Implements a MD4 digest algorithm (RFC 1320)<br />
- md5.pp<br />
* Implements a MD5 digest algorithm (RFC 1321) - md5.pp <br />
* Implements CRC algorithm - crc.pas<br />
<br />
<br />
<br />
Go to back [[Package_List|Packages List]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Multithreaded_Application_Tutorial/pt&diff=39681Multithreaded Application Tutorial/pt2009-12-11T10:48:18Z<p>Aliotti: /* Você necessita de multi-tarefa? */</p>
<hr />
<div>{{Multithreaded Application Tutorial}}<br />
<br />
== Introdução ==<br />
Esta página irá tentar explicar com escrever e debugar uma aplicação multi-tarefa(multithread) com Free Pascal e Lazarus.<br />
<br />
Uma aplicação multi-tarefa(multithread) é uma que cria duas ou mais tarefas em execução que trabalham ao mesmo tempo.<br />
<br />
Se você é novo em multi-tarefa, por favor leia o parágrafo "O que você necessita para multi-tarefa ?" para descobrir, se você realmente necessita disto. Você pode se salvar de um monte de dores de cabeça.<br />
<br />
<br />
Uma das tarefas é chamada de tarefa princípal. A Tarefa Princípal é criada pelo sistema operacional, cada vez que nossa aplicação inicia.<br />
A Tarefa Principal '''deve ter''' somente tarefa que atualiza os componentes que faz interfaces com o usuário(senão, a aplicação pode cair).<br />
<br />
A principal idéia é que a aplicação pode fazer algum processamento em plano de fundo(background - numa segunda tarefa) enquando o usuário pode continuar seu trabalho (usando a tarefa principal).<br />
<br />
Outro uso das tarefas é somente para ter uma melhor resposta da aplicação. Se você cria uma aplicação, e quando o usuário pressiona um botão, a aplicação inicia o processamento (um grande trabalho) ... e enquanto processando, a tela para de responder, e dá ao usuário a impressão de que a aplicação está morta, que não é legal. Se o grande trabalho é executado numa segunda tarefa, a aplicação mantém-se respondendo(sempre) como se estisse inativa. Neste caso é uma boa idéia, antes iniciando a tarefa, para disabilitar os botões da janela para evitar o usuário iniciar mais que uma tarefa por trabalho.<br />
<br />
Outro uso, é para criar uma aplicação servidora(server application) que é abilitada para responder a vários clientes ao mesmo tempo.<br />
<br />
== Você necessita de multi-tarefa? ==<br />
<br />
Se você é um novato em multi-tarefa e somente você quer fazer sua aplicação com melhor tempo de resposta enquanto sua aplicação processa grandes trabalhos, então multi-tarefa pode não ser, o que você está procurando.<br />
<br />
Aplicações multi-tarefa sempre tem pesados debugs e eles são cada vez mais complexos. E em muitos casos você não precisa de multi-tarefa. Uma simples tarefa é o suficiente. <br />
<br />
Multi-tarefa somente é necessário para:<br />
* bloquear handles, como comunicação na rede<br />
* usando múltiplos processadores de uma vez<br />
* algoritmos e chamadas de bibliotecas, que não podem ser separadas em pequenas partes.<br />
<br />
== A classe TThread ==<br />
<br />
Os exemplos a seguir podem ser encontrados no diretório examples/multithreading/.<br />
<br />
Para criar um aplicação multi-tarefa, a maneira mais fácil e usando a classe TThread. Esta classe permite a criação de uma thread adicional (ao lado da thread principal) de uma maneira simples. Normalmente você é obrigado a substituir apenas dois métodos: o construtor Create, e o método Execute. No construtor, você vai prepara a thread para funcionar. Você vai definir os valores iniciais das variáveis ou propriedades que você precisa. O construtor original da TThread requer um parâmetro chamado Suspended. Como você pode esperar, o ajuste Suspended = True impedirá que a thread execute automaticamente após a criação. Se Suspended = False, a thread irá executar logo após a criação. Se a thread é criada com Suspended = True, então ele será executado apenas depois que o método Resume for chamado.<br />
<br />
A partir da versão 2.0.1 do FPC, TThread.Create tem um parâmetro implícito para o tamanho da pilha. Agora você pode alterar o tamanho predefinido de cada pilha, para cada thread que você criar, se você precisar. Procedimentos de chamadas recursivas é um bom exemplo. Se você não especificar o parâmetro de tamanho da pilha, o tamanho padrão da pilha do OS será usado.<br />
<br />
Na substituição do método Execute, você escreverá o código que irá funcionar na thread.<br />
<br />
A classe TThread tem uma importante propriedade: Terminated : boolean;<br />
Se a thread tem um loop ( isto é típico), o loop deve ser terminado quando Terminated for True (este tem valor False porpadrão). Por cada passagem, o valor do Terminated deve ser verificado e, se for True, então o loop deve ser encerrado tão rapidamente como é apropriado, após alguma limpeza necessária. Tenha em mente que o método Terminate não faz nada por padrão: o método Execute deve explicitamente implementar o suporte para ele finalizar o seu trabalho.<br />
<br />
Como já explicamos anteriormente, a thread não deve interagir com componentes visuais. Atualizações para componentes visíveis deve ser feita dentro do contexto da thread principal. Para fazer isto, existe um método em TThread chamado Synchronize. Synchronize requer um método (este não leva nenhum parâmetro) como um argumento. Quando você chamar esse método através Synchronize(@MyMethod) a execução do thread será pausada, o código de MyMethod funcionará na thread principal, e a execução da thread será recomeçada então. O funcionamento exato de Synchronize depende da plataforma, mas basicamente é isto: afixa uma mensagem na fila de mensagem principal e vai dormir. Eventualmente a thread principal processa a mensagem e chama MyMethod. Desta forma MyMethod é chamado sem contexto, que não significa que seja durante um evento do mouse ou durante o evento Paint, mas depois. Após a thread principal ter executado MyMethod, desperta e processa a próxima mensagem. A thread então continua.<br />
<br />
Há uma outra propriedade importante de TThread: FreeOnTerminate. Se esta propriedade é True, o objeto da thread é automaticamente liberado quando a execução da thread (método Execute) terminar. Se não a aplicação precisará ser liberada manualmente.<br />
<br />
Exemplo:<br />
<br />
<delphi><br />
<br />
Type<br />
TMyThread = class(TThread)<br />
private<br />
fStatusText : string;<br />
procedure ShowStatus;<br />
protected<br />
procedure Execute; override;<br />
public<br />
Constructor Create(CreateSuspended : boolean);<br />
end;<br />
<br />
constructor TMyThread.Create(CreateSuspended : boolean);<br />
begin<br />
FreeOnTerminate := True;<br />
inherited Create(CreateSuspended);<br />
end;<br />
<br />
procedure TMyThread.ShowStatus;<br />
// this method is executed by the mainthread and can therefore access all GUI elements.<br />
begin<br />
Form1.Caption := fStatusText;<br />
end;<br />
<br />
procedure TMyThread.Execute;<br />
var<br />
newStatus : string;<br />
begin<br />
fStatusText := 'TMyThread Starting...';<br />
Synchronize(@Showstatus);<br />
fStatusText := 'TMyThread Running...';<br />
while (not Terminated) and ([any condition required]) do<br />
begin<br />
...<br />
[here goes the code of the main thread loop]<br />
...<br />
if NewStatus <> fStatusText then<br />
begin<br />
fStatusText := newStatus;<br />
Synchronize(@Showstatus);<br />
end;<br />
end;<br />
end;<br />
<br />
</delphi><br />
<br />
Na aplicação:<br />
<br />
<delphi><br />
<br />
var<br />
MyThread : TMyThread;<br />
begin<br />
MyThread := TMyThread.Create(True); // This way it doesn't start automatically<br />
...<br />
[Here the code initialises anything required before the threads starts executing]<br />
...<br />
MyThread.Resume;<br />
end;<br />
<br />
</delphi><br />
<br />
Se você quer fazer sua aplicação mais flexível, você pode criar um evento para o thread; Desta forma o seu método sincronizado não será fortemente acoplado com um formulário ou classe específico: você pode anexar os ouvintes de eventos da thread.<br />
<br />
Aqui está um exemplo:<br />
<br />
<delphi><br />
<br />
Type<br />
TShowStatusEvent = procedure(Status: String) of Object;<br />
<br />
TMyThread = class(TThread)<br />
private<br />
fStatusText : string;<br />
FOnShowStatus: TShowStatusEvent;<br />
procedure ShowStatus;<br />
protected<br />
procedure Execute; override;<br />
public<br />
Constructor Create(CreateSuspended : boolean);<br />
property OnShowStatus: TShowStatusEvent read FOnShowStatus write FOnShowStatus;<br />
end;<br />
<br />
constructor TMyThread.Create(CreateSuspended : boolean);<br />
begin<br />
FreeOnTerminate := True;<br />
inherited Create(CreateSuspended);<br />
end;<br />
<br />
procedure TMyThread.ShowStatus;<br />
// this method is executed by the mainthread and can therefore access all GUI elements.<br />
begin<br />
if Assigned(FOnShowStatus) then<br />
begin<br />
FOnShowStatus(fStatusText);<br />
end;<br />
end;<br />
<br />
procedure TMyThread.Execute;<br />
var<br />
newStatus : string;<br />
begin<br />
fStatusText := 'TMyThread Starting...';<br />
Synchronize(@Showstatus);<br />
fStatusText := 'TMyThread Running...';<br />
while (not Terminated) and ([any condition required]) do<br />
begin<br />
...<br />
[here goes the code of the main thread loop]<br />
...<br />
if NewStatus <> fStatusText then<br />
begin<br />
fStatusText := newStatus;<br />
Synchronize(@Showstatus);<br />
end;<br />
end;<br />
end;<br />
<br />
</delphi><br />
<br />
Na Aplicação,<br />
<br />
<delphi><br />
<br />
Type<br />
TForm1 = class(TForm)<br />
Button1: TButton;<br />
Label1: TLabel;<br />
procedure FormCreate(Sender: TObject);<br />
procedure FormDestroy(Sender: TObject);<br />
private<br />
{ private declarations }<br />
MyThread: TMyThread; <br />
procedure ShowStatus(Status: string);<br />
public<br />
{ public declarations }<br />
end;<br />
<br />
procedure TForm1.FormCreate(Sender: TObject);<br />
begin<br />
inherited;<br />
MyThread := TMyThread.Create(true);<br />
MyThread.OnShowStatus := @ShowStatus;<br />
end;<br />
<br />
procedure TForm1.FormDestroy(Sender: TObject);<br />
begin<br />
MyThread.Terminate;<br />
MyThread.Free;<br />
inherited;<br />
end;<br />
<br />
procedure TForm1.Button1Click(Sender: TObject);<br />
begin<br />
MyThread.Resume;<br />
end;<br />
<br />
procedure TForm1.ShowStatus(Status: string);<br />
begin<br />
Label1.Caption := Status;<br />
end;<br />
<br />
</delphi><br />
<br />
== Coisas para ter cuidados especiais ==<br />
<br />
No Windows há um possível problema quando se usa threads e você usar a opção -Ct (checagem de pilha). Por razões não tão claras a verificação de pilhas será disparada em qualquer TThread.Create, se você usar o padrão de tamanho da pilha. A única alternativa no momento é simplesmente não usar a opção -Ct. Nota-se que não causa uma exceção no segmento principal, mas no recém-criado. É como se a thread não tivesse iniciado.<br />
<br />
Um bom código para verificar esta e outras exceções que podem ocorrer na criação da threads é:<br />
<br />
<delphi><br />
MyThread:=TThread.Create(False);<br />
if Assigned(MyThread.FatalException) then<br />
raise MyThread.FatalException;<br />
</delphi><br />
<br />
Esse código vai garantir que qualquer exceção que ocorra durante a criação da thread seja lançada em seu segmento principal.<br />
<br />
== Unidades necessárias para uma aplicação multi-tarefa ==<br />
<br />
Você não precisa de qualquer unidade especial para funcionar no Windows. Contudo com Linux, Mac OS X e FreeBSD, você vai precisar da unidade cthreads e deve ser a primeira unidade do projeto. (a unidade do programa, .lpr)!<br />
Assim, o código do aplicativo Lazaro deve ser parecido:<br />
<br />
<delphi><br />
program MyMultiThreadedProgram;<br />
{$mode objfpc}{$H+}<br />
uses<br />
{$ifdef unix}<br />
cthreads,<br />
cmem, // the c memory manager is on some systems much faster for multi-threading<br />
{$endif}<br />
Interfaces, // this includes the LCL widgetset<br />
Forms<br />
{ add your units here },<br />
</delphi><br />
<br />
Se você esquecer isso, você irá obter este erro na inicialização:<br />
<br />
''This binary has no thread support compiled in.''<br />
''Recompile the application with a thread-driver in the program uses clause before other units using thread.''<br />
<br />
Pacotes que utilizam multi-tarefa devem adicionar o indicador -dUseCThreads nas opções de uso personalizado. Abra o pacote, e no editor vá em Options > Usage > Custom e adicione -dUseCThreads. Isto irá definir este indicador para todos os projetos e pacotes usando este pacote, incluindo a IDE. A IDE e todas as novas aplicações criadas já terá o seguinte código incluído no arquivo .lpr:<br />
<br />
<delphi><br />
uses<br />
{$IFDEF UNIX}{$IFDEF UseCThreads}<br />
cthreads,<br />
cmem, // the c memory manager is on some systems much faster for multi-threading<br />
{$ENDIF}{$ENDIF}<br />
</delphi><br />
<br />
== Suporte para Sistema de Multi Processo Simétrico (SMP) ==<br />
<br />
A boa notícia é que se sua aplicação trabalhar com suporte a multi-tarefa desta forma, já terá SMP habilitado!<br />
<br />
== Depuração de aplicações multi-tarefa com Lazaro ==<br />
<br />
A depuração no Lazarus não está ainda totalmente funcional.<br />
<br />
=== Depuração de saída ===<br />
<br />
Em um aplicativo de thread simples, você pode simplesmente escrever console/terminal/ou qualquer um e a ordem das linhas é a mesma que foram escritas. Em aplicações multi-tarefa as coisas são mais complicadas. Se duas threads estão escrevendo, dizem que uma linha é escrita pela thread A antes de uma thread B, as linhas não são necessariamente escritas nessa ordem. Pode acontecer, de uma thread escrever sua saída, enquanto outra thread está escrevendo uma linha.<br />
<br />
A unidade LCLProc contem várias funções, para deixar cada thread escrever o seu próprio arquivo log.<br />
<br />
<delphi><br />
procedure DbgOutThreadLog(const Msg: string); overload;<br />
procedure DebuglnThreadLog(const Msg: string); overload;<br />
procedure DebuglnThreadLog(Args: array of const); overload;<br />
procedure DebuglnThreadLog; overload;<br />
</delphi><br />
<br />
Por Exemplo: Em vez de ''writeln('Algum texto ',123);'' use ''DebuglnThreadLog(['Some text ',123]);''<br />
Isto irá adicionar uma linha 'Algum texto 123' em '''Log<PID>.txt''', onde <PID> e o ID do processo da thread corrente.<br />
<br />
É uma boa idéia remover o arquivo de log antes de cada execução:<br />
<br />
rm -f Log* && ./project1<br />
<br />
=== Linux ===<br />
<br />
Se você tentar depurar um aplicativo multi-tarefa em Linux, você terá um grande problema: o servidor X irá travar.<br />
Não se sabe como resolver isso corretamente, mas uma solução é:<br />
<br />
Crie uma nova instância do X:<br />
<br />
X :1 &<br />
<br />
Será aberta uma nova seção X, e quando você mudar para a nova seção X (para retornar ao que você estava trabalhando pressione CTRL+ALT+F7), você será capaz de voltar para a nova tela gráfica usando CTRL+ALT+F8 (Se essa combinação não funcionar, tente com CTRL+ALT+F2 ...isto se estiver trabalhado com Slackware)<br />
<br />
Então você poderia, se quiser, criar uma área de trabalho na seção X iniciada com:<br />
<br />
gnome-session --display=:1 &<br />
<br />
Então, no Lazaro, nos parâmetros de execução do projeto, verifique “Use display” e digite :1.<br />
Agora a aplicação será executada no segundo servidor X e depurada no primeiro.<br />
Isto foi testado com Free Pascal 2.0 e Lazarus 0.9.10 no Windows e Linux.<br />
<br />
----<br />
<br />
Em vez de criar uma nova seção X, pode-se usar Xnest. Xnest é uma seção X em uma janela. Usando isto o servidor X não travará durante a depuração das threads, e é muito mais fácil de depurar sem ter que alternar entre os terminais o tempo todo.<br />
<br />
A linha de comando para executar Xnest é<br />
<br />
Xnest :1 -ac<br />
<br />
para criar uma seção X sobre :1, e desabilitar os controles de acesso.<br />
<br />
== Widgetsets ==<br />
<br />
As interfaces win32, GTK e a carbono suportam plenamente multi-tarefa. Isso significa que a classe TThreads, as seções críticas (TCriticalSection) e a sincronização (Synchronize) funcionarão.<br />
<br />
== Seções críticas ==<br />
<br />
Uma seção crítica é um objeto usado para certificar-se, de que alguma parte do código será executado apenas por uma thread de cada vez. Uma seção crítica precisa ser criada e inicializada antes de ser usada e deve ser liberado quando não for mais necessário.<br />
<br />
As seções críticas são normalmente utilizados da seguinte maneira:<br />
<br />
Adicione a unidade SyncObjs.<br />
<br />
Declare a seção globalmente para todos as threads que devem ter acesso:<br />
<br />
<delphi><br />
MyCriticalSection: TRTLCriticalSection;<br />
</delphi><br />
<br />
Crie a seção:<br />
<br />
<delphi><br />
InitializeCriticalSection(MyCriticalSection);<br />
</delphi><br />
<br />
Execute alguma thread, fazendo algo que deve ser exclusivo<br />
<br />
<delphi><br />
EnterCriticalSection(MyCriticalSection);<br />
try<br />
// access some variables, write files, send some network packets, etc<br />
finally<br />
LeaveCriticalSection(MyCriticalSection);<br />
end;<br />
</delphi><br />
<br />
Após ter terminado todas as threads, libere a seção crítica:<br />
<br />
<delphi><br />
DeleteCriticalSection(MyCriticalSection);<br />
</delphi><br />
<br />
Como alternativa, você pode usar um objeto TcriticalSection. A criação é feita pelo Inicialization, o método Enter é feita pelo EnterCriticalSection, o método Leave é feita pelo LeaveCriticalSection e a destruição do objeto é feita pelo deletion.<br />
<br />
Por exemplo: 5 threads incrementando um contador. Veja lazarus/examples/multithreading/criticalsectionexample1.lpi<br />
<br />
'''CUIDADO:''' Há dois conjuntos das 4 funções acima. Um Conjunto da RTL e outra da LCL. As funções da LCL estão definida nas unidade LCLIntf e LCLType. Ambos trabalham de forma parecida. Você pode usar os dois ao mesmo tempo na sua aplicação, mas você não deve usar uma função RTL com uma seção crítica LCL, e vice versa.<br />
<br />
== Compartilhamento de variáveis ==<br />
<br />
Se algumas threads compartilharem uma variável, que é somente leitura, então não tem nada com que se preocupar. Mas se uma ou diversas threads escrevem na variável, então você deve se certificar de que somente uma thread por vez acessará a variável.<br />
<br />
Por exemplo: 5 threads incrementando um contador: veja lazarus/examples/multithreading/criticalsectionexample1.lpi<br />
<br />
== Esperando por outra thread ==<br />
<br />
Se a thread A precisar de um resultado de outra thread B, ela deve esperar, até que B tenha terminado.<br />
<br />
'''Importante:''' A thread principal nunca deve esperar por outra thread. Ao invez disso use Synchronize (veja acima).<br />
<br />
Veja um exemplo: lazarus/examples/multithreading/waitforexample1.lpi<br />
<br />
<delphi> <br />
{ TThreadA }<br />
<br />
procedure TThreadA.Execute;<br />
begin<br />
Form1.ThreadB:=TThreadB.Create(false);<br />
// create event<br />
WaitForB:=RTLEventCreate;<br />
while not Application.Terminated do begin<br />
// wait infinitely (until B wakes A)<br />
RtlEventWaitFor(WaitForB);<br />
writeln('A: ThreadB.Counter='+IntToStr(Form1.ThreadB.Counter));<br />
end;<br />
end;<br />
<br />
{ TThreadB }<br />
<br />
procedure TThreadB.Execute;<br />
var<br />
i: Integer;<br />
begin<br />
Counter:=0;<br />
while not Application.Terminated do begin<br />
// B: Working ...<br />
Sleep(1500);<br />
inc(Counter);<br />
// wake A<br />
RtlEventSetEvent(Form1.ThreadA.WaitForB);<br />
end;<br />
end;<br />
</delphi><br />
<br />
Nota: RtlEventSetEvent pode ser chamado antes de RtlEventWaitFor. Então RtlEventWaitFor retornará imediatamente. Use RTLeventResetEvent para limpar um indicador.<br />
<br />
== Fork ==<br />
<br />
Quando replicamos uma aplicação mult-threaded, esteja ciente de que qualquer thread criada e executada ANTES de realizar a replica, NÃO será executado no processo filho. Como indicado no manual do ''fork()''. Todas as threads que estavam sendo executadas antes da chamada da replica, seu estado será indefinido.<br />
<br />
Portanto, esteja ciente de qualquer thread inicializada antes da chamada (incluindo na seção de inicialização). Eles não irão funcionar.<br />
<br />
== Processos paralelos/laços ==<br />
<br />
Um caso especial de multi-tarefa e executando um procedimento único em paralelo. veja [[Parallel procedures]].<br />
<br />
== Computação distribuída ==<br />
<br />
Os próximos maiores passos, após programas multi-tarefa, é executar os segmentos em várias máquinas.<br />
<br />
*Você pode usar uma das suítes do TCP como sinapse, LNET ou Indy para comunicações. Isto lhe dá a máxima flexibilidade e é largamente utilizado para aplicações cliente / servidor com conexões rápidas.<br />
<br />
*Você pode usar bibliotecas de envio de mensagens, como MPICH, que são utilizados para HPC (High Performance Computing) em clusters.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Unit/pt&diff=26217Unit/pt2008-01-08T16:59:03Z<p>Aliotti: New page: Uma '''unidade''' é um arquivo de código fonte (ou binário compilado do arquivo) que foi escrito usando a linguagem de programação Pascal, e...</p>
<hr />
<div>Uma '''unidade''' é um arquivo de [[Source code|código fonte]] (ou [[Binary|binário]] compilado do [[File|arquivo]]) que foi escrito usando a linguagem de programação [[Pascal]], e que é construída para ser um simples módulo na [[Application|aplicação]] ou um [[Object module|módulo de objeto]]. <br />
<br />
Uma unidade pode ser usada quando certa funcionalidades são necessárias para uma aplicação ou para outras unidades, e permitindo o código que executa esta funcionalidade ser criado uma vez e usado em muitos lugares. Isto pode reduzir a possibilidade de erro e aumentar a possibilidade reuso do código. <br />
<br />
Uma unidade pode ser usada onde um programador deseja prover certas funcionalidades para usar no programa em Pascal mas não deseja fornecer o código fonte que executa essa funcionalidade.<br />
<br />
As unidades foram usadas também em versões antigas do Pascal quando era necessário em computadores com limitados recursos poder carregar melhor as rotinas quando necessários do que mantendo cada rotina do [[Executable program|programa executável]] na memória todo o tempo.<br />
<br />
Uma unidade que necessita acessar procedimentos e tipos de dado em outra unidade deve especificar aquelas unidades necessárias para acessar numa claúsula [[Uses]] sendo que a ligação é feita sem a necessidade de escrever um "makefile" como no C.<br />
<br />
Uma unidade pode também ser usada para declarar uma série de global [[Const|constantes]] ou [[Global_variables|variáveis]] para uso pela aplicação inteira, sem conter uma linha de código executável.<br />
<br />
<br />
== Read more ==<br />
<br />
* [http://www.freepascal.org/docs-html/ref/refsu71.html Unit scope] (FPC html doc)<br />
* [http://www.freepascal.org/docs-html/user/userse11.html Compiling a unit] (FPC html doc)<br />
<br />
<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=26216Standard Pascal/pt2008-01-08T16:35:44Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/pt|Pascal]] que define o minimo grau que um [[Compiler/pt|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. As seguintes [[Keyword|palavras chaves ou reservadas]] são os padrões que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|atribuir]]) &middot; = ([[Equal|igual]]) &middot; > ([[Greater than|maior que]]) &middot; < ([[Less than|menor que]]) <> ([[Not equal|diferente]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit/pt|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Daemons_and_Services/pt&diff=25727Daemons and Services/pt2007-12-18T15:08:41Z<p>Aliotti: New page: =O que são daemons e services ?= Unix daemons e windows services são programas rodando sem interação do usuário. Por exempo servidores www ou ftp são chamados de daemons sob linux e...</p>
<hr />
<div>=O que são daemons e services ?=<br />
<br />
Unix daemons e windows services são programas rodando sem interação do usuário. Por exempo servidores www ou ftp são chamados de daemons sob linux e serviços sob windows. Por que eles não interage com o usuário diretamente, eles fecham seus stdin, stdout, stderr descritores quando iniciam.<br />
<br />
Com Free Pascal, Lazarus é possível escrever estes daemons/services independente de plataforma através do pacote lazdaemon. Para evitar conflitos de nome com os componentes Delphi os componentes desta classe são chamadas de 'daemons'.<br />
<br />
=Classes=<br />
<br />
==TCustomDaemon==<br />
<br />
Este é um descendente do TDataModule que habilita todo o trabalho. Este pode ter diversas classes TCustomDaemons e/ou instâncias executando ao mesmo tempo e no mesmo processo(multi threaded).<br />
<br />
==TCustomDaemonApplication==<br />
<br />
Este é um descendente da TCustomApplication que cria os TCustomDaemons. Este não precisa de mudanças. Ele executa sob Windows até receber a chamada de Stop(parada) ou sob linux até receber o sinal TERM.<br />
<br />
==TDaemonMapper==<br />
<br />
Este componente é encarregado do registro do serviço. Cada instância precisa de uma entrada na propriedade '''DaemonsDefs'''.<br />
<br />
=Daemon - Passo a Passo=<br />
<br />
*Quando o daemon é inicializado os comandos da linha de comando são traduzidos. Os seguintes são pré-definidos:<br />
<br />
**-i --install: registra o daemon. Tem nenhum efeito sob unix.<br />
**-u --uninstall: remove o daemon. Tem nenhum efeito sob unix.<br />
**-r --run: inicia o daemon. Windows faz isto normalmente ele mesmo.<br />
<br />
*Criar o TDaemonMapper<br />
<br />
*Criar um TCustomDaemon para cada entrada do ''DaemonDefs''.<br />
<br />
*instalar, remover ou executar cada instância.<br />
<br />
*se executar: inicializar cada instância na sua própria thread e então aguardar pelo sinal de STOP/TERM.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_Documentation/pt&diff=25724Lazarus Documentation/pt2007-12-18T14:52:22Z<p>Aliotti: /* Tutoriais de Pascal e de Lazarus */</p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
== Tutoriais de Pascal e de Lazarus ==<br />
*[[Overview of Free Pascal and Lazarus/pt|Introdução a Free Pascal e Lazarus]] - Uma breve discussão sobre o que pode ser devenvolvido com estas ferramentas.<br />
*[[Lazarus Tutorial/pt|Tutorial do Lazarus]] - Um tutorial para iniciantes e uma descrição detalhada da IDE.<br />
*[[Lazarus IDE Tools/pt|Ferramentas da IDE]] - Um tutorial de nível intermediario sobre completamento de código e outras ferramentas da IDE.<br />
*[[Lazarus Database Tutorial/pt|Tutorial de Bancos de Dados]] - Uma introdução à utilização do Lazarus com bancos de dados.<br />
*[[Developing with Graphics/pt|Desenvolvendo com gráficos]] - Exemplos básicos envolvendo programação gráfica.<br />
*[http://www.fec.unicamp.br/reenge/aulas/pascal/ Tutorial de Pascal] da UNICAMP - Um guia para aprender a programar em Pascal.<br />
*[[TXMLPropStorage/pt|TXMLPropStorage]] - Usando TXMLPropStorage para salvar suas preferências.<br />
*[[Executing External Programs/pt|Executando Programas Externos]] - Um curto tutorial sobre executar programas externos apartir de seu aplicativo.<br />
*[[Hardware Access/pt|Acesso ao Hardware]] - Como acessar dispositivos de Hardware, tais como placas ISA, placas PCI, portas paralela e serial e USB.<br />
*[[Networking/pt|Programação para redes]] - Tutoriais sobre XML, TCP/IP Sockets, programação segura, WebServices, etc.<br />
*[[XML Tutorial/pt|Tutorial de XML]] - Escrevendo e lendo arquivos XML<br />
*[[Multithreaded Application Tutorial/pt|Múltiplas Linhas de Execução]] - Como escrever programas que utilizam multiplas linhas de execução (Threads).<br />
*[[Streaming components/pt|Streaming components]] - Como escrever componentes para streams e leitura/criação de componentes de streams.<br />
*[[OpenGL Tutorial]] - Como utilizar GLUT no Lazarus<br />
*[[Creating bindings for C libraries]] - Como converter headers c (.h) para Pascal<br />
*[[Lazarus/FPC Libraries]] - Como criar bibliotecas dinâmicas (.so, .dll, .dynlib) e como utiliza-las<br />
*[[Daemons and Services/pt|Daemons and Services]] - como escrever "windows services" e/ou "linux daemons".<br />
<br />
== Guia para usuários do Lazarus ==<br />
<br />
*[[Lazarus Faq|Perguntas Frequentes]] - Informações gerais sobre o Lazarus e outras específicas ao Linux ou ao Windows.<br />
*[[Lazarus DB Faq/pt|FAQ de Bancos de Dados]] - Perguntas frequentes sobre o uso de bancos de dados na Lazarus.<br />
*[[Code Examples|Exemplos de código]] - Examplos de código que funciona para o Lazarus.<br />
*[[Feature_Ideas|Idéias de funcionalidades]] - Capacidades que você gostaria de ver adicionadas ao Lazarus<br />
*[[How do I create a bug report|Como reportar um bug]] - Você acredita ter descoberto um bug no Lazarus e gostaria de reporta-lo?<br />
<br />
=== Instalação ===<br />
<br />
*[[Installing Lazarus/pt|Instalando o Lazarus]] - Um guia de instalação<br />
*[[Getting Lazarus/pt|Baixando o Lazarus]] - Instruções sobre como baixar o program ou obte-lo do Subversion<br />
*[[OS X Programming Tips|Dicas para o Mac OS X]] - Instalação do Lazarus, ferramentas úteis, comandos Unix e mais...<br />
<br />
=== IDE ===<br />
<br />
*[[IDE tricks|Truques da IDE]] - Truques úteis<br />
*[[Lazarus IDE]] - As janelas da IDE<br />
*[[Lazarus Packages|Pacotes do Lazarus]] - Um guia para criar pacotes no Lazarus<br />
*[[Install Packages|Instalando Pacotes]] - Um pequeno guia de instalação de pacotes<br />
*[[Extending the IDE|Extendendo a IDE]] - Como adicionar funcionalidade para a IDE do Lazarus<br />
*[[Adding Kylix Help|Adicionando a ajuda do Kylix]] - Como utilizar os arquivos de ajuda da Borland na IDE<br />
<br />
=== LCL ===<br />
<br />
*[[doc:lcl/|Documentação da LCL]] - Ajuda online da LCL (em progresso).<br />
*[[Main Loop Hooks]] - Como gerir multiplas fontes de eventos<br />
*[[Asynchronous Calls]] - Como guardar chamadas para execução futura<br />
*[[File size and smartlinking|Tamanho do executável]] - Como utilizar o smartlinking e criar executáveis pequenos.<br />
*[[Accessing the Interfaces directly|Acessando as interfaces diretamente]] - Exemplo de como acessar as interfaces da LCL<br />
*[[Add Help to Your Application|Adicionando ajuda]] - Como criar ajuda online para seus programas<br />
*[[Anchor Sides]] - Descrição das ancoras e como utiliza-las<br />
*[[LCL Tips]] - Dicas e truques<br />
*[[LCL Defines]] - Escolhendo a opção certa para compilar novamente a LCL<br />
<br />
=== Desenvolvendo ===<br />
<br />
*[[The Power of Proper Planning and Practices|O Poder do Planejamento]] - Bom-senso na programação e as melhores práticas para um desenvolvedor Free Pascal e Lazarus<br />
*[[Multiplatform Programming Guide|Guia de Programação Multiplataforma]] - Como desenvolver aplicativos independentes de plataforma<br />
*[[Using Pascal Libraries with .NET and Mono|Utilizando bibliotecas pascal com .NET e Mono]] - sim, voce pode utilizar código Free Pascal junto com .NET e Mono<br />
*[[Deploying Your Application|Distribuindo seus aplicativos]] - Como criar um instalador para seus programas<br />
*[[Cross compiling|Cross Compilação]] - Criando executáveis de uma plataforma, estando em outra.<br />
*[[Remote Debugging|Depuração Remota]] - Como depurar seu aplicativo Lazarus em outra maquina.<br />
<br />
=== Ferramentas ===<br />
<br />
*[[Lazarus Documentation Editor|Editor da Documentação do Lazarus]] - Utilizando o "lazde" para criar documentação.<br />
*[[LazDoc]] - Um editor integrado dos arquivos de documentação<br />
*[[lazbuild]] - Compilados projetos e pacotes sem a IDE<br />
<br />
=== Migrando do Delphi ===<br />
<br />
*[[Lazarus Components]] - Comparação entre os componentes do Lazarus e do Turbo Delphi<br />
*[[Lazarus For Delphi Users/pt|Lazarus para usuários do Delphi]] - Para usuários do Delphi que desejam aprender o Lazarus.<br />
*[[Code Conversion Guide/pt|Guia da Conversão de Código]] - Como converter código e componentes existentes para o Lazarus<br />
<br />
== Guia dos Desenvolvedores do Lazarus ==<br />
<br />
*[[How To Help Developing Lazarus/pt|Como Ajudar?]] - Um guia para ajudar iniciantes a começarem a melhorar o Lazarus<br />
*[[Version Numbering|Números das Versões]] - Explicação sobre a diferença entre os números de versão do Lazarus<br />
*[[Creating A Patch/pt| Criando um Patch]] - Um guia para fazer um patch com as mudanças feitas no Lazarus<br />
*[[Creating a Backtrace with GDB|Criando Backtrace com o GDB]] - Um guia para criar um backtrace para ajuda-lo a depurar seu programa<br />
*[[Nomenclature/pt|Nomenclatura]] - Guia para escolher um nome para um novo método ou propriedade<br />
*[[DesignGuidelines/pt|Linhas Gerais de Desenho]] - Um guia sobre como proceder ao mudar o código-fonte de Lazarus.<br />
*[[GUI design|Desenho de Interfaces de Usuário]] - Linhas gerais de desenvolvimento da GUI do Lazarus<br />
*[[Road To 1.0|Rumo ao 1.0]] - O que precisa ficar pronto para o Lazarus 1.0<br />
*[[Detailed Lazarus 0.9.24 todo|Pendencias da versão 0.9.24]] - Uma lista do que ainda precisa ser feito antes de lançar a versão 0.9.24 do Lazarus<br />
*[[Moderating the bug tracker|Moderando o bug tracker]] - Guias gerais para desenvolvedores Lazarus e moderadores utilizarem o [http://www.lazarus.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools]] - Como as ferramentas de código são integradas na IDE<br />
*[[Creating IDE Help|Criando a ajuda da IDE]] - Como extender a documentação da IDE<br />
*[[Unit not found - How to find units|Unit not found - Como encontrar unidades]] - Como configurar a IDE e os arquivos fontes<br />
*[[Bounties]] - Precisa de algo que o Lazarus não possuí ainda? Coloque um preço aqui.<br />
<br />
=== LCL - A biblioteca de componentes do Lazarus ===<br />
*[[LCL Messages|Mensagens da LCL]] - Um guia relacionada a mensagens da LCL.<br />
*[[LCL Internals|Por dentro da LCL]] - Informações sobre o funcionamento interno da LCL.<br />
*[[LCL Key Handling]] - Help! A key press, what now?<br />
*[[LCL Unicode Support|Suporte a Unicode na LCL]] - Rumo a um Lazarus com suporte a Unicode<br />
*[[LCL Documentation Roadmap|Mapa da documentação]] - Quais unidades ainda precisam ser documentadas<br />
<br />
=== Interfaces ===<br />
*[[GTK2 Interface|Interface Gtk2]] - Gtk2 para Unix, Mac OS X, Windows<br />
*[[Carbon Interface|Interface Carbon]] - A Interface Carbon para Mac OS X<br />
*[[Qt Interface|Interface Qt]] - A Interface Qt 4 para UNIX, Mac OS X e PDA baseados em Linux<br />
*[[Windows CE Interface|Interface Windows CE]] - Para Pocket PC e Smartphones<br />
*[[fpGUI Interface|Interface fpGUI]] - Uma biblioteca gráfica completamente escrita em Object Pascal<br />
<br />
=== Tradução ===<br />
* [[Getting translation strings right|Criando Programas]] Algumas notas para programadores interessados em criar e utilizar strings de tradução em seus aplicativos. Discute rapidamente a criação de strings, oferece algumas dicas sobre a implementação e faz algumas considerações sobre o uso do inglês como linguagem inicial, em particular.<br />
* '''Notas de Localização:'''<br />
:* [[German localization notes|Alemão]] - Notas e guia gerais para a tradução da IDE para alemão, incluindo um pequeno dicionário.<br />
:* [[Portuguese-Brazilian Localization Notes|Português]] - Pequeno dicionário contendo termos comuns utilizados na IDE e sua tradução para o português.<br />
<!-- *[[TO-DO]] Remaining Tasks --><br />
* [[Help:Add language bar/pt | Adicionar barra de idiomas]] explica como adicionar uma barra contendo uma lista de traduções no topo da página.<br />
<br />
== Documentação do Free Pascal ==<br />
Além [http://lazarus-ccr.sourceforge.net/fpcdoc/ deste website], a última versão da documentação pode ser encontrada online em vários formatos na página do Compilador [http://www.freepascal.org/docs.html Free Pascal].<br />
Agora também há uma WiKi para o FreePascal [http://www.freepascal.org/wiki/index.php/Main_Page] muito similar a esta, para permitir que os desenvolvedores enviem documentação adicional a oficial, que está abaixo.<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Guia do Usuário]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Guia do Desenvolvedor]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Guia de referencia da unidade system e construções do Pascal suportadas]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Manual de referencia da Run-Time Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Manual de referencia do Free Component Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Manual da ferramenta de documentação do Free Pascal]<br />
<br />
== Blogs relacionados ao Lazarus ==<br />
<br />
*[[Adventures of a Newbie|Aventuras de um Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Current_conversion_projects&diff=25604Current conversion projects2007-12-08T09:44:18Z<p>Aliotti: /* tiOPF GUI controls */</p>
<hr />
<div>{{Current Conversion Projects}}<br />
<br />
<br />
This page contains a list of applications and components, that are currently being converted. If the conversion has been finished (or before if you want more user feedback), the components can be moved to [[Components and Code examples]] and the applications to [[Projects using Lazarus]]. If a description page has been made, the applications or components can be offered for download at the [http://sourceforge.net/project/showfiles.php?group_id=92177 sourceforge files area].<br />
==Applications==<br />
<br />
===osFinancials===<br />
<br />
The port of this open source project will not be easy, but Rome was not build in one day.<br />
The new version does allow interacting with the database through the SQL db components.<br />
I have created an example to create a plugin for osFinancials. I had some problems with the new components, but I am sure all this will disappear with time and one day I can fully compile the project in Lazarus. I do have a need for the memdataset to be able to mimic the clientdataset.<br />
This will need an XML parser (I am thinking of TJanXmlTree from Jan Verhoeven) and the dataset will need to support blobdata. I will try to see if i can implement this and use the component in Delphi and Lazarus. I will use this component to write the external links to PHP websites (like the osCommerce plugin and the new one I am making for V-Tiger). I use Clientdata set just as a memdataset in the code but I also need the part where the XML datapacket is translated to the dataset and the ability to save to this format.<br />
<br />
[[User:Delphidreamer|Delphidreamer]]<br />
<br />
==Components==<br />
===Large Display Components===<br />
Almost finished:<br />
* TLCD99<br />
* TLCDLabel<br />
* TAnalogueclock<br />
Everything compiles for SGraph 2.4 but the license for it restricts redistribution of modified source code. The author has been contacted in the hopes that this can be changed.<br />
<br />
I've also converted a small trend recorder variant of Mark Dodson's original but I'm thinking about rewriting it. If anyone is interested in any of these components, let me know. - [[User:VlxAdmin|VlxAdmin]]<br />
<br />
===Indy===<br />
[http://www.indyproject.org/ Internet Direct (Indy)] is an open source TCP/IP socket component suite comprised of popular Internet protocols. For more info see [http://indy4lazarus.sourceforge.net/ indy4lazarus].<br />
<br />
Newer attempts are done by Marco van de Voort. For more (status) info see [[Indy with Lazarus]]<br />
<br />
Current snapshots (for die hards only) are at <br />
[http://www.stack.nl/~marcov/indy9.zip Indy9] and<br />
[http://www.stack.nl/~marcov/Indy10FPC.zip Indy10]<br />
<br />
===FormStorage===<br />
[http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=98986 FormStorage] <br />
is a component to save all selected properties of a form in an xml file.<br />
<br />
===PowerPDF for Lazarus===<br />
[http://www.est.hi-ho.ne.jp/takeshi_kanno/powerpdf/index.html Original PowerPDF site]<br />
PowerPdf is a LCL suite of components to create PDF documents visually. With this components you can design PDF documents easily on Lazarus IDE.<br />
Based in PowerPDF version 0.9, status is 95% finished. -[[User:Jesusrmx|jesusrmx]]<br />
<br />
[[User:Chtk|Chtk]] also started a port of PowerPdf for Lazarus. The result of this effort has been merged with the port done by jesusrmx. A package, which should have all the functionality of the Delphi version, is availabe [http://iquad.nl/files/powerpdf/ here].<br />
<br />
[[User:Xno|Xno]] have port some example of PowerPdf to Lazarus. This code is available [http://xoomer.virgilio.it/xno/xnocbt.html here].<br />
<br />
===tiOPF GUI controls===<br />
<br />
Bogusław Brandys [[User:Forest|Forest]] started a port of tiOPF Persistent Aware ([http://tiopf.sourceforge.net/ TechInsite tiOPF site]) GUI controls for Lazarus.<br />
At current stage it simply compile and install into IDE.<br />
Any help is appreciated especially deeper knowledge about components creation for Lazarus.<br />
<br />
TODO:<br />
- remove all message handlers from components ,replace with appropriate anchoring and sizing<br />
(controls look ugly now)<br />
- fix problems with AV when deleting subcontrols (tiOPF GUI controls are composite)<br />
- fix problems with tiLVTreeView/tiLVListView<br />
<br />
===TeeChart===<br />
The commercially reliable and robust TeeChart component has been ported to Lazarus. Some functionality is still to be addressed, but the majority works.<br />
<br />
<br />
<br />
==Libraries==<br />
===dxGetText===<br />
[[DxGetText | Lazarus dxGetText]] is a conversion by [http://sourceforge.net/users/golivier/ Olivier Guilbaud] of the [http://dybdahl.dk/dxgettext/ dxGetText project]. From the dxGetText website: "Initially, this project used a Windows port of the GNU gettext library, but has made it much further and today it is a complete reimplementation of the GNU gettext library with many enhancements".<br />
<br />
===Pascal Script===<br />
[http://wiki.lazarus.freepascal.org/index.php/Pascal_Script Pascal Script] is a REMObjects Pascal Script interpreter ([http://www.remobjects.com/page.asp?id={9A30A672-62C8-4131-BA89-EEBBE7E302E6} RemObjects Pascal Script home page]) ported to Lazarus. It works on Win32 and Linux and is 100% completed (maybe even without bugs). Some fixes have been done by Boguslaw Brandys. Additional Testers are welcome, especially under Linux. For screenshots see: [http://wiki.lazarus.freepascal.org/index.php/Image:Rops_windows.png under Windows] and <br />
[http://wiki.lazarus.freepascal.org/index.php/Image:Rops_linux.png under Linux]<br />
<br />
<br />
Sources have been sent to the author (Carlo Kok) and are now available from RemObjects SVN. I hope it will also be available in the Lazarus installer as additional component.<br />
--[[User:Forest|Forest]] 12:22, 19 Oct 2005 (CEST)<br />
<br />
===GraphicEx===<br />
The fantastic GraphicEx package from http://www.delphi-gems.com/ has been adapted and enhanced by theo.<br />
See http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&p=17635.<br />
<br />
===Graphics32===<br />
Graphics32 is a graphics library for Delphi and Kylix/CLX. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives. In most cases Graphics32 considerably outperforms the standard TBitmap/TCanvas methods.<br />
<br />
A team started the port of this library to Free Pascal and Lazarus. The lcl-win32 port is almost complete. The lcl-carbon port is about 50% finished.<br />
<br />
Documentation for this library can be found here: [http://graphics32.org/documentation/Docs/_Body.htm]<br />
<br />
==Requested Components==<br />
===devphp===<br />
[http://sourceforge.net/projects/devphp/ devphp] is an IDE for PHP written in Delphi/Kylix. It's got a lot of nice features and would be very handy to have compiling under Lazarus. The author has run out of time to work on it so it would probably be a good candidate for conversion. [[User:VlxAdmin|Tom]]<br />
<br />
===ZEOS Data Objects===<br />
[http://sourceforge.net/projects/zeoslib ZEOS Data Objects] is a set of components for accessing directly the various database backends that you might need to. MySQL, Postgres and others, on Delphi it compiles directly into the .exe, only requiring that you have the appropriate DLL installed (postgres.dll, mysql.dll). <strike> It would be fabulous to get these components working under Lazarus as we can then write real database apps quickly </strike>. [[User:MartynRanyard]]<br />
<br />
'''Note:''' this functionality is being implemented in the sqldb-components. Not as good as ZEOS yet, but worth a look. [[User:Loesje]]<br />
<br />
'''Note 2:''' <font color=blue>The conversion of these components has recently been completed</font>. Take a look at [http://sourceforge.net/projects/zeoslib ZEOS Data Objects] and download ZEOSDBO_REWORK package from CVS. Also check this [[Zeos_tutorial|Tutorial]] [[user:Matthijs|Matthijs]]<br />
<br />
===Usercontrol===<br />
[http://sourceforge.net/projects/usercontrol Usercontrol] Delphi (and Kylix) component package to user and profile management and access control. Supports ADO, DBX, IBX, BDE, IBO, FIBPlus, ZeosDBO, DBISAM, MDO, MyDAC, MySQLDAC and ASTA3. Access control auto-extract TMenu, TActionList and TActionManager items. And MODULE for UIB component.<br />
<br />
HOW IS THE DEVELOPMENT OF IT ??? USERCONTROL rocks...<br />
<br />
===AutoREALM===<br />
AutoREALM ( http://autorealm.sourceforge.net ) is a free (GNU) Fantasy Role-Playing mapper software. It is "developed with Delphi Personal Edition™ (from Borland Inc.) and based on the simple and natural TurboPascal™ language, AutoREALM could be coded as well with Kylix Open Edition™ to run on LINUX platforms.". Well, it doesn't really compile on Linux, but a port to Lazarus that could also compile for Linux, Mac et.c. would be very nice. Currently there is a project to port AutoREALM to C++ and then to Linux, but a Lazarus port would perhaps be easier.<br />
<br />
===Toolbar 2000===<br />
Toolbar 2000 ( http://www.jrsoftware.org/tb2k.php ) is "a set of components for Borland Delphi and C++Builder (4.0 and later) designed to mimic the look and behavior of Office 2000's menus and toolbars.". Available under either a commercial license or the GNU General Public License.<br />
<br />
===Report Manager===<br />
[http://reportman.sourceforge.net Report Manager] Component for creating reports from database with visual editor,band support,conditional printing,evaluating saving to XLS,PDF,HTML.<br />
<br />
=== Open XML ===<br />
[http://www.philo.de/xml/ Open XML] is "a collection of XML and Unicode tools and components for the Delphi/Kylix™ programming language. All packages are freely available including source code."<br />
<br />
===Other applications, libraries and components===<br />
<br />
'''Add an application, library or component that you need here'''<br />
<br />
The Delphi IDE, but not Kylix, has a File -> Print selection which allows either the current source file or the current Form to be sent to the printer. I know there are lots of ways in both Linux and Windows to have files and screenshots printed, but it would be a convenience to be able to initiate printing direct from the IDE, with all the formatting and highlighting that you see on the screen. [[User:Kirkpatc]]<br />
<br />
Support for Paradox and Access databasing (ADO, DAO or ODBC) in at least a Win32 environment. A package named KADao implements this and is free in Delphi, maybe someone can translate this. If databasing is already implemented, maybe a way for new users to find it???[[User:Micdutoit]]<br />
<br />
A way to interface with Python would be nice. In Delphi a package PythonForDelphi does this. Can someone translate this one? [[User:Micdutoit]]<br />
<br />
I'm working on "Lazapy" (Python for Lazarus), this ported version of PythonForDelphi will be available as soon as possible with demos (I've forgot the demo&screenshots at home!).<br />
I would like to Inform you that it is in a very Beta state, but I've compiled Python scripts successfuly except some few exceptions(related to dynamic linking). [[User:Ghany]]<br />
<br />
I am looking at Lazarus basically because I want to wrap some Python programs in Lazarus shells. Rather than start with the reinvention of the wheel, I would much rather contribute to the development of "Lazapy", no matter how "beta" it is. But where is Ghany? [[User:OldAl]]<br />
<br />
I wish JCL and JVCL ported to lazarus. Also I need some sort of components like [http://www.devexpress.com/ Developer Express (c)] to completly leave Delphi and get Lazarus. I need the cxLayoutControl and all related components. Do you know any packages that are like they?<br />
<br />
'''MUTIS''' is looking for help to provide a multi-plataform layer to cross-compiling to .NET (current) Win32 and Linux. I think lazarus is a best target than Kilyk. I have a start but need help to get rid fo .NET specific things.<br />
<br />
The project is at http://sourceforge.net/projects/mutis and the mailing list http://groups.google.com.co/group/mutis-developers?lnk=li<br />
<br />
MUTIS is a search and indexing engine based in Lucene. Is done at 80% at API 1.4 level. I think is great have this tech on Delphi and make the project the first all native, all multiplataform, one language, in their class.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Current_conversion_projects&diff=25603Current conversion projects2007-12-08T09:43:09Z<p>Aliotti: /* tiOPF GUI controls */</p>
<hr />
<div>{{Current Conversion Projects}}<br />
<br />
<br />
This page contains a list of applications and components, that are currently being converted. If the conversion has been finished (or before if you want more user feedback), the components can be moved to [[Components and Code examples]] and the applications to [[Projects using Lazarus]]. If a description page has been made, the applications or components can be offered for download at the [http://sourceforge.net/project/showfiles.php?group_id=92177 sourceforge files area].<br />
==Applications==<br />
<br />
===osFinancials===<br />
<br />
The port of this open source project will not be easy, but Rome was not build in one day.<br />
The new version does allow interacting with the database through the SQL db components.<br />
I have created an example to create a plugin for osFinancials. I had some problems with the new components, but I am sure all this will disappear with time and one day I can fully compile the project in Lazarus. I do have a need for the memdataset to be able to mimic the clientdataset.<br />
This will need an XML parser (I am thinking of TJanXmlTree from Jan Verhoeven) and the dataset will need to support blobdata. I will try to see if i can implement this and use the component in Delphi and Lazarus. I will use this component to write the external links to PHP websites (like the osCommerce plugin and the new one I am making for V-Tiger). I use Clientdata set just as a memdataset in the code but I also need the part where the XML datapacket is translated to the dataset and the ability to save to this format.<br />
<br />
[[User:Delphidreamer|Delphidreamer]]<br />
<br />
==Components==<br />
===Large Display Components===<br />
Almost finished:<br />
* TLCD99<br />
* TLCDLabel<br />
* TAnalogueclock<br />
Everything compiles for SGraph 2.4 but the license for it restricts redistribution of modified source code. The author has been contacted in the hopes that this can be changed.<br />
<br />
I've also converted a small trend recorder variant of Mark Dodson's original but I'm thinking about rewriting it. If anyone is interested in any of these components, let me know. - [[User:VlxAdmin|VlxAdmin]]<br />
<br />
===Indy===<br />
[http://www.indyproject.org/ Internet Direct (Indy)] is an open source TCP/IP socket component suite comprised of popular Internet protocols. For more info see [http://indy4lazarus.sourceforge.net/ indy4lazarus].<br />
<br />
Newer attempts are done by Marco van de Voort. For more (status) info see [[Indy with Lazarus]]<br />
<br />
Current snapshots (for die hards only) are at <br />
[http://www.stack.nl/~marcov/indy9.zip Indy9] and<br />
[http://www.stack.nl/~marcov/Indy10FPC.zip Indy10]<br />
<br />
===FormStorage===<br />
[http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=98986 FormStorage] <br />
is a component to save all selected properties of a form in an xml file.<br />
<br />
===PowerPDF for Lazarus===<br />
[http://www.est.hi-ho.ne.jp/takeshi_kanno/powerpdf/index.html Original PowerPDF site]<br />
PowerPdf is a LCL suite of components to create PDF documents visually. With this components you can design PDF documents easily on Lazarus IDE.<br />
Based in PowerPDF version 0.9, status is 95% finished. -[[User:Jesusrmx|jesusrmx]]<br />
<br />
[[User:Chtk|Chtk]] also started a port of PowerPdf for Lazarus. The result of this effort has been merged with the port done by jesusrmx. A package, which should have all the functionality of the Delphi version, is availabe [http://iquad.nl/files/powerpdf/ here].<br />
<br />
[[User:Xno|Xno]] have port some example of PowerPdf to Lazarus. This code is available [http://xoomer.virgilio.it/xno/xnocbt.html here].<br />
<br />
===tiOPF GUI controls===<br />
<br />
Bogusław Brandys [[User:Forest|Forest]] started a port of tiOPF Persistent Aware ([http://tiopf.sourceforge.net/tiOPF TechInsite tiOPF site]) GUI controls for Lazarus.<br />
At current stage it simply compile and install into IDE.<br />
Any help is appreciated especially deeper knowledge about components creation for Lazarus.<br />
<br />
TODO:<br />
- remove all message handlers from components ,replace with appropriate anchoring and sizing<br />
(controls look ugly now)<br />
- fix problems with AV when deleting subcontrols (tiOPF GUI controls are composite)<br />
- fix problems with tiLVTreeView/tiLVListView<br />
<br />
===TeeChart===<br />
The commercially reliable and robust TeeChart component has been ported to Lazarus. Some functionality is still to be addressed, but the majority works.<br />
<br />
<br />
<br />
==Libraries==<br />
===dxGetText===<br />
[[DxGetText | Lazarus dxGetText]] is a conversion by [http://sourceforge.net/users/golivier/ Olivier Guilbaud] of the [http://dybdahl.dk/dxgettext/ dxGetText project]. From the dxGetText website: "Initially, this project used a Windows port of the GNU gettext library, but has made it much further and today it is a complete reimplementation of the GNU gettext library with many enhancements".<br />
<br />
===Pascal Script===<br />
[http://wiki.lazarus.freepascal.org/index.php/Pascal_Script Pascal Script] is a REMObjects Pascal Script interpreter ([http://www.remobjects.com/page.asp?id={9A30A672-62C8-4131-BA89-EEBBE7E302E6} RemObjects Pascal Script home page]) ported to Lazarus. It works on Win32 and Linux and is 100% completed (maybe even without bugs). Some fixes have been done by Boguslaw Brandys. Additional Testers are welcome, especially under Linux. For screenshots see: [http://wiki.lazarus.freepascal.org/index.php/Image:Rops_windows.png under Windows] and <br />
[http://wiki.lazarus.freepascal.org/index.php/Image:Rops_linux.png under Linux]<br />
<br />
<br />
Sources have been sent to the author (Carlo Kok) and are now available from RemObjects SVN. I hope it will also be available in the Lazarus installer as additional component.<br />
--[[User:Forest|Forest]] 12:22, 19 Oct 2005 (CEST)<br />
<br />
===GraphicEx===<br />
The fantastic GraphicEx package from http://www.delphi-gems.com/ has been adapted and enhanced by theo.<br />
See http://www.lazarus.freepascal.org/index.php?name=PNphpBB2&file=viewtopic&p=17635.<br />
<br />
===Graphics32===<br />
Graphics32 is a graphics library for Delphi and Kylix/CLX. Optimized for 32-bit pixel formats, it provides fast operations with pixels and graphic primitives. In most cases Graphics32 considerably outperforms the standard TBitmap/TCanvas methods.<br />
<br />
A team started the port of this library to Free Pascal and Lazarus. The lcl-win32 port is almost complete. The lcl-carbon port is about 50% finished.<br />
<br />
Documentation for this library can be found here: [http://graphics32.org/documentation/Docs/_Body.htm]<br />
<br />
==Requested Components==<br />
===devphp===<br />
[http://sourceforge.net/projects/devphp/ devphp] is an IDE for PHP written in Delphi/Kylix. It's got a lot of nice features and would be very handy to have compiling under Lazarus. The author has run out of time to work on it so it would probably be a good candidate for conversion. [[User:VlxAdmin|Tom]]<br />
<br />
===ZEOS Data Objects===<br />
[http://sourceforge.net/projects/zeoslib ZEOS Data Objects] is a set of components for accessing directly the various database backends that you might need to. MySQL, Postgres and others, on Delphi it compiles directly into the .exe, only requiring that you have the appropriate DLL installed (postgres.dll, mysql.dll). <strike> It would be fabulous to get these components working under Lazarus as we can then write real database apps quickly </strike>. [[User:MartynRanyard]]<br />
<br />
'''Note:''' this functionality is being implemented in the sqldb-components. Not as good as ZEOS yet, but worth a look. [[User:Loesje]]<br />
<br />
'''Note 2:''' <font color=blue>The conversion of these components has recently been completed</font>. Take a look at [http://sourceforge.net/projects/zeoslib ZEOS Data Objects] and download ZEOSDBO_REWORK package from CVS. Also check this [[Zeos_tutorial|Tutorial]] [[user:Matthijs|Matthijs]]<br />
<br />
===Usercontrol===<br />
[http://sourceforge.net/projects/usercontrol Usercontrol] Delphi (and Kylix) component package to user and profile management and access control. Supports ADO, DBX, IBX, BDE, IBO, FIBPlus, ZeosDBO, DBISAM, MDO, MyDAC, MySQLDAC and ASTA3. Access control auto-extract TMenu, TActionList and TActionManager items. And MODULE for UIB component.<br />
<br />
HOW IS THE DEVELOPMENT OF IT ??? USERCONTROL rocks...<br />
<br />
===AutoREALM===<br />
AutoREALM ( http://autorealm.sourceforge.net ) is a free (GNU) Fantasy Role-Playing mapper software. It is "developed with Delphi Personal Edition™ (from Borland Inc.) and based on the simple and natural TurboPascal™ language, AutoREALM could be coded as well with Kylix Open Edition™ to run on LINUX platforms.". Well, it doesn't really compile on Linux, but a port to Lazarus that could also compile for Linux, Mac et.c. would be very nice. Currently there is a project to port AutoREALM to C++ and then to Linux, but a Lazarus port would perhaps be easier.<br />
<br />
===Toolbar 2000===<br />
Toolbar 2000 ( http://www.jrsoftware.org/tb2k.php ) is "a set of components for Borland Delphi and C++Builder (4.0 and later) designed to mimic the look and behavior of Office 2000's menus and toolbars.". Available under either a commercial license or the GNU General Public License.<br />
<br />
===Report Manager===<br />
[http://reportman.sourceforge.net Report Manager] Component for creating reports from database with visual editor,band support,conditional printing,evaluating saving to XLS,PDF,HTML.<br />
<br />
=== Open XML ===<br />
[http://www.philo.de/xml/ Open XML] is "a collection of XML and Unicode tools and components for the Delphi/Kylix™ programming language. All packages are freely available including source code."<br />
<br />
===Other applications, libraries and components===<br />
<br />
'''Add an application, library or component that you need here'''<br />
<br />
The Delphi IDE, but not Kylix, has a File -> Print selection which allows either the current source file or the current Form to be sent to the printer. I know there are lots of ways in both Linux and Windows to have files and screenshots printed, but it would be a convenience to be able to initiate printing direct from the IDE, with all the formatting and highlighting that you see on the screen. [[User:Kirkpatc]]<br />
<br />
Support for Paradox and Access databasing (ADO, DAO or ODBC) in at least a Win32 environment. A package named KADao implements this and is free in Delphi, maybe someone can translate this. If databasing is already implemented, maybe a way for new users to find it???[[User:Micdutoit]]<br />
<br />
A way to interface with Python would be nice. In Delphi a package PythonForDelphi does this. Can someone translate this one? [[User:Micdutoit]]<br />
<br />
I'm working on "Lazapy" (Python for Lazarus), this ported version of PythonForDelphi will be available as soon as possible with demos (I've forgot the demo&screenshots at home!).<br />
I would like to Inform you that it is in a very Beta state, but I've compiled Python scripts successfuly except some few exceptions(related to dynamic linking). [[User:Ghany]]<br />
<br />
I am looking at Lazarus basically because I want to wrap some Python programs in Lazarus shells. Rather than start with the reinvention of the wheel, I would much rather contribute to the development of "Lazapy", no matter how "beta" it is. But where is Ghany? [[User:OldAl]]<br />
<br />
I wish JCL and JVCL ported to lazarus. Also I need some sort of components like [http://www.devexpress.com/ Developer Express (c)] to completly leave Delphi and get Lazarus. I need the cxLayoutControl and all related components. Do you know any packages that are like they?<br />
<br />
'''MUTIS''' is looking for help to provide a multi-plataform layer to cross-compiling to .NET (current) Win32 and Linux. I think lazarus is a best target than Kilyk. I have a start but need help to get rid fo .NET specific things.<br />
<br />
The project is at http://sourceforge.net/projects/mutis and the mailing list http://groups.google.com.co/group/mutis-developers?lnk=li<br />
<br />
MUTIS is a search and indexing engine based in Lucene. Is done at 80% at API 1.4 level. I think is great have this tech on Delphi and make the project the first all native, all multiplataform, one language, in their class.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25471Standard Pascal/pt2007-11-28T11:21:54Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/PT|Pascal]] que define o minimo grau que um [[Compiler/pt|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. As seguintes [[Keyword|palavras chaves ou reservadas]] são os padrões que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|atribuir]]) &middot; = ([[Equal|igual]]) &middot; > ([[Greater than|maior que]]) &middot; < ([[Less than|menor que]]) <> ([[Not equal|diferente]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25469Standard Pascal/pt2007-11-28T11:18:15Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/PT|Pascal]] que define o minimo grau que um [[Compiler/pt|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. As seguintes [[Keyword|palavras chaves ou reservadas]] são os padrões que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Compiler/pt&diff=25468Compiler/pt2007-11-28T11:14:56Z<p>Aliotti: New page: O '''compilador''' (neste caso, o "FPC Pascal Compiler") é o programa executável que traduz o código fonte do Pascal em linguagem assembly para en...</p>
<hr />
<div>O '''compilador''' (neste caso, o "FPC Pascal Compiler") é o programa executável que traduz o [[Source code|código fonte]] do Pascal em [[Assembly language|linguagem assembly ]] para então ser processada pelo [[Assembler|assembler]] na [[Application|applicação]] como um especifíco código de máquina.<br />
<br />
Note que alguns compiladores [[Pascal]] - e muitos outros compiladores - diretamente geram o [[Executable program|programa executável]] ou produz um [[Object module|módulo de objeto]] que pode ser passado para um programa de ligação. No caso do compilador Pascal FPC, o trabalho é feito por um programa de assembler.<br />
<br />
Alguns compiladores Pascal trabalham sós [[Executable program|programa executável]] que são passados como linha de comando e uma lista de arquivos. Outros possuem uma [[IDE|Ambiente de Desenvolvimento Integrado]] ou ''IDE'', que permite a edição e compilação de uma forma com menos emendas.<br />
<br />
Exemplos de compiladores Pascal:<br />
* [[AAEC Pascal|Australian Atomic Energy Commission]] Pascal Compiler for the IBM 370 Mainframe<br />
* [[Borland Pascal]] and [[Turbo Pascal]] which were developed by Borland International for MS-Dos and for Windows 3.1 or as [[16-bit]] applications for Windows 95.<br />
* [[Delphi]] from Codegear / Borland International which produces [[32-bit]] applications for Windows 95/98/NT/Me/2000/XP/Vista.<br />
* [[Kylix]] from Borland International which produces [[32-bit]] applications for [[Linux]].<br />
* [[UCSD Pascal]] for the PDP-11 and Apple II computers, and later for the IBM-PC under MS-Dos running on its own operating system.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25466Standard Pascal/pt2007-11-28T11:00:14Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/PT|Pascal]] que define o minimo grau que um [[Compiler/pt|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. Os seguintes são os padrões [[Keyword|keywords]] que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Pascal/pt&diff=25465Pascal/pt2007-11-28T10:59:01Z<p>Aliotti: /* linguagem pascal */</p>
<hr />
<div>'''Pascal''' é uma linguagem de programação desenvolvida por [[Niklaus Wirth]] em 1970.<br />
<br />
Ela foi originalmente concebida como uma ferramenta para aprender como programar, mas por causa da popularidade das várias implementações como a original [[UCSD Pascal]] em 1980, e a Borland International ter desenvolvido o [[Turbo Pascal]] para o MS-DOS e [[Microsoft Windows]] [[operating system]]s, [[Delphi]] para Microsoft Windows, e o [[Kylix]] implementação do Delphi para o linux, a linguagem de programação Pascal ganhou força para ser usada em diversos desenvolvimento de aplicações.<br />
<br />
Exemplos de quão poderoso a linguagem Pascal é está incluído <br />
*O original compilador UCSD Pascal , e muito do sistema em tempo de execução, eram escritos em pascal. <br />
*O desenvolvimento do Turbo Pascal versão 6 da Borland, em que o editor e o ambiente integragrado de desenvolvimento foram escritos em Pascal.<br />
*O framework criado como parte do Turbo Pascal 6 para os usuários darem a certas aplicações aparência similar ao editor do programa, que foi chamado de [[Turbo vision]], foi também escrito no Pascal.<br />
*Este [[Compiler|compilador]], o "FPC Pascal Compiler", é ele mesmo escrito em Pascal.<br />
<br />
== linguagem pascal ==<br />
*[[Standard_Pascal/pt|Padrão do Pascal]]<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25464Standard Pascal/pt2007-11-28T10:57:30Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/PT|Pascal]] que define o minimo grau que um [[Compiler|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. Os seguintes são os padrões [[Keyword|keywords]] que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Pascal/pt&diff=25463Pascal/pt2007-11-28T10:56:09Z<p>Aliotti: New page: '''Pascal''' é uma linguagem de programação desenvolvida por Niklaus Wirth em 1970. Ela foi originalmente concebida como uma ferramenta para aprender como programar, mas por causa ...</p>
<hr />
<div>'''Pascal''' é uma linguagem de programação desenvolvida por [[Niklaus Wirth]] em 1970.<br />
<br />
Ela foi originalmente concebida como uma ferramenta para aprender como programar, mas por causa da popularidade das várias implementações como a original [[UCSD Pascal]] em 1980, e a Borland International ter desenvolvido o [[Turbo Pascal]] para o MS-DOS e [[Microsoft Windows]] [[operating system]]s, [[Delphi]] para Microsoft Windows, e o [[Kylix]] implementação do Delphi para o linux, a linguagem de programação Pascal ganhou força para ser usada em diversos desenvolvimento de aplicações.<br />
<br />
Exemplos de quão poderoso a linguagem Pascal é está incluído <br />
*O original compilador UCSD Pascal , e muito do sistema em tempo de execução, eram escritos em pascal. <br />
*O desenvolvimento do Turbo Pascal versão 6 da Borland, em que o editor e o ambiente integragrado de desenvolvimento foram escritos em Pascal.<br />
*O framework criado como parte do Turbo Pascal 6 para os usuários darem a certas aplicações aparência similar ao editor do programa, que foi chamado de [[Turbo vision]], foi também escrito no Pascal.<br />
*Este [[Compiler|compilador]], o "FPC Pascal Compiler", é ele mesmo escrito em Pascal.<br />
<br />
== linguagem pascal ==<br />
*[[Standard Pascal/PT|Padrão do Pascal]]<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25462Standard Pascal/pt2007-11-28T10:41:06Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal/PT]] que define o minimo grau que um [[Compiler|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. Os seguintes são os padrões [[Keyword|keywords]] que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25208Standard Pascal/pt2007-11-19T15:53:11Z<p>Aliotti: </p>
<hr />
<div>'''Standard Pascal''' é uma especificação para a linguagem [[Pascal]] que define o minimo grau que um [[Compiler|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. Os seguintes são os padrões [[Keyword|keywords]] que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
Há palavras reservadas que não são tecnicamente parte dos padrões da linguagem pascal mas são usadas pelo [[FPC]] outras para adicionar funcionalidades com para implementação de objetos, compatibilidade com os conceitos de recuperação de erro expostos pelo C++, ou para prover compatibilidade com [[Borland Pascal]] e compiladores pascal mais adiantados. Estas palavras reservadas incluem:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Standard_Pascal/pt&diff=25207Standard Pascal/pt2007-11-19T15:39:14Z<p>Aliotti: New page: '''Standard Pascal'''é uma especificação para a linguagem Pascal que define o minimo grau que um Pascal compiler deve suportar para ser um verdadeiro compilador da ling...</p>
<hr />
<div>'''Standard Pascal'''é uma especificação para a linguagem [[Pascal]] que define o minimo grau que um [[Compiler|Pascal compiler]] deve suportar para ser um verdadeiro compilador da linguagem pascal. Os seguintes são os padrões [[Keyword|keywords]] que todos os compiladores devem suportar:<br />
<br />
:[[Begin|begin]] &middot; [[End|end]] &middot; [[For|for]] &middot; [[goto]] &middot; [[If|if]] &middot; [[label]] &middot; [[Repeat|repeat]] &middot; [[Then|then]] &middot; [[Until|until]] &middot; [[While|while]] &middot; [[Do|do]] &middot; [[Type|type]] &middot; [[Var|var]]<br />
<br />
Os seguintes símbolos são parte da linguagem:<br />
<br />
:<nowiki>:=</nowiki> ([[Becomes|becomes]]) &middot; = ([[Equal|equal]]) &middot; > ([[Greater than|greater than]]) &middot; < ([[Less than|less than]]) <> ([[Not equal|not equal]])<br />
<br />
There are additional keywords which are not technically part of the Standard Pascal language but are used by [[FPC]] either for additional functionality such as for implementing objects, compatibility with the error recovery concepts exposed by C++, or to provide compatibility with [[Borland Pascal]] and earlier Pascal compilers. These keywords include:<br />
<br />
:[[Implementation|implementation]] &middot; [[Finally|finally]] &middot; [[Try|try]] &middot; [[Unit|unit]].<br />
<br />
== Tipos ==<br />
Aqui temos os tipos padrão:<p><br />
[[Integer|integer]] &middot; [[smallint]] &middot; [[longint]] &middot; [[real]] &middot; [[Boolean|boolean]] &middot; [[String|string]] &middot; [[Char|char]]<br />
<br />
<br />
[[category:Pascal]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Platform_list/pt&diff=25206Platform list/pt2007-11-19T15:31:44Z<p>Aliotti: /* Outras Arquiteturas e seus Status */</p>
<hr />
<div>== Arquiteturas Suportadas ==<br />
* I386<br />
* PowerPC<br />
* Sparc (initially working, lots of additional work done)<br />
* AMD64<br />
* PowerPC64<br />
* [[ARM]]<br />
* m68k (1.0.x only)<br />
<br />
== Outras Arquiteturas e seus Status ==<br />
* iA64: compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* Alpha:compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* MIPS: ( compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* AVR: sob investigação<br />
<br />
== Suportado pelo i386 ==<br />
* [[GO32 V2]] DOS extender<br />
* Linux para i386<br />
* OS/2<br />
* Win32 para i386<br />
* [[FreeBSD]]/ELF para i386<br />
* SunOS/ELF para i386 (sob desenvolvimento)<br />
* Beos para i386 (sob desenvolvimento)<br />
* NetBSD para i386 (sob desenvolvimento, atualmente pouco mantido)<br />
* [[Netware]] para i386 (clib and libc)<br />
* WDOSX DOS extender<br />
* OpenBSD para i386 (sob desenvolvimento, atualmente pouco mantido)<br />
* [[Target OS2]] via EMX<br />
* Watcom compatible DOS extenders<br />
* [[Target Darwin]] (Mac OS X) para i386 (2.1.x and later)<br />
* [http://sourceforge.net/projects/befpc/ BeOS/Zeta/Haiku] para i386</div>Aliottihttps://wiki.freepascal.org/index.php?title=Platform_list/pt&diff=25205Platform list/pt2007-11-19T15:27:34Z<p>Aliotti: New page: == Arquiteturas Suportadas == * I386 * PowerPC * Sparc (initially working, lots of additional work done) * AMD64 * PowerPC64 * ARM * m68k (1.0.x only) == Outras Arquiteturas e seus ...</p>
<hr />
<div>== Arquiteturas Suportadas ==<br />
* I386<br />
* PowerPC<br />
* Sparc (initially working, lots of additional work done)<br />
* AMD64<br />
* PowerPC64<br />
* [[ARM]]<br />
* m68k (1.0.x only)<br />
<br />
== Outras Arquiteturas e seus Status ==<br />
* iA64: compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* Alpha:compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* MIPS: ( compilador não compilando, somente algumas unidades básicas implementadas p/ o compilador<br />
* AVR: sob investigação</div>Aliottihttps://wiki.freepascal.org/index.php?title=FPC/pt&diff=25204FPC/pt2007-11-19T15:22:29Z<p>Aliotti: New page: Esta é a página principal do Compilador Free Pascal (FPC) ele mesmo. ==General Info== Standard Pascal<br> Supported Platforms Supported [[L...</p>
<hr />
<div>Esta é a página principal do Compilador Free Pascal (FPC) ele mesmo.<br />
<br />
==General Info==<br />
<br />
[[Standard Pascal/pt|Standard Pascal]]<br><br />
[[Platform list/pt|Supported Platforms]]<br />
<br />
Supported [[Language Mode]]s:<br />
* [[Mode FPC]]<br />
* [[Mode OBJFPC]]<br />
* [[Mode Delphi]]<br />
* [[Mode TP]]<br />
* [[Mode GPC]]<br />
* [[Mode MacPas]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=FPC_documentation/pt&diff=25203FPC documentation/pt2007-11-19T15:19:25Z<p>Aliotti: New page: Esta página armazena os artigos relacionados ao FPC que não cabe a documentação oficial ou que não está pronta para documentação oficial ainda. == Princípais Componentes == [[FP...</p>
<hr />
<div>Esta página armazena os artigos relacionados ao FPC que não cabe a documentação oficial ou que não está pronta para documentação oficial ainda.<br />
<br />
== Princípais Componentes ==<br />
<br />
[[FPC/pt|Free Pascal Compiler (FPC)]] <br />
<br />
[[RTL/pt|Runtime Library (RTL)]]<br />
<br />
[[FCL/pt|Free Component Library (FCL)]]<br />
<br />
[[Packages Base/pt|Pacotes Básicos]], [[Packages Extra/pt|Pacotes Extras]]<br />
<br />
[[Free Vision]]<br />
<br />
[[Textmode IDE]]<br />
<br />
[[Utilities]] ([[Fpcmake]], [[H2Pas]], [[PPUDump]], [[PPUMove]], [[PTop]])<br />
<br />
[[Contributed Units]]<br />
<br />
[[FPMake]]<br />
<br />
== Informações Diversas ==<br />
<br />
[[Platform list/pt|Liste de plateforme ]]<br />
<br />
[[Pascal Bindings|Attaches de Pascal ]]<br />
<br />
[[Road map]]<br />
<br />
[[Building the VCL with FPC]]<br />
<br />
[[Building the CLX with FPC]]<br />
<br />
[[Making the FPC libraries shared]]<br />
<br />
[[General Pascal and software Development remarks]]<br />
<br />
[[To Do lists]]<br />
<br />
[[Releasing|Releasing related resources]]</div>Aliottihttps://wiki.freepascal.org/index.php?title=Main_Page/pt&diff=25202Main Page/pt2007-11-19T15:12:13Z<p>Aliotti: /* Documentação do Free Pascal */</p>
<hr />
<div>{{Main Page}}<br />
=Bem-vindo à Base de Conhecimento do Lazarus e do Free Pascal=<br />
__NOTOC__<br />
==Sobre==<br />
<br />
O objetivo desta base de conhecimento é permitir que toda a documentação do Lazarus e do compilador Free Pascal estejam disponíveis para consultas online. Enquanto o compilador é bem documentado, a documentação do Lazarus ainda possui algumas lacunas. Esta área é um &quot;documento aberto&quot;, ou &quot;wiki&quot; onde qualquer um pode editar e adicionar conteúdo. A wiki agiliza as coisas, tornando possível fazer mudanças e adições apenas com um navegador.<br />
<br />
Se tiver algum problema no uso deste site, por favor avise o [http://wiki.lazarus.freepascal.org/User:Vincent administrador]. Você também pode deixar uma anotação ou sugestão, em português, na página [[Site Feedback/pt | Site Feedback]]. Para tutoriais de wiki, por favor dê uma olhada em [http://www.chat11.com/30_Second_Quick_Wiki_Tutorial 30 Second Quick Wiki Tutorial] ou o [http://en.wikipedia.org/wiki/Wikipedia:Tutorial WikiPedia Tutorial]. Aqui, uma [[Sand Box]] está disponível para praticar.<br />
<br />
Relatórios de bug da IDE podem ser feitos em português pelo [http://lazarusbrasil.org.googlepages.com/home Bug-Tracker Brasil]. Angolanos, cabo-verdianos, goeses, macauenses, moçambicanos, portugueses, timorenses, brasileiros no exterior, quem fala português como uma segunda língua, todos são bem-vindos.<br />
<br />
Se você tem algum interesse empresarial associado ao desenvolvimento do Lazarus, pode anunciar um [http://wiki.lazarus.freepascal.org/Bounties/pt prêmio] para que se desenvolva determinada característica ou componente. Se quer apenas dar uma sugestão de componente ou característica, use a página [http://wiki.lazarus.freepascal.org/Feature_Ideas Feature Ideas].<br />
<br />
Se quiser participar do fórum, não deixe de ler [http://www.istf.com.br/?page=perguntas como fazer perguntas inteligentes]. Para criar um relatório de bug em inglês veja [http://wiki.lazarus.freepascal.org/How_do_I_create_a_bug_report/pt como criar relatórios de bug]. Para outros tópicos, veja também este [http://lazarus.codigolivre.org.br/index.php/P%C3%A1gina_principal Índice].<br />
<br />
==Projeto de Documentação==<br />
====Documentação do Free Pascal====<br />
<br />
:A [[FPC documentation/pt|documentação para desenvolvedores do FPC]] contém a documentação disponível para desenvolvedores e outros contribuidores do compillador Free Pascal, como pessoas envolvidas em tradução de mensagens para outras línguas, uma lista de bindings de Pascal, informação organizacional, procedimento para releases do FPC, listas a-fazer, etc.<br />
<br />
====Documentação do Lazarus====<br />
:Toda a documentação disponível e tutoriais para a IDE (Ambiente Integrado de Desenvolvimento) do Lazarus, incluindo os manuais do compilador Free Pascal, podem ser encontrados nas páginas de [[Lazarus Documentation/pt | documentação do Lazarus]]. Consulte as [http://wiki.lazarus.freepascal.org/Lazarus_Faq/pt FAQ]. Veja também a [http://lazarus-ccr.sourceforge.net/docs/lcl/ documentação da LCL], o [http://wiki.lazarus.freepascal.org/Tutorial_de_LazReport tutorial de LazReport] e o manual [http://wiki.lazarus.freepascal.org/Install_Packages/pt Instalando Pacotes]. Muitas das páginas estão em permanente construção, portanto fique à vontade para adicionar as suas experiências a essas seções. Se quiser você também pode criar uma página pessoal com informações de contato.<br />
<br />
====A Bíblia do Lazarus====<br />
<br />
:O projeto almeja desenvolver uma documentação original em língua portuguesa, construída a partir do conhecimento de programadores e traduções da wiki. Visite a [http://lazarus.codigolivre.org.br wiki brasileira] e ajude na documentação.<br />
<br />
==Downloads==<br />
<br />
Todos os componentes e pacotes estão disponíveis na área de arquivos do<br />
[http://sourceforge.net/project/showfiles.php?group_id=92177 Lazarus Code and Component Repository] no SourceForge. O compilador Free Pascal e a versão atual de testes do Lazarus podem ser encontrados no site do [http://sourceforge.net/project/showfiles.php?group_id=89339 Lazarus no Sourceforge]. Documentação adicional para estes pacotes também pode ser encontrada na página [[Components_and_Code_examples/pt|Componentes e Exemplos de Código]] (caso o contribuidor tenha criado uma lá). O compilador e vários códigos-fonte doados podem ser encontrados no site do [http://www.freepascal.eti.br/ compilador Free Pascal] ou no site do [http://lazarus.freepascal.org Lazarus USA].<br />
<br />
==Lista de E-mails==<br />
Usuários novatos e veteranos estão convidados a se unir às listas de e-mails do Lazarus-CCR [http://lists.sourceforge.net/lists/listinfo/lazarus-ccr-announce anúncios] e [http://lists.sourceforge.net/lists/listinfo/lazarus-ccr-general diversos].<br />
<br />
==Quem está trabalhando em quê?==<br />
Se você está atualmente convertendo um componente ou biblioteca ou precisa de algo convertido por favor informe isso na página [[Current conversion projects|Projetos Atuais de Conversão]]. Verifique também os projetos em andamento no site brasileiro em [http://lazaruspascal.codigolivre.org.br/index.php?sid=bce5627d9c3a8d5e866f7a4a96d0c645 Projetos em Desenvolvimento]. Estas informações guiarão os desenvolvedores que desejam converter componentes e previnirão o esforço duplicado na conversão de um mesmo pacote.<br />
<br />
==Referências, Links e Recursos==<br />
<br />
====IDE do Lazarus====<br />
Novidades e informações sobre a situação da IDE do Lazarus podem ser encontrados [http://lazarus.freepascal.org aqui]. Lançamentos da IDE do Lazarus e do compilador Free Pascal podem ser baixados ali. O [http://sourceforge.net/project/showfiles.php?group_id=89339 Lazarus File Area] também tem os últimos pacotes do compilador e IDE disponíveis para download.<br />
<br />
====Projetos Atuais em Lazarus====<br />
Nossa lista atual de [[Projects_using_Lazarus/pt|Projetos Desenvolvidos no Lazarus]] com acesso público ao website e aos arquivos relacionados para download.<br />
<br />
====Grandes Sites e Links Relacionados====<br />
A nossa lista de sites relacionados ao Delphi/Kylix pode ser encontrada na página de [[Page Of Code Sites|sites de programação]]. Se você conhecer um ótimo site ainda não listado sinta-se à vontade para adicioná-lo.<br />
<br />
====Ferramentas de Busca Especializadas====<br />
Há algumas excelentes bases de busca e de conhecimento online que podem ser uma grande ajuda para aprender técnicas novas e resolver problemas.<br />
Os associados de Tamarack operam um [http://www.tamaracka.com/search.htm site de busca rápida] especificamente para os arquivos USENET da Borland. A Mer Systems Inc. fornece uma [http://www.mers.com/searchsite.html busca similar]. Uma outra ótima fonte de informação junto com uma potencialidade do [http://www.efg2.com/Lab/search.htm sitewide] é a [http://www.efg2.com/ Earl F.Glynn's Computer Lab and Reference Library].<br />
<br />
====Marketing Case Studies====<br />
Uma oportunidade para usuários Lazarus de [[Marketing_Case_Studies/pt|explicar por que]] o Lazarus é a sua IDE preferida.<br />
<br />
====Apresentando o Lazarus e o FPC em uma Feira de Negócios====<br />
O FPC e o Lazarus foram apresentados em um stand da [http://wiki.lazarus.freepascal.org/Systems_2005 Systems 2005] e da [http://wiki.lazarus.freepascal.org/Systems_2006 Systems 2006] em Munique. Baseados na experiência adquirida nessas feiras nós coletamos algumas [http://wiki.lazarus.freepascal.org/Preparing_a_booth_on_a_trade_show informações] que serão usadas em futuras preparações de stands.<br />
<br />
=Wiki Antiga=<br />
Estas páginas estão sendo convertidas do formato da wiki antiga. A página referente à wiki antiga pode ser encontrada [http://lazarus-ccr.sourceforge.net/index.php?wiki=FrontPage aqui].<br><br />
Conteúdo original por [[User:VlxAdmin]].</div>Aliottihttps://wiki.freepascal.org/index.php?title=Multithreaded_Application_Tutorial/pt&diff=24109Multithreaded Application Tutorial/pt2007-09-24T14:43:05Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>{{Multithreaded Application Tutorial}}<br />
<br />
= Introdução =<br />
Esta página irá tentar explicar com escrever e debugar uma aplicação multi-tarefa(multithread) com Free Pascal e Lazarus.<br />
<br />
Uma aplicação multi-tarefa(multithread) é uma que cria duas ou mais tarefas em execução que trabalham ao mesmo tempo.<br />
<br />
Se você é novo em multi-tarefa, por favor leia o parágrafo "O que você necessita para multi-tarefa ?" para descobrir, se você realmente necessita disto. Você pode se salvar de um monte de dores de cabeça.<br />
<br />
<br />
Uma das tarefas é chamada de tarefa princípal. A Tarefa Princípal é criada pelo sistema operacional, cada vez que nossa aplicação inicia.<br />
A Tarefa Principal '''deve ter''' somente tarefa que atualiza os componentes que faz interfaces com o usuário(senão, a aplicação pode cair).<br />
<br />
A principal idéia é que a aplicação pode fazer algum processamento em plano de fundo(background - numa segunda tarefa) enquando o usuário pode continuar seu trabalho (usando a tarefa principal).<br />
<br />
Outro uso das tarefas é somente para ter uma melhor resposta da aplicação. Se você cria uma aplicação, e quando o usuário pressiona um botão, a aplicação inicia o processamento (um grande trabalho) ... e enquanto processando, a tela para de responder, e dá ao usuário a impressão de que a aplicação está morta, que não é legal. Se o grande trabalho é executado numa segunda tarefa, a aplicação mantém-se respondendo(sempre) como se estisse inativa. Neste caso é uma boa idéia, antes iniciando a tarefa, para disabilitar os botões da janela para evitar o usuário iniciar mais que uma tarefa por trabalho.<br />
<br />
Outro uso, é para criar uma aplicação servidora(server application) que é abilitada para responder a vários clientes ao mesmo tempo.<br />
<br />
= Você necessita de multi-tarefa ? =<br />
<br />
Se você é um novato em multi-tarefa e somente você quer fazer sua aplicação com melhor tempo de resposta enquanto sua aplicação processa grandes trabalhos, então multi-tarefa pode não ser, o eu você está procurando.<br />
<br />
Aplicações multi-tarefa sempre tem pesados debugs e eles são cada vez mais complexos. E em muitos casos você não precisa de multi-tarefa. Uma simples tarefa é o suficiente. <br />
<br />
Multi-tarefa somente é necessário para:<br />
* bloquear handles, como comunicação na rede<br />
* usando múltiplos processadores de uma vez<br />
* algoritmos e chamadas de bibliotecas, que não podem ser separadas em pequenas partes.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Multithreaded_Application_Tutorial/pt&diff=24034Multithreaded Application Tutorial/pt2007-09-21T17:10:30Z<p>Aliotti: New page: = Introdução = Esta página irá tentar explicar com escrever e debugar uma aplicação multi-tarefa(multithread) com Free Pascal e Lazarus. Uma aplicação multi-tarefa(multithread) é...</p>
<hr />
<div>= Introdução =<br />
Esta página irá tentar explicar com escrever e debugar uma aplicação multi-tarefa(multithread) com Free Pascal e Lazarus.<br />
<br />
Uma aplicação multi-tarefa(multithread) é uma que cria duas ou mais tarefas em execução que trabalham ao mesmo tempo.<br />
<br />
Se você é novo em multi-tarefa, por favor leia o parágrafo "O que você necessita para multi-tarefa ?" para descobrir, se você realmente necessita disto. Você pode se salvar de um monte de dores de cabeça.<br />
<br />
<br />
Uma das tarefas é chamada de tarefa princípal. A Tarefa Princípal é criada pelo sistema operacional, cada vez que nossa aplicação inicia.<br />
A Tarefa Principal '''deve ter''' somente tarefa que atualiza os componentes que faz interfaces com o usuário(senão, a aplicação pode cair).<br />
<br />
A principal idéia é que a aplicação pode fazer algum processamento em plano de fundo(background - numa segunda tarefa) enquando o usuário pode continuar seu trabalho (usando a tarefa principal).<br />
<br />
Outro uso das tarefas é somente para ter uma melhor resposta da aplicação. Se você cria uma aplicação, e quando o usuário pressiona um botão, a aplicação inicia o processamento (um grande trabalho) ... e enquanto processando, a tela para de responder, e dá ao usuário a impressão de que a aplicação está morta, que não é legal. Se o grande trabalho é executado numa segunda tarefa, a aplicação mantém-se respondendo(sempre) como se estisse inativa. Neste caso é uma boa idéia, antes iniciando a tarefa, para disabilitar os botões da janela para evitar o usuário iniciar mais que uma tarefa por trabalho.<br />
<br />
Outro uso, é para criar uma aplicação servidora(server application) que é abilitada para responder a vários clientes ao mesmo tempo.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_Documentation/pt&diff=24033Lazarus Documentation/pt2007-09-21T16:27:57Z<p>Aliotti: /* Tutoriais de Pascal e de Lazarus */</p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
== Tutoriais de Pascal e de Lazarus ==<br />
*[[Overview of Free Pascal and Lazarus/pt|Introdução a Free Pascal e Lazarus]] - Uma breve discussão sobre o que pode ser devenvolvido com estas ferramentas.<br />
*[[Lazarus Tutorial/pt|Tutorial do Lazarus]] - Um tutorial para iniciantes e uma descrição detalhada da IDE.<br />
*[[Lazarus IDE Tools/pt|Ferramentas da IDE]] - Um tutorial de nível intermediario sobre completamento de código e outras ferramentas da IDE.<br />
*[[Lazarus Database Tutorial/pt|Tutorial de Bancos de Dados]] - Uma introdução à utilização do Lazarus com bancos de dados.<br />
*[[Developing with Graphics/pt|Desenvolvendo com gráficos]] - Exemplos básicos envolvendo programação gráfica.<br />
*[http://www.fec.unicamp.br/reenge/aulas/pascal/ Tutorial de Pascal] da UNICAMP - Um guia para aprender a programar em Pascal.<br />
*[[TXMLPropStorage/pt|TXMLPropStorage]] - Usando TXMLPropStorage para salvar suas preferências.<br />
*[[Executing External Programs/pt|Executando Programas Externos]] - Um curto tutorial sobre executar programas externos apartir de seu aplicativo.<br />
*[[Hardware Access/pt|Acesso ao Hardware]] - Como acessar dispositivos de Hardware, tais como placas ISA, placas PCI, portas paralela e serial e USB.<br />
*[[Networking/pt|Programação para redes]] - Tutoriais sobre XML, TCP/IP Sockets, programação segura, WebServices, etc.<br />
*[[XML Tutorial/pt|Tutorial de XML]] - Escrevendo e lendo arquivos XML<br />
*[[Multithreaded Application Tutorial/pt|Múltiplas Linhas de Execução]] - Como escrever programas que utilizam multiplas linhas de execução (Threads).<br />
*[[Streaming components/pt|Streaming components]] - Como escrever componentes para streams e leitura/criação de componentes de streams.<br />
*[[OpenGL Tutorial]] - Como utilizar GLUT no Lazarus<br />
*[[Creating bindings for C libraries]] - Como converter headers c (.h) para Pascal<br />
*[[Lazarus/FPC Libraries]] - Como criar bibliotecas dinâmicas (.so, .dll, .dynlib) e como utiliza-las<br />
<br />
== Guia para usuários do Lazarus ==<br />
<br />
*[[Lazarus Faq|Perguntas Frequentes]] - Informações gerais sobre o Lazarus e outras específicas ao Linux ou ao Windows.<br />
*[[Lazarus DB Faq/pt|FAQ de Bancos de Dados]] - Perguntas frequentes sobre o uso de bancos de dados na Lazarus.<br />
*[[Code Examples|Exemplos de código]] - Examplos de código que funciona para o Lazarus.<br />
*[[Feature_Ideas|Idéias de funcionalidades]] - Capacidades que você gostaria de ver adicionadas ao Lazarus<br />
*[[How do I create a bug report|Como reportar um bug]] - Você acredita ter descoberto um bug no Lazarus e gostaria de reporta-lo?<br />
<br />
=== Instalação ===<br />
<br />
*[[Installing Lazarus/pt|Instalando o Lazarus]] - Um guia de instalação<br />
*[[Getting Lazarus/pt|Baixando o Lazarus]] - Instruções sobre como baixar o program ou obte-lo do Subversion<br />
*[[OS X Programming Tips|Dicas para o Mac OS X]] - Instalação do Lazarus, ferramentas úteis, comandos Unix e mais...<br />
<br />
=== IDE ===<br />
<br />
*[[IDE tricks|Truques da IDE]] - Truques úteis<br />
*[[Lazarus IDE]] - As janelas da IDE<br />
*[[Lazarus Packages|Pacotes do Lazarus]] - Um guia para criar pacotes no Lazarus<br />
*[[Install Packages|Instalando Pacotes]] - Um pequeno guia de instalação de pacotes<br />
*[[Extending the IDE|Extendendo a IDE]] - Como adicionar funcionalidade para a IDE do Lazarus<br />
*[[Adding Kylix Help|Adicionando a ajuda do Kylix]] - Como utilizar os arquivos de ajuda da Borland na IDE<br />
<br />
=== LCL ===<br />
<br />
*[[doc:lcl/|Documentação da LCL]] - Ajuda online da LCL (em progresso).<br />
*[[Main Loop Hooks]] - Como gerir multiplas fontes de eventos<br />
*[[Asynchronous Calls]] - Como guardar chamadas para execução futura<br />
*[[File size and smartlinking|Tamanho do executável]] - Como utilizar o smartlinking e criar executáveis pequenos.<br />
*[[Accessing the Interfaces directly|Acessando as interfaces diretamente]] - Exemplo de como acessar as interfaces da LCL<br />
*[[Add Help to Your Application|Adicionando ajuda]] - Como criar ajuda online para seus programas<br />
*[[Anchor Sides]] - Descrição das ancoras e como utiliza-las<br />
*[[LCL Tips]] - Dicas e truques<br />
*[[LCL Defines]] - Escolhendo a opção certa para compilar novamente a LCL<br />
<br />
=== Desenvolvendo ===<br />
<br />
*[[The Power of Proper Planning and Practices|O Poder do Planejamento]] - Bom-senso na programação e as melhores práticas para um desenvolvedor Free Pascal e Lazarus<br />
*[[Multiplatform Programming Guide|Guia de Programação Multiplataforma]] - Como desenvolver aplicativos independentes de plataforma<br />
*[[Using Pascal Libraries with .NET and Mono|Utilizando bibliotecas pascal com .NET e Mono]] - sim, voce pode utilizar código Free Pascal junto com .NET e Mono<br />
*[[Deploying Your Application|Distribuindo seus aplicativos]] - Como criar um instalador para seus programas<br />
*[[Cross compiling|Cross Compilação]] - Criando executáveis de uma plataforma, estando em outra.<br />
*[[Remote Debugging|Depuração Remota]] - Como depurar seu aplicativo Lazarus em outra maquina.<br />
<br />
=== Ferramentas ===<br />
<br />
*[[Lazarus Documentation Editor|Editor da Documentação do Lazarus]] - Utilizando o "lazde" para criar documentação.<br />
*[[LazDoc]] - Um editor integrado dos arquivos de documentação<br />
*[[lazbuild]] - Compilados projetos e pacotes sem a IDE<br />
<br />
=== Migrando do Delphi ===<br />
<br />
*[[Lazarus Components]] - Comparação entre os componentes do Lazarus e do Turbo Delphi<br />
*[[Lazarus For Delphi Users/pt|Lazarus para usuários do Delphi]] - Para usuários do Delphi que desejam aprender o Lazarus.<br />
*[[Code Conversion Guide/pt|Guia da Conversão de Código]] - Como converter código e componentes existentes para o Lazarus<br />
<br />
== Guia dos Desenvolvedores do Lazarus ==<br />
<br />
*[[How To Help Developing Lazarus/pt|Como Ajudar?]] - Um guia para ajudar iniciantes a começarem a melhorar o Lazarus<br />
*[[Version Numbering|Números das Versões]] - Explicação sobre a diferença entre os números de versão do Lazarus<br />
*[[Creating A Patch/pt| Criando um Patch]] - Um guia para fazer um patch com as mudanças feitas no Lazarus<br />
*[[Creating a Backtrace with GDB|Criando Backtrace com o GDB]] - Um guia para criar um backtrace para ajuda-lo a depurar seu programa<br />
*[[Nomenclature/pt|Nomenclatura]] - Guia para escolher um nome para um novo método ou propriedade<br />
*[[DesignGuidelines/pt|Linhas Gerais de Desenho]] - Um guia sobre como proceder ao mudar o código-fonte de Lazarus.<br />
*[[GUI design|Desenho de Interfaces de Usuário]] - Linhas gerais de desenvolvimento da GUI do Lazarus<br />
*[[Road To 1.0|Rumo ao 1.0]] - O que precisa ficar pronto para o Lazarus 1.0<br />
*[[Detailed Lazarus 0.9.24 todo|Pendencias da versão 0.9.24]] - Uma lista do que ainda precisa ser feito antes de lançar a versão 0.9.24 do Lazarus<br />
*[[Moderating the bug tracker|Moderando o bug tracker]] - Guias gerais para desenvolvedores Lazarus e moderadores utilizarem o [http://www.lazarus.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools]] - Como as ferramentas de código são integradas na IDE<br />
*[[Creating IDE Help|Criando a ajuda da IDE]] - Como extender a documentação da IDE<br />
*[[Unit not found - How to find units|Unit not found - Como encontrar unidades]] - Como configurar a IDE e os arquivos fontes<br />
*[[Bounties]] - Precisa de algo que o Lazarus não possuí ainda? Coloque um preço aqui.<br />
<br />
=== LCL - A biblioteca de componentes do Lazarus ===<br />
*[[LCL Messages|Mensagens da LCL]] - Um guia relacionada a mensagens da LCL.<br />
*[[LCL Internals|Por dentro da LCL]] - Informações sobre o funcionamento interno da LCL.<br />
*[[LCL Key Handling]] - Help! A key press, what now?<br />
*[[LCL Unicode Support|Suporte a Unicode na LCL]] - Rumo a um Lazarus com suporte a Unicode<br />
*[[LCL Documentation Roadmap|Mapa da documentação]] - Quais unidades ainda precisam ser documentadas<br />
<br />
=== Interfaces ===<br />
*[[GTK2 Interface|Interface Gtk2]] - Gtk2 para Unix, Mac OS X, Windows<br />
*[[Carbon Interface|Interface Carbon]] - A Interface Carbon para Mac OS X<br />
*[[Qt Interface|Interface Qt]] - A Interface Qt 4 para UNIX, Mac OS X e PDA baseados em Linux<br />
*[[Windows CE Interface|Interface Windows CE]] - Para Pocket PC e Smartphones<br />
*[[fpGUI Interface|Interface fpGUI]] - Uma biblioteca gráfica completamente escrita em Object Pascal<br />
<br />
=== Tradução ===<br />
* [[Getting translation strings right|Criando Programas]] Algumas notas para programadores interessados em criar e utilizar strings de tradução em seus aplicativos. Discute rapidamente a criação de strings, oferece algumas dicas sobre a implementação e faz algumas considerações sobre o uso do inglês como linguagem inicial, em particular.<br />
* '''Notas de Localização:'''<br />
:* [[German localization notes|Alemão]] - Notas e guia gerais para a tradução da IDE para alemão, incluindo um pequeno dicionário.<br />
:* [[Portuguese-Brazilian Localization Notes|Português]] - Pequeno dicionário contendo termos comuns utilizados na IDE e sua tradução para o português.<br />
<!-- *[[TO-DO]] Remaining Tasks --><br />
* [[Help:Add language bar/pt | Adicionar barra de idiomas]] explica como adicionar uma barra contendo uma lista de traduções no topo da página.<br />
<br />
== Documentação do Free Pascal ==<br />
Além [http://lazarus-ccr.sourceforge.net/fpcdoc/ deste website], a última versão da documentação pode ser encontrada online em vários formatos na página do Compilador [http://www.freepascal.org/docs.html Free Pascal].<br />
Agora também há uma WiKi para o FreePascal [http://www.freepascal.org/wiki/index.php/Main_Page] muito similar a esta, para permitir que os desenvolvedores enviem documentação adicional a oficial, que está abaixo.<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Guia do Usuário]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Guia do Desenvolvedor]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Guia de referencia da unidade system e construções do Pascal suportadas]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Manual de referencia da Run-Time Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Manual de referencia do Free Component Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Manual da ferramenta de documentação do Free Pascal]<br />
<br />
== Blogs relacionados ao Lazarus ==<br />
<br />
*[[Adventures of a Newbie|Aventuras de um Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=24015Streaming components/pt2007-09-19T14:08:37Z<p>Aliotti: /* Armazenadno Dados Customizados - DefineProperties */</p>
<hr />
<div>{{Streaming components}}<br />
<br />
== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre><br />
<br />
== Lendo um componente de um stream ==<br />
<br />
A unidade LResources tem a seguinte função: <br />
procedure ReadComponentFromBinaryStream(AStream: TStream;<br />
var RootComponent: TComponent; OnFindComponentClass: TFindComponentClassEvent; TheOwner: TComponent = nil);<br />
<br />
* AStream é a stream contendo um componente no formato binário.<br />
* RootComponent é qualquer componente existente, cujo os dados serão sobre-escritos, ou esse é nil(valor vazio) um componente novo será criado.<br />
* OnFindComponentClass é uma função, que é usada pelo TReader para pegar a classe a partir de classnames na stream. Por exemplo:<br />
<pre><br />
procedure TCompStreamDemoForm.OnFindClass(Reader: TReader;<br />
const AClassName: string; var ComponentClass: TComponentClass);<br />
begin<br />
if CompareText(AClassName,'TGroupBox')=0 then<br />
ComponentClass:=TGroupBox<br />
else if CompareText(AClassName,'TCheckBox')=0 then<br />
ComponentClass:=TCheckBox;<br />
end;<br />
</pre><br />
* TheOwner é o componente raiz ou dono, quando criando um novo componente.<br />
<br />
== Propriedades que podem ser guardadas num Stream ==<br />
<br />
Há algumas limitações, que tipos TReader/TWriter podem colocar no stream:<br />
<br />
* Tipos básicos podem ser armazenados na stream: string, integer, char, single, double, extended, byte, word, cardinal, shortint, method pointers, etc. .<br />
* TPersistent e seus descendentes podem ser armazenados na stream<br />
* records, objects e classes não descendendo de TPersistent não podem ser guardadas. Para armazená-los você precisa dizer como no TReader/TWriter. Veja a seguir em armazenando dados customizados - DefineProperties.<br />
<br />
<br />
== Armazenadno Dados Customizados - DefineProperties ==<br />
<br />
Você pode guardar arbitrariamente dados sobrescrevendo(overriding) DefineProperties. Isto habilita a guardar qualquer dado na stream, que não tem tipos básico. Por exemplo para armazenar uma variável ''FMyRect: TRect''' de seu componente, adicione os seguintes três métodos:<br />
<pre><br />
procedure DefineProperties(Filer: TFiler); override;<br />
procedure ReadMyRect(Reader: TReader);<br />
procedure WriteMyRect(Writer: TWriter);<br />
</pre><br />
<br />
Com o seguinte código:<br />
<br />
<pre><br />
procedure TMyComponent.DefineProperties(Filer: TFiler);<br />
var<br />
MyRectMustBeSaved: Boolean;<br />
begin<br />
inherited DefineProperties(Filer);<br />
MyRectMustBeSaved:=(MyRect.Left<>0)<br />
or (MyRect.Top<>0)<br />
or (MyRect.Right<>0)<br />
or (MyRect.Bottom<>0);<br />
Filer.DefineProperty('MyRect',@ReadMyRect,@WriteMyRect,MyRectMustBeSaved);<br />
end;<br />
<br />
procedure TMyComponent.ReadMyRect(Reader: TReader);<br />
begin<br />
with Reader do begin<br />
ReadListBegin;<br />
FMyRect.Left:=ReadInteger;<br />
FMyRect.Top:=ReadInteger;<br />
FMyRect.Right:=ReadInteger;<br />
FMyRect.Bottom:=ReadInteger;<br />
ReadListEnd;<br />
end;<br />
end;<br />
<br />
procedure TMyComponent.WriteMyRect(Writer: TWriter);<br />
begin<br />
with Writer do begin<br />
WriteListBegin;<br />
WriteInteger(FMyRect.Left);<br />
WriteInteger(FMyRect.Top);<br />
WriteInteger(FMyRect.Right);<br />
WriteInteger(FMyRect.Bottom);<br />
WriteListEnd;<br />
end;<br />
end;<br />
</pre><br />
<br />
Este irá salvar MyRect como uma propriedade 'MyRec'.<br />
<br />
Se você tem muitos objetos TRect, então você provavelmente não precisa escrever este código toda vez.<br />
A unidade LResources contém um exemplo de como escrever um procedimento para definir uma propriedade rect:<br />
procedure DefineRectProperty(Filer: TFiler; const Name: string; ARect, DefaultRect: PRect);<br />
<br />
Desta maneira o código acima pode ser escrito de forma curta: <br />
<pre><br />
procedure TMyComponent.DefineProperties(Filer: TFiler);<br />
begin<br />
inherited DefineProperties(Filer);<br />
DefineRectProperty(Filer,'MyRect',@FMyRect,nil);<br />
end;<br />
</pre><br />
<br />
== Escrevendo seu próprio componente - Parte 2 ==<br />
<br />
Agora o exemplo pode ser extendido e nós podemos usar propriedades arbitrárias com somente algumas linhas de código:<br />
<pre><br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
FRect1: TRect;<br />
FRect2: TRect;<br />
protected<br />
procedure DefineProperties(Filer: TFiler); override;<br />
public<br />
property Rect1: TRect read FRect1 write FRect1;<br />
property Rect2: TRect read FRect2 write FRect2;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
procedure TMyComponent.DefineProperties(Filer: TFiler);<br />
begin<br />
inherited DefineProperties(Filer);<br />
DefineRectProperty(Filer,'Rect1',@FRect1,nil);<br />
DefineRectProperty(Filer,'Rect2',@FRect2,nil);<br />
end;<br />
</pre><br />
<br />
Este componente pode agora ser salvo, lido ou usado pelos [[RTTI controls]]. Você não precisa escrever algum código a mais.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=24014Streaming components/pt2007-09-19T14:02:07Z<p>Aliotti: /* Propriedades que podem ser guardadas num Stream */</p>
<hr />
<div>{{Streaming components}}<br />
<br />
== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre><br />
<br />
== Lendo um componente de um stream ==<br />
<br />
A unidade LResources tem a seguinte função: <br />
procedure ReadComponentFromBinaryStream(AStream: TStream;<br />
var RootComponent: TComponent; OnFindComponentClass: TFindComponentClassEvent; TheOwner: TComponent = nil);<br />
<br />
* AStream é a stream contendo um componente no formato binário.<br />
* RootComponent é qualquer componente existente, cujo os dados serão sobre-escritos, ou esse é nil(valor vazio) um componente novo será criado.<br />
* OnFindComponentClass é uma função, que é usada pelo TReader para pegar a classe a partir de classnames na stream. Por exemplo:<br />
<pre><br />
procedure TCompStreamDemoForm.OnFindClass(Reader: TReader;<br />
const AClassName: string; var ComponentClass: TComponentClass);<br />
begin<br />
if CompareText(AClassName,'TGroupBox')=0 then<br />
ComponentClass:=TGroupBox<br />
else if CompareText(AClassName,'TCheckBox')=0 then<br />
ComponentClass:=TCheckBox;<br />
end;<br />
</pre><br />
* TheOwner é o componente raiz ou dono, quando criando um novo componente.<br />
<br />
== Propriedades que podem ser guardadas num Stream ==<br />
<br />
Há algumas limitações, que tipos TReader/TWriter podem colocar no stream:<br />
<br />
* Tipos básicos podem ser armazenados na stream: string, integer, char, single, double, extended, byte, word, cardinal, shortint, method pointers, etc. .<br />
* TPersistent e seus descendentes podem ser armazenados na stream<br />
* records, objects e classes não descendendo de TPersistent não podem ser guardadas. Para armazená-los você precisa dizer como no TReader/TWriter. Veja a seguir em armazenando dados customizados - DefineProperties.<br />
<br />
<br />
== Armazenadno Dados Customizados - DefineProperties ==<br />
<br />
Você pode guardar arbitrariamente dados sobrescrevendo(overriding) DefineProperties. Isto habilita a guardar qualquer dado na stream, que não tem tipos básico. Por exemplo para armazenar uma variável ''FMyRect: TRect''' de seu componente, adicione os seguintes três métodos:<br />
<pre><br />
procedure DefineProperties(Filer: TFiler); override;<br />
procedure ReadMyRect(Reader: TReader);<br />
procedure WriteMyRect(Writer: TWriter);<br />
</pre><br />
<br />
Com o seguinte código:<br />
<br />
<pre><br />
procedure TMyComponent.DefineProperties(Filer: TFiler);<br />
var<br />
MyRectMustBeSaved: Boolean;<br />
begin<br />
inherited DefineProperties(Filer);<br />
MyRectMustBeSaved:=(MyRect.Left<>0)<br />
or (MyRect.Top<>0)<br />
or (MyRect.Right<>0)<br />
or (MyRect.Bottom<>0);<br />
Filer.DefineProperty('MyRect',@ReadMyRect,@WriteMyRect,MyRectMustBeSaved);<br />
end;<br />
<br />
procedure TMyComponent.ReadMyRect(Reader: TReader);<br />
begin<br />
with Reader do begin<br />
ReadListBegin;<br />
FMyRect.Left:=ReadInteger;<br />
FMyRect.Top:=ReadInteger;<br />
FMyRect.Right:=ReadInteger;<br />
FMyRect.Bottom:=ReadInteger;<br />
ReadListEnd;<br />
end;<br />
end;<br />
<br />
procedure TMyComponent.WriteMyRect(Writer: TWriter);<br />
begin<br />
with Writer do begin<br />
WriteListBegin;<br />
WriteInteger(FMyRect.Left);<br />
WriteInteger(FMyRect.Top);<br />
WriteInteger(FMyRect.Right);<br />
WriteInteger(FMyRect.Bottom);<br />
WriteListEnd;<br />
end;<br />
end;<br />
</pre><br />
<br />
Este irá salvar MyRect como uma propriedade 'MyRec'.<br />
<br />
Se você tem muitos objetos TRect, então você provavelmente não precisa escrever este código toda vez.<br />
A unidade LResources contém um exemplo de como escrever um procedimento para definir uma propriedade rect:<br />
procedure DefineRectProperty(Filer: TFiler; const Name: string; ARect, DefaultRect: PRect);<br />
<br />
Desta maneira o código acima pode ser escrito de forma curta: <br />
<pre><br />
procedure TMyComponent.DefineProperties(Filer: TFiler);<br />
begin<br />
inherited DefineProperties(Filer);<br />
DefineRectProperty(Filer,'MyRect',@FMyRect,nil);<br />
end;<br />
</pre></div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=24013Streaming components/pt2007-09-19T13:49:11Z<p>Aliotti: /* Propriedades que podem ser guardadas num Stream */</p>
<hr />
<div>{{Streaming components}}<br />
<br />
== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre><br />
<br />
== Lendo um componente de um stream ==<br />
<br />
A unidade LResources tem a seguinte função: <br />
procedure ReadComponentFromBinaryStream(AStream: TStream;<br />
var RootComponent: TComponent; OnFindComponentClass: TFindComponentClassEvent; TheOwner: TComponent = nil);<br />
<br />
* AStream é a stream contendo um componente no formato binário.<br />
* RootComponent é qualquer componente existente, cujo os dados serão sobre-escritos, ou esse é nil(valor vazio) um componente novo será criado.<br />
* OnFindComponentClass é uma função, que é usada pelo TReader para pegar a classe a partir de classnames na stream. Por exemplo:<br />
<pre><br />
procedure TCompStreamDemoForm.OnFindClass(Reader: TReader;<br />
const AClassName: string; var ComponentClass: TComponentClass);<br />
begin<br />
if CompareText(AClassName,'TGroupBox')=0 then<br />
ComponentClass:=TGroupBox<br />
else if CompareText(AClassName,'TCheckBox')=0 then<br />
ComponentClass:=TCheckBox;<br />
end;<br />
</pre><br />
* TheOwner é o componente raiz ou dono, quando criando um novo componente.<br />
<br />
== Propriedades que podem ser guardadas num Stream ==<br />
<br />
Há algumas limitações, que tipos TReader/TWriter podem colocar no stream:<br />
<br />
* Tipos básicos podem ser armazenados na stream: string, integer, char, single, double, extended, byte, word, cardinal, shortint, method pointers, etc. .<br />
* TPersistent e seus descendentes podem ser armazenados na stream<br />
* records, objects e classes não descendendo de TPersistent não podem ser guardadas. Para armazená-los você precisa dizer como no TReader/TWriter. Veja a seguir em armazenado dados customizados - DefineProperties.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_Documentation/pt&diff=23982Lazarus Documentation/pt2007-09-14T17:08:50Z<p>Aliotti: /* LCL */</p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
== Tutoriais de Pascal e de Lazarus ==<br />
*[[Overview of Free Pascal and Lazarus/pt|Introdução a Free Pascal e Lazarus]] - Uma breve discussão sobre o que pode ser devenvolvido com estas ferramentas.<br />
*[[Lazarus Tutorial/pt|Tutorial do Lazarus]] - Um tutorial para iniciantes e uma descrição detalhada da IDE.<br />
*[[Lazarus IDE Tools/pt|Ferramentas da IDE]] - Um tutorial de nível intermediario sobre completamento de código e outras ferramentas da IDE.<br />
*[[Lazarus Database Tutorial/pt|Tutorial de Bancos de Dados]] - Uma introdução à utilização do Lazarus com bancos de dados.<br />
*[[Developing with Graphics/pt|Desenvolvendo com gráficos]] - Exemplos básicos envolvendo programação gráfica.<br />
*[http://www.fec.unicamp.br/reenge/aulas/pascal/ Tutorial de Pascal] da UNICAMP - Um guia para aprender a programar em Pascal.<br />
*[[TXMLPropStorage/pt|TXMLPropStorage]] - Usando TXMLPropStorage para salvar suas preferências.<br />
*[[Executing External Programs/pt|Executando Programas Externos]] - Um curto tutorial sobre executar programas externos apartir de seu aplicativo.<br />
*[[Hardware Access/pt|Acesso ao Hardware]] - Como acessar dispositivos de Hardware, tais como placas ISA, placas PCI, portas paralela e serial e USB.<br />
*[[Networking/pt|Programação para redes]] - Tutoriais sobre XML, TCP/IP Sockets, programação segura, WebServices, etc.<br />
*[[XML Tutorial/pt|Tutorial de XML]] - Escrevendo e lendo arquivos XML<br />
*[[Multithreaded Application Tutorial|Múltiplas Linhas de Execução]] - Como escrever programas que utilizam multiplas linhas de execução (Threads).<br />
*[[Streaming components/pt|Streaming components]] - Como escrever componentes para streams e leitura/criação de componentes de streams.<br />
*[[OpenGL Tutorial]] - Como utilizar GLUT no Lazarus<br />
*[[Creating bindings for C libraries]] - Como converter headers c (.h) para Pascal<br />
*[[Lazarus/FPC Libraries]] - Como criar bibliotecas dinâmicas (.so, .dll, .dynlib) e como utiliza-las<br />
<br />
== Guia para usuários do Lazarus ==<br />
<br />
*[[Lazarus Faq|Perguntas Frequentes]] - Informações gerais sobre o Lazarus e outras específicas ao Linux ou ao Windows.<br />
*[[Lazarus DB Faq/pt|FAQ de Bancos de Dados]] - Perguntas frequentes sobre o uso de bancos de dados na Lazarus.<br />
*[[Code Examples|Exemplos de código]] - Examplos de código que funciona para o Lazarus.<br />
*[[Feature_Ideas|Idéias de funcionalidades]] - Capacidades que você gostaria de ver adicionadas ao Lazarus<br />
*[[How do I create a bug report|Como reportar um bug]] - Você acredita ter descoberto um bug no Lazarus e gostaria de reporta-lo?<br />
<br />
=== Instalação ===<br />
<br />
*[[Installing Lazarus/pt|Instalando o Lazarus]] - Um guia de instalação<br />
*[[Getting Lazarus/pt|Baixando o Lazarus]] - Instruções sobre como baixar o program ou obte-lo do Subversion<br />
*[[OS X Programming Tips|Dicas para o Mac OS X]] - Instalação do Lazarus, ferramentas úteis, comandos Unix e mais...<br />
<br />
=== IDE ===<br />
<br />
*[[IDE tricks|Truques da IDE]] - Truques úteis<br />
*[[Lazarus IDE]] - As janelas da IDE<br />
*[[Lazarus Packages|Pacotes do Lazarus]] - Um guia para criar pacotes no Lazarus<br />
*[[Install Packages|Instalando Pacotes]] - Um pequeno guia de instalação de pacotes<br />
*[[Extending the IDE|Extendendo a IDE]] - Como adicionar funcionalidade para a IDE do Lazarus<br />
*[[Adding Kylix Help|Adicionando a ajuda do Kylix]] - Como utilizar os arquivos de ajuda da Borland na IDE<br />
<br />
=== LCL ===<br />
<br />
*[[doc:lcl/|Documentação da LCL]] - Ajuda online da LCL (em progresso).<br />
*[[Main Loop Hooks]] - Como gerir multiplas fontes de eventos<br />
*[[Asynchronous Calls]] - Como guardar chamadas para execução futura<br />
*[[File size and smartlinking|Tamanho do executável]] - Como utilizar o smartlinking e criar executáveis pequenos.<br />
*[[Accessing the Interfaces directly|Acessando as interfaces diretamente]] - Exemplo de como acessar as interfaces da LCL<br />
*[[Add Help to Your Application|Adicionando ajuda]] - Como criar ajuda online para seus programas<br />
*[[Anchor Sides]] - Descrição das ancoras e como utiliza-las<br />
*[[LCL Tips]] - Dicas e truques<br />
*[[LCL Defines]] - Escolhendo a opção certa para compilar novamente a LCL<br />
<br />
=== Desenvolvendo ===<br />
<br />
*[[The Power of Proper Planning and Practices|O Poder do Planejamento]] - Bom-senso na programação e as melhores práticas para um desenvolvedor Free Pascal e Lazarus<br />
*[[Multiplatform Programming Guide|Guia de Programação Multiplataforma]] - Como desenvolver aplicativos independentes de plataforma<br />
*[[Using Pascal Libraries with .NET and Mono|Utilizando bibliotecas pascal com .NET e Mono]] - sim, voce pode utilizar código Free Pascal junto com .NET e Mono<br />
*[[Deploying Your Application|Distribuindo seus aplicativos]] - Como criar um instalador para seus programas<br />
*[[Cross compiling|Cross Compilação]] - Criando executáveis de uma plataforma, estando em outra.<br />
*[[Remote Debugging|Depuração Remota]] - Como depurar seu aplicativo Lazarus em outra maquina.<br />
<br />
=== Ferramentas ===<br />
<br />
*[[Lazarus Documentation Editor|Editor da Documentação do Lazarus]] - Utilizando o "lazde" para criar documentação.<br />
*[[LazDoc]] - Um editor integrado dos arquivos de documentação<br />
*[[lazbuild]] - Compilados projetos e pacotes sem a IDE<br />
<br />
=== Migrando do Delphi ===<br />
<br />
*[[Lazarus Components]] - Comparação entre os componentes do Lazarus e do Turbo Delphi<br />
*[[Lazarus For Delphi Users/pt|Lazarus para usuários do Delphi]] - Para usuários do Delphi que desejam aprender o Lazarus.<br />
*[[Code Conversion Guide/pt|Guia da Conversão de Código]] - Como converter código e componentes existentes para o Lazarus<br />
<br />
== Guia dos Desenvolvedores do Lazarus ==<br />
<br />
*[[How To Help Developing Lazarus/pt|Como Ajudar?]] - Um guia para ajudar iniciantes a começarem a melhorar o Lazarus<br />
*[[Version Numbering|Números das Versões]] - Explicação sobre a diferença entre os números de versão do Lazarus<br />
*[[Creating A Patch/pt| Criando um Patch]] - Um guia para fazer um patch com as mudanças feitas no Lazarus<br />
*[[Creating a Backtrace with GDB|Criando Backtrace com o GDB]] - Um guia para criar um backtrace para ajuda-lo a depurar seu programa<br />
*[[Nomenclature/pt|Nomenclatura]] - Guia para escolher um nome para um novo método ou propriedade<br />
*[[DesignGuidelines/pt|Linhas Gerais de Desenho]] - Um guia sobre como proceder ao mudar o código-fonte de Lazarus.<br />
*[[GUI design|Desenho de Interfaces de Usuário]] - Linhas gerais de desenvolvimento da GUI do Lazarus<br />
*[[Road To 1.0|Rumo ao 1.0]] - O que precisa ficar pronto para o Lazarus 1.0<br />
*[[Detailed Lazarus 0.9.24 todo|Pendencias da versão 0.9.24]] - Uma lista do que ainda precisa ser feito antes de lançar a versão 0.9.24 do Lazarus<br />
*[[Moderating the bug tracker|Moderando o bug tracker]] - Guias gerais para desenvolvedores Lazarus e moderadores utilizarem o [http://www.lazarus.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools]] - Como as ferramentas de código são integradas na IDE<br />
*[[Creating IDE Help|Criando a ajuda da IDE]] - Como extender a documentação da IDE<br />
*[[Unit not found - How to find units|Unit not found - Como encontrar unidades]] - Como configurar a IDE e os arquivos fontes<br />
*[[Bounties]] - Precisa de algo que o Lazarus não possuí ainda? Coloque um preço aqui.<br />
<br />
=== LCL - A biblioteca de componentes do Lazarus ===<br />
*[[LCL Messages|Mensagens da LCL]] - Um guia relacionada a mensagens da LCL.<br />
*[[LCL Internals|Por dentro da LCL]] - Informações sobre o funcionamento interno da LCL.<br />
*[[LCL Key Handling]] - Help! A key press, what now?<br />
*[[LCL Unicode Support|Suporte a Unicode na LCL]] - Rumo a um Lazarus com suporte a Unicode<br />
*[[LCL Documentation Roadmap|Mapa da documentação]] - Quais unidades ainda precisam ser documentadas<br />
<br />
=== Interfaces ===<br />
*[[GTK2 Interface|Interface Gtk2]] - Gtk2 para Unix, Mac OS X, Windows<br />
*[[Carbon Interface|Interface Carbon]] - A Interface Carbon para Mac OS X<br />
*[[Qt Interface|Interface Qt]] - A Interface Qt 4 para UNIX, Mac OS X e PDA baseados em Linux<br />
*[[Windows CE Interface|Interface Windows CE]] - Para Pocket PC e Smartphones<br />
*[[fpGUI Interface|Interface fpGUI]] - Uma biblioteca gráfica completamente escrita em Object Pascal<br />
<br />
=== Tradução ===<br />
* [[Getting translation strings right|Criando Programas]] Algumas notas para programadores interessados em criar e utilizar strings de tradução em seus aplicativos. Discute rapidamente a criação de strings, oferece algumas dicas sobre a implementação e faz algumas considerações sobre o uso do inglês como linguagem inicial, em particular.<br />
* '''Notas de Localização:'''<br />
:* [[German localization notes|Alemão]] - Notas e guia gerais para a tradução da IDE para alemão, incluindo um pequeno dicionário.<br />
:* [[Portuguese-Brazilian Localization Notes|Português]] - Pequeno dicionário contendo termos comuns utilizados na IDE e sua tradução para o português.<br />
<!-- *[[TO-DO]] Remaining Tasks --><br />
* [[Help:Add language bar/pt | Adicionar barra de idiomas]] explica como adicionar uma barra contendo uma lista de traduções no topo da página.<br />
<br />
== Documentação do Free Pascal ==<br />
Além [http://lazarus-ccr.sourceforge.net/fpcdoc/ deste website], a última versão da documentação pode ser encontrada online em vários formatos na página do Compilador [http://www.freepascal.org/docs.html Free Pascal].<br />
Agora também há uma WiKi para o FreePascal [http://www.freepascal.org/wiki/index.php/Main_Page] muito similar a esta, para permitir que os desenvolvedores enviem documentação adicional a oficial, que está abaixo.<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Guia do Usuário]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Guia do Desenvolvedor]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Guia de referencia da unidade system e construções do Pascal suportadas]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Manual de referencia da Run-Time Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Manual de referencia do Free Component Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Manual da ferramenta de documentação do Free Pascal]<br />
<br />
== Blogs relacionados ao Lazarus ==<br />
<br />
*[[Adventures of a Newbie|Aventuras de um Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23903Streaming components/pt2007-09-05T14:34:55Z<p>Aliotti: /* Lendo um componente de um stream */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre><br />
<br />
== Lendo um componente de um stream ==<br />
<br />
A unidade LResources tem a seguinte função: <br />
procedure ReadComponentFromBinaryStream(AStream: TStream;<br />
var RootComponent: TComponent; OnFindComponentClass: TFindComponentClassEvent; TheOwner: TComponent = nil);<br />
<br />
* AStream é a stream contendo um componente no formato binário.<br />
* RootComponent é qualquer componente existente, cujo os dados serão sobre-escritos, ou esse é nil(valor vazio) um componente novo será criado.<br />
* OnFindComponentClass é uma função, que é usada pelo TReader para pegar a classe a partir de classnames na stream. Por exemplo:<br />
<pre><br />
procedure TCompStreamDemoForm.OnFindClass(Reader: TReader;<br />
const AClassName: string; var ComponentClass: TComponentClass);<br />
begin<br />
if CompareText(AClassName,'TGroupBox')=0 then<br />
ComponentClass:=TGroupBox<br />
else if CompareText(AClassName,'TCheckBox')=0 then<br />
ComponentClass:=TCheckBox;<br />
end;<br />
</pre><br />
* TheOwner é o componente raiz ou dono, quando criando um novo componente.<br />
<br />
== Propriedades que podem ser guardadas num Stream ==<br />
<br />
Há algumas limitações, que tipos TReader/TWriter podem colocar no stream:<br />
<br />
* Tipos básicos podem ser armazenados na stream: string, integer, char, single, double, extended, byte, word, cardinal, shortint, method pointers, etc. .<br />
* TPersistent e seus descendentes podem ser armazenados na stream</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23902Streaming components/pt2007-09-05T14:30:01Z<p>Aliotti: /* Escrevendo um componente para uma stream */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre><br />
<br />
== Lendo um componente de um stream ==<br />
<br />
A unidade LResources tem a seguinte função: <br />
procedure ReadComponentFromBinaryStream(AStream: TStream;<br />
var RootComponent: TComponent; OnFindComponentClass: TFindComponentClassEvent; TheOwner: TComponent = nil);<br />
<br />
* AStream é a stream contendo um componente no formato binário.<br />
* RootComponent é qualquer componente existente, cujo os dados serão sobre-escritos, ou esse é nil(valor vazio) um componente novo será criado.<br />
* OnFindComponentClass é uma função, que é usada pelo TReader para pegar a classe a partir de classnames na stream. Por exemplo:<br />
<pre><br />
procedure TCompStreamDemoForm.OnFindClass(Reader: TReader;<br />
const AClassName: string; var ComponentClass: TComponentClass);<br />
begin<br />
if CompareText(AClassName,'TGroupBox')=0 then<br />
ComponentClass:=TGroupBox<br />
else if CompareText(AClassName,'TCheckBox')=0 then<br />
ComponentClass:=TCheckBox;<br />
end;<br />
</pre><br />
* TheOwner é o componente raiz ou dono, quando criando um novo componente.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23901Streaming components/pt2007-09-05T14:22:56Z<p>Aliotti: /* Escrevendo seu próprio componente - Parte 1 */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;<br />
<br />
== Escrevendo um componente para uma stream ==<br />
<br />
A unidade [[doc:lcl/lresources|LResources]] tem a seguinte função: <br />
procedure WriteComponentAsBinaryToStream(AStream: TStream; AComponent: TComponent);<br />
<br />
Ela escreve um componente no formato binário num stream.<br />
Por exemplo:<br />
<pre><br />
procedure TForm1.Button1Click(Sender: TObject);<br />
var<br />
AStream: TMemoryStream;<br />
begin<br />
AStream:=TMemoryStream.Create;<br />
try<br />
WriteComponentAsBinaryToStream(AStream,AGroupBox);<br />
... salvar a stream em algum lugar ...<br />
finally<br />
AStream.Free;<br />
end;<br />
end;<br />
</pre></div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23900Streaming components/pt2007-09-05T14:20:13Z<p>Aliotti: /* TReader / TWriter */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.<br />
<br />
== Escrevendo seu próprio componente - Parte 1 ==<br />
<br />
Um componente próprio pode ser um simples como:<br />
type<br />
TMyComponent = class(TComponent)<br />
private<br />
FID: integer;<br />
published<br />
property ID: integer read FID write FID;<br />
end;</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23899Streaming components/pt2007-09-05T14:16:02Z<p>Aliotti: /* TComponent / TPersistent */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.<br />
<br />
== TReader / TWriter ==<br />
<br />
Aqui estão as classes que iremos trabalhar, que le/escreve um componente para/de um stream (Veja CreateLRSReader e CreateLRSWriter).<br />
Eles usam um '''Driver''' para ler/escrever um especial formato. No momento aqui temos um leitor (TLRSObjectReader) e um escritor (TLRSObjectWriter) de formato binário do objeto definido na unidade LResources e um escritor (TXMLObjectWriter) para TDOMDocument definido no Laz_XMLStreaming.<br />
A unidade LResources também contém funções para converter do formato binário par textual e vice-versa (LRSObjectBinaryToText, LRSObjectTextToBinary). A LCL prefere UTF8 para strings, enquanto o Delphi prefere Widestrings. Assim há algumas funções da conversão também.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23898Streaming components/pt2007-09-05T14:06:24Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.<br />
<br />
== TComponent / TPersistent ==<br />
<br />
A classe '''TPersistent''' é definida na unidade Classes e estão utilizando a diretiva de compilação '''{$M+}'''. Esta diretiva diz ao compilado para criar o Tipo de Informação em Tempo de Execução ('''RTTI'''). Isto significa que e todos seus descendentes começam uma nova seção '''published''' da classe . Propriedades da 'Published'(difundida) são visíveis como a 'public'(pública), mas adicionalmente sua estrutura é acessível em tempo de execução. O que significa que toda propriedade difundida pode ser lida e escrita em tempo de execução. A IDE por exemplo usa este para trabalhar com componentes que nunca se ouviu.<br />
<br />
'''TComponent''' extende a habilidade de TPersistent para ter componentes filhos. Isto é importante para streaming, onde um componente é o '''root component'''(raiz) também chamado de '''lookup root''' com uma lista de componentes filho.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Streaming_components/pt&diff=23897Streaming components/pt2007-09-05T13:52:45Z<p>Aliotti: New page: == Introdução == Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade. Este tutorial de...</p>
<hr />
<div>== Introdução ==<br />
<br />
Normalmente, quando você necessita armazenar dados em disco ou rede, você deve escrever código para carregamento e o salvamento de cada propriedade.<br />
Este tutorial descreve como escrever classes, estas podem ter carregado de e conservado para os streams(fluxos) sem código extra da escrita ler/salvar usando o RTTI. <br />
<br />
Aqui tem um exemplo nos fontes do lazarus, demonstrando como salvar um TGroupBox com um TCheckBox filho para uma stream(fluxo) e ler uma stream de volta para criar uma cópia de ambos os componentes.<br />
Veja <lazaruspath>/examples/componentstreaming/<br />
<br />
Na combinação com [[RTTI controls]] você pode reduzir o tamanho de código necessário para conectar os dados do programa com a GUI e o Disco/Rede para um minímo.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_Documentation/pt&diff=23896Lazarus Documentation/pt2007-09-05T13:36:30Z<p>Aliotti: /* Tutoriais de Pascal e de Lazarus */</p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
== Tutoriais de Pascal e de Lazarus ==<br />
*[[Overview of Free Pascal and Lazarus/pt|Introdução a Free Pascal e Lazarus]] - Uma breve discussão sobre o que pode ser devenvolvido com estas ferramentas.<br />
*[[Lazarus Tutorial/pt|Tutorial do Lazarus]] - Um tutorial para iniciantes e uma descrição detalhada da IDE.<br />
*[[Lazarus IDE Tools/pt|Ferramentas da IDE]] - Um tutorial de nível intermediario sobre completamento de código e outras ferramentas da IDE.<br />
*[[Lazarus Database Tutorial/pt|Tutorial de Bancos de Dados]] - Uma introdução à utilização do Lazarus com bancos de dados.<br />
*[[Developing with Graphics/pt|Desenvolvendo com gráficos]] - Exemplos básicos envolvendo programação gráfica.<br />
*[http://www.fec.unicamp.br/reenge/aulas/pascal/ Tutorial de Pascal] da UNICAMP - Um guia para aprender a programar em Pascal.<br />
*[[TXMLPropStorage/pt|TXMLPropStorage]] - Usando TXMLPropStorage para salvar suas preferências.<br />
*[[Executing External Programs/pt|Executando Programas Externos]] - Um curto tutorial sobre executar programas externos apartir de seu aplicativo.<br />
*[[Hardware Access/pt|Acesso ao Hardware]] - Como acessar dispositivos de Hardware, tais como placas ISA, placas PCI, portas paralela e serial e USB.<br />
*[[Networking/pt|Programação para redes]] - Tutoriais sobre XML, TCP/IP Sockets, programação segura, WebServices, etc.<br />
*[[XML Tutorial/pt|Tutorial de XML]] - Escrevendo e lendo arquivos XML<br />
*[[Multithreaded Application Tutorial|Múltiplas Linhas de Execução]] - Como escrever programas que utilizam multiplas linhas de execução (Threads).<br />
*[[Streaming components/pt|Streaming components]] - Como escrever componentes para streams e leitura/criação de componentes de streams.<br />
*[[OpenGL Tutorial]] - Como utilizar GLUT no Lazarus<br />
*[[Creating bindings for C libraries]] - Como converter headers c (.h) para Pascal<br />
*[[Lazarus/FPC Libraries]] - Como criar bibliotecas dinâmicas (.so, .dll, .dynlib) e como utiliza-las<br />
<br />
== Guia para usuários do Lazarus ==<br />
<br />
*[[Lazarus Faq|Perguntas Frequentes]] - Informações gerais sobre o Lazarus e outras específicas ao Linux ou ao Windows.<br />
*[[Lazarus DB Faq/pt|FAQ de Bancos de Dados]] - Perguntas frequentes sobre o uso de bancos de dados na Lazarus.<br />
*[[Code Examples|Exemplos de código]] - Examplos de código que funciona para o Lazarus.<br />
*[[Feature_Ideas|Idéias de funcionalidades]] - Capacidades que você gostaria de ver adicionadas ao Lazarus<br />
*[[How do I create a bug report|Como reportar um bug]] - Você acredita ter descoberto um bug no Lazarus e gostaria de reporta-lo?<br />
<br />
=== Instalação ===<br />
<br />
*[[Installing Lazarus/pt|Instalando o Lazarus]] - Um guia de instalação<br />
*[[Getting Lazarus/pt|Baixando o Lazarus]] - Instruções sobre como baixar o program ou obte-lo do Subversion<br />
*[[OS X Programming Tips|Dicas para o Mac OS X]] - Instalação do Lazarus, ferramentas úteis, comandos Unix e mais...<br />
<br />
=== IDE ===<br />
<br />
*[[IDE tricks|Truques da IDE]] - Truques úteis<br />
*[[Lazarus IDE]] - As janelas da IDE<br />
*[[Lazarus Packages|Pacotes do Lazarus]] - Um guia para criar pacotes no Lazarus<br />
*[[Install Packages|Instalando Pacotes]] - Um pequeno guia de instalação de pacotes<br />
*[[Extending the IDE|Extendendo a IDE]] - Como adicionar funcionalidade para a IDE do Lazarus<br />
*[[Adding Kylix Help|Adicionando a ajuda do Kylix]] - Como utilizar os arquivos de ajuda da Borland na IDE<br />
<br />
=== LCL ===<br />
<br />
*[[doc:lcl/|Documentação da LCL]] - Ajuda online da LCL (em progresso).<br />
*[[Main Loop Hooks]] - Como gerir multiplas fontes de eventos<br />
*[[Asynchronous Calls]] - Como guardar chamadas para execução futura<br />
*[[File size and smartlinking|Tamanho do executável]] - Como utilizar o smartlinking e criar executáveis pequenos.<br />
*[[Accessing the Interfaces directly|Acessando as interfaces diretamente]] - Exemplo de como acessar as interfaces da LCL<br />
*[[Add Help to Your Application|Adicionando ajuda]] - Como criar ajuda online para seus programas<br />
*[[Anchor Sides]] - Descrição das ancoras e como utiliza-las<br />
*[[LCL Tips]] - Dicas e truques<br />
*[[LCL Defines]] - Escolhendo a opção certa para recompiler a LCL<br />
<br />
=== Desenvolvendo ===<br />
<br />
*[[The Power of Proper Planning and Practices|O Poder do Planejamento]] - Bom-senso na programação e as melhores práticas para um desenvolvedor Free Pascal e Lazarus<br />
*[[Multiplatform Programming Guide|Guia de Programação Multiplataforma]] - Como desenvolver aplicativos independentes de plataforma<br />
*[[Using Pascal Libraries with .NET and Mono|Utilizando bibliotecas pascal com .NET e Mono]] - sim, voce pode utilizar código Free Pascal junto com .NET e Mono<br />
*[[Deploying Your Application|Distribuindo seus aplicativos]] - Como criar um instalador para seus programas<br />
*[[Cross compiling|Cross Compilação]] - Criando executáveis de uma plataforma, estando em outra.<br />
*[[Remote Debugging|Depuração Remota]] - Como depurar seu aplicativo Lazarus em outra maquina.<br />
<br />
=== Ferramentas ===<br />
<br />
*[[Lazarus Documentation Editor|Editor da Documentação do Lazarus]] - Utilizando o "lazde" para criar documentação.<br />
*[[LazDoc]] - Um editor integrado dos arquivos de documentação<br />
*[[lazbuild]] - Compilados projetos e pacotes sem a IDE<br />
<br />
=== Migrando do Delphi ===<br />
<br />
*[[Lazarus Components]] - Comparação entre os componentes do Lazarus e do Turbo Delphi<br />
*[[Lazarus For Delphi Users/pt|Lazarus para usuários do Delphi]] - Para usuários do Delphi que desejam aprender o Lazarus.<br />
*[[Code Conversion Guide/pt|Guia da Conversão de Código]] - Como converter código e componentes existentes para o Lazarus<br />
<br />
== Guia dos Desenvolvedores do Lazarus ==<br />
<br />
*[[How To Help Developing Lazarus/pt|Como Ajudar?]] - Um guia para ajudar iniciantes a começarem a melhorar o Lazarus<br />
*[[Version Numbering|Números das Versões]] - Explicação sobre a diferença entre os números de versão do Lazarus<br />
*[[Creating A Patch/pt| Criando um Patch]] - Um guia para fazer um patch com as mudanças feitas no Lazarus<br />
*[[Creating a Backtrace with GDB|Criando Backtrace com o GDB]] - Um guia para criar um backtrace para ajuda-lo a depurar seu programa<br />
*[[Nomenclature/pt|Nomenclatura]] - Guia para escolher um nome para um novo método ou propriedade<br />
*[[DesignGuidelines/pt|Linhas Gerais de Desenho]] - Um guia sobre como proceder ao mudar o código-fonte de Lazarus.<br />
*[[GUI design|Desenho de Interfaces de Usuário]] - Linhas gerais de desenvolvimento da GUI do Lazarus<br />
*[[Road To 1.0|Rumo ao 1.0]] - O que precisa ficar pronto para o Lazarus 1.0<br />
*[[Detailed Lazarus 0.9.24 todo|Pendencias da versão 0.9.24]] - Uma lista do que ainda precisa ser feito antes de lançar a versão 0.9.24 do Lazarus<br />
*[[Moderating the bug tracker|Moderando o bug tracker]] - Guias gerais para desenvolvedores Lazarus e moderadores utilizarem o [http://www.lazarus.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools]] - Como as ferramentas de código são integradas na IDE<br />
*[[Creating IDE Help|Criando a ajuda da IDE]] - Como extender a documentação da IDE<br />
*[[Unit not found - How to find units|Unit not found - Como encontrar unidades]] - Como configurar a IDE e os arquivos fontes<br />
*[[Bounties]] - Precisa de algo que o Lazarus não possuí ainda? Coloque um preço aqui.<br />
<br />
=== LCL - A biblioteca de componentes do Lazarus ===<br />
*[[LCL Messages|Mensagens da LCL]] - Um guia relacionada a mensagens da LCL.<br />
*[[LCL Internals|Por dentro da LCL]] - Informações sobre o funcionamento interno da LCL.<br />
*[[LCL Key Handling]] - Help! A key press, what now?<br />
*[[LCL Unicode Support|Suporte a Unicode na LCL]] - Rumo a um Lazarus com suporte a Unicode<br />
*[[LCL Documentation Roadmap|Mapa da documentação]] - Quais unidades ainda precisam ser documentadas<br />
<br />
=== Interfaces ===<br />
*[[GTK2 Interface|Interface Gtk2]] - Gtk2 para Unix, Mac OS X, Windows<br />
*[[Carbon Interface|Interface Carbon]] - A Interface Carbon para Mac OS X<br />
*[[Qt Interface|Interface Qt]] - A Interface Qt 4 para UNIX, Mac OS X e PDA baseados em Linux<br />
*[[Windows CE Interface|Interface Windows CE]] - Para Pocket PC e Smartphones<br />
*[[fpGUI Interface|Interface fpGUI]] - Uma biblioteca gráfica completamente escrita em Object Pascal<br />
<br />
=== Tradução ===<br />
* [[Getting translation strings right|Criando Programas]] Algumas notas para programadores interessados em criar e utilizar strings de tradução em seus aplicativos. Discute rapidamente a criação de strings, oferece algumas dicas sobre a implementação e faz algumas considerações sobre o uso do inglês como linguagem inicial, em particular.<br />
* '''Notas de Localização:'''<br />
:* [[German localization notes|Alemão]] - Notas e guia gerais para a tradução da IDE para alemão, incluindo um pequeno dicionário.<br />
:* [[Portuguese-Brazilian Localization Notes|Português]] - Pequeno dicionário contendo termos comuns utilizados na IDE e sua tradução para o português.<br />
<!-- *[[TO-DO]] Remaining Tasks --><br />
* [[Help:Add language bar/pt | Adicionar barra de idiomas]] explica como adicionar uma barra contendo uma lista de traduções no topo da página.<br />
<br />
== Documentação do Free Pascal ==<br />
Além [http://lazarus-ccr.sourceforge.net/fpcdoc/ deste website], a última versão da documentação pode ser encontrada online em vários formatos na página do Compilador [http://www.freepascal.org/docs.html Free Pascal].<br />
Agora também há uma WiKi para o FreePascal [http://www.freepascal.org/wiki/index.php/Main_Page] muito similar a esta, para permitir que os desenvolvedores enviem documentação adicional a oficial, que está abaixo.<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Guia do Usuário]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Guia do Desenvolvedor]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Guia de referencia da unidade system e construções do Pascal suportadas]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Manual de referencia da Run-Time Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Manual de referencia do Free Component Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Manual da ferramenta de documentação do Free Pascal]<br />
<br />
== Blogs relacionados ao Lazarus ==<br />
<br />
*[[Adventures of a Newbie|Aventuras de um Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.</div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=23116XML Tutorial/pt2007-07-24T16:54:53Z<p>Aliotti: /* Exemplo Básico */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
<br />
Atualmente há um conjunto de unidades que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
O XML DOM (Documento de Modelo do Objeto) é um conjunto padronizações de objetos que fornece uma interface para uso em diferentes linguagens e sistemas. O padrão somente especifica os métodos, propriedades e outras partes da interface do objeto, deixando a implementação livre para diferentes linguagens. A FCL atualmente suporta completamente a [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Exemplo Básico===<br />
<br />
Vamos dizer que você precisa acessar um arquivo XML chamado: 'C:\Programas\teste.xml'. Aqui esta o conteúdo do arquivo:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
O seguinte código pode escrever o nome dos nós num objeto TMemo no formulário:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=23115XML Tutorial/pt2007-07-24T16:54:29Z<p>Aliotti: /* Basic Example */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
<br />
Atualmente há um conjunto de unidades que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
O XML DOM (Documento de Modelo do Objeto) é um conjunto padronizações de objetos que fornece uma interface para uso em diferentes linguagens e sistemas. O padrão somente especifica os métodos, propriedades e outras partes da interface do objeto, deixando a implementação livre para diferentes linguagens. A FCL atualmente suporta completamente a [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Exemplo Básico===<br />
<br />
Vamos dizer que você precisa acessar um arquivo XML chamado: 'C:\Programas\teste.xml'. Aqui esta o conteúdo do arquivo:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
O seguinte cigo pode escrever o nome dos nós num objeto TMemo no formulário:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=23114XML Tutorial/pt2007-07-24T16:46:11Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
<br />
Atualmente há um conjunto de unidades que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
O XML DOM (Documento de Modelo do Objeto) é um conjunto padronizações de objetos que fornece uma interface para uso em diferentes linguagens e sistemas. O padrão somente especifica os métodos, propriedades e outras partes da interface do objeto, deixando a implementação livre para diferentes linguagens. A FCL atualmente suporta completamente a [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Basic Example===<br />
<br />
Let´s say you want to access a XML file called 'C:\Programas\teste.xml'. Here is the file content:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
The following code can write the Node´s names to a TMemo placed on a form:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=22165XML Tutorial/pt2007-07-10T16:18:03Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
<br />
Atualmente há um conjunto de unidades que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
The XML DOM (Document Object Model) is a set of standarized objects that provide a similar interface for the use of XML on different languages and systems. The standard only specifies the methods, properties and other interface parts of the object, leaving the implementation free for different languages. The FCL currently supports fully the [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Basic Example===<br />
<br />
Let´s say you want to access a XML file called 'C:\Programas\teste.xml'. Here is the file content:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
The following code can write the Node´s names to a TMemo placed on a form:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=22163XML Tutorial/pt2007-07-10T16:17:35Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
<br />
Atualmente há um conjunto de unidade que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
The XML DOM (Document Object Model) is a set of standarized objects that provide a similar interface for the use of XML on different languages and systems. The standard only specifies the methods, properties and other interface parts of the object, leaving the implementation free for different languages. The FCL currently supports fully the [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Basic Example===<br />
<br />
Let´s say you want to access a XML file called 'C:\Programas\teste.xml'. Here is the file content:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
The following code can write the Node´s names to a TMemo placed on a form:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=XML_Tutorial/pt&diff=22162XML Tutorial/pt2007-07-10T16:17:12Z<p>Aliotti: /* Introdução */</p>
<hr />
<div>{{XML Tutorial}}<br />
<br />
=== Introdução ===<br />
<br />
A "Extensible Markup Language" é uma linguagem recomendada pela [http://www.w3.org/ W3C] para a troca de informações entre diferentes sistemas. É um formato baseado em texto de guardar informações. Linguagens modernas de troca de dados, como o XHTML, além da maioria das tecnologia de WebServices, são baseados no XML.<br />
Atualmente há um conjunto de unidade que dão suporte para o XML no Lazarus. Estas unidades são "XMLRead", "XMLWrite" e "DOM" e elas são parte da Biblioteca de Componentes Livre(FCL) do compilador Free Pascal. A FCL esta sempre presente no caminho padrão para o compilador no Lazarus, então você somente precisa adicionar as unidades na claúsula uses para ter suporte ao XML. A FCL não está com sua documentação atualizada(desde outubro de 2005), então este curto tutorial é uma introdução ao acesso a XML usando estas unidades.<br />
<br />
The XML DOM (Document Object Model) is a set of standarized objects that provide a similar interface for the use of XML on different languages and systems. The standard only specifies the methods, properties and other interface parts of the object, leaving the implementation free for different languages. The FCL currently supports fully the [http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0].<br />
<br />
===Basic Example===<br />
<br />
Let´s say you want to access a XML file called 'C:\Programas\teste.xml'. Here is the file content:<br />
<br />
<code><br />
<?xml version="1.0"?><br />
<images directory="mydir"><br />
<imageNode URL="graphic.jpg" title=""><br />
<Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca><br />
<Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca><br />
</imageNode><br />
</images><br />
</code><br />
<br />
The following code can write the Node´s names to a TMemo placed on a form:<br />
<br />
<code><br />
var<br />
Documento: TXMLDocument;<br />
i, j: Integer;<br />
begin<br />
Documento := TXMLDocument.Create;<br />
ReadXMLFile(Documento, 'C:\Programas\teste.xml');<br />
Memo.Lines.Clear;<br />
with Documento.DocumentElement.ChildNodes do<br />
begin<br />
for i := 0 to (Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);<br />
for j := 0 to (Item[i].ChildNodes.Count - 1) do<br />
begin<br />
Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '<br />
+ Item[i].ChildNodes.Item[j].NodeValue);<br />
end;<br />
end;<br />
end;<br />
Documento.Free;<br />
end;<br />
</code></div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_Documentation/pt&diff=22156Lazarus Documentation/pt2007-07-10T16:09:43Z<p>Aliotti: /* Tutoriais de Pascal e de Lazarus */</p>
<hr />
<div>{{Lazarus Documentation}}<br />
<br />
== Tutoriais de Pascal e de Lazarus ==<br />
*[[Overview of Free Pascal and Lazarus/pt|Introdução a Free Pascal e Lazarus]] - Uma breve discussão sobre o que pode ser devenvolvido com estas ferramentas.<br />
*[[Lazarus Tutorial/pt|Tutorial do Lazarus]] - Um tutorial para iniciantes e uma descrição detalhada da IDE.<br />
*[[Lazarus IDE Tools/pt|Ferramentas da IDE]] - Um tutorial de nível intermediario sobre completamento de código e outras ferramentas da IDE.<br />
*[[Lazarus Database Tutorial/pt|Tutorial de Bancos de Dados]] - Uma introdução à utilização do Lazarus com bancos de dados.<br />
*[[Developing with Graphics/pt|Desenvolvendo com gráficos]] - Exemplos básicos envolvendo programação gráfica.<br />
*[http://www.fec.unicamp.br/reenge/aulas/pascal/ Tutorial de Pascal] da UNICAMP - Um guia para aprender a programar em Pascal.<br />
*[[TXMLPropStorage/pt|TXMLPropStorage]] - Usando TXMLPropStorage para salvar suas preferências.<br />
*[[Executing External Programs/pt|Executando Programas Externos]] - Um curto tutorial sobre executar programas externos apartir de seu aplicativo.<br />
*[[Hardware Access/pt|Acesso ao Hardware]] - Como acessar dispositivos de Hardware, tais como placas ISA, placas PCI, portas paralela e serial e USB.<br />
*[[Networking/pt|Programação para redes]] - Tutoriais sobre XML, TCP/IP Sockets, programação segura, WebServices, etc.<br />
*[[XML Tutorial/pt|Tutorial de XML]] - Escrevendo e lendo arquivos XML<br />
*[[Multithreaded Application Tutorial|Múltiplas Linhas de Execução]] - Como escrever programas que utilizam multiplas linhas de execução (Threads).<br />
*[[Streaming components]] - Como escrever componentes para streams e leitura/criação de componentes de streams.<br />
*[[OpenGL Tutorial]] - Como utilizar GLUT no Lazarus<br />
*[[Creating bindings for C libraries]] - Como converter headers c (.h) para Pascal<br />
*[[Lazarus/FPC Libraries]] - Como criar bibliotecas dinâmicas (.so, .dll, .dynlib) e como utiliza-las<br />
<br />
== Guia para usuários do Lazarus ==<br />
<br />
*[[Lazarus Faq|Perguntas Frequentes]] - Informações gerais sobre o Lazarus e outras específicas ao Linux ou ao Windows.<br />
*[[Lazarus DB Faq/pt|FAQ de Bancos de Dados]] - Perguntas frequentes sobre o uso de bancos de dados na Lazarus.<br />
*[[Code Examples|Exemplos de código]] - Examplos de código que funciona para o Lazarus.<br />
*[[Feature_Ideas|Idéias de funcionalidades]] - Capacidades que você gostaria de ver adicionadas ao Lazarus<br />
*[[How do I create a bug report|Como reportar um bug]] - Você acredita ter descoberto um bug no Lazarus e gostaria de reporta-lo?<br />
<br />
=== Instalação ===<br />
<br />
*[[Installing Lazarus/pt|Instalando o Lazarus]] - Um guia de instalação<br />
*[[Getting Lazarus/pt|Baixando o Lazarus]] - Instruções sobre como baixar o program ou obte-lo do Subversion<br />
*[[OS X Programming Tips|Dicas para o Mac OS X]] - Instalação do Lazarus, ferramentas úteis, comandos Unix e mais...<br />
<br />
=== IDE ===<br />
<br />
*[[IDE tricks|Truques da IDE]] - Truques úteis<br />
*[[Lazarus IDE]] - As janelas da IDE<br />
*[[Lazarus Packages|Pacotes do Lazarus]] - Um guia para criar pacotes no Lazarus<br />
*[[Install Packages|Instalando Pacotes]] - Um pequeno guia de instalação de pacotes<br />
*[[Extending the IDE|Extendendo a IDE]] - Como adicionar funcionalidade para a IDE do Lazarus<br />
*[[Adding Kylix Help|Adicionando a ajuda do Kylix]] - Como utilizar os arquivos de ajuda da Borland na IDE<br />
<br />
=== LCL ===<br />
<br />
*[[doc:lcl/|Documentação da LCL]] - Ajuda online da LCL (em progresso).<br />
*[[Main Loop Hooks]] - Como gerir multiplas fontes de eventos<br />
*[[Asynchronous Calls]] - Como guardar chamadas para execução futura<br />
*[[File size and smartlinking|Tamanho do executável]] - Como utilizar o smartlinking e criar executáveis pequenos.<br />
*[[Accessing the Interfaces directly|Acessando as interfaces diretamente]] - Exemplo de como acessar as interfaces da LCL<br />
*[[Add Help to Your Application|Adicionando ajuda]] - Como criar ajuda online para seus programas<br />
*[[Anchor Sides]] - Descrição das ancoras e como utiliza-las<br />
*[[LCL Tips]] - Dicas e truques<br />
*[[LCL Defines]] - Escolhendo a opção certa para recompiler a LCL<br />
<br />
=== Desenvolvendo ===<br />
<br />
*[[The Power of Proper Planning and Practices|O Poder do Planejamento]] - Bom-senso na programação e as melhores práticas para um desenvolvedor Free Pascal e Lazarus<br />
*[[Multiplatform Programming Guide|Guia de Programação Multiplataforma]] - Como desenvolver aplicativos independentes de plataforma<br />
*[[Using Pascal Libraries with .NET and Mono|Utilizando bibliotecas pascal com .NET e Mono]] - sim, voce pode utilizar código Free Pascal junto com .NET e Mono<br />
*[[Deploying Your Application|Distribuindo seus aplicativos]] - Como criar um instalador para seus programas<br />
*[[Cross compiling|Cross Compilação]] - Criando executáveis de uma plataforma, estando em outra.<br />
*[[Remote Debugging|Depuração Remota]] - Como depurar seu aplicativo Lazarus em outra maquina.<br />
<br />
=== Ferramentas ===<br />
<br />
*[[Lazarus Documentation Editor|Editor da Documentação do Lazarus]] - Utilizando o "lazde" para criar documentação.<br />
*[[LazDoc]] - Um editor integrado dos arquivos de documentação<br />
*[[lazbuild]] - Compilados projetos e pacotes sem a IDE<br />
<br />
=== Migrando do Delphi ===<br />
<br />
*[[Lazarus Components]] - Comparação entre os componentes do Lazarus e do Turbo Delphi<br />
*[[Lazarus For Delphi Users/pt|Lazarus para usuários do Delphi]] - Para usuários do Delphi que desejam aprender o Lazarus.<br />
*[[Code Conversion Guide/pt|Guia da Conversão de Código]] - Como converter código e componentes existentes para o Lazarus<br />
<br />
== Guia dos Desenvolvedores do Lazarus ==<br />
<br />
*[[How To Help Developing Lazarus/pt|Como Ajudar?]] - Um guia para ajudar iniciantes a começarem a melhorar o Lazarus<br />
*[[Version Numbering|Números das Versões]] - Explicação sobre a diferença entre os números de versão do Lazarus<br />
*[[Creating A Patch/pt| Criando um Patch]] - Um guia para fazer um patch com as mudanças feitas no Lazarus<br />
*[[Creating a Backtrace with GDB|Criando Backtrace com o GDB]] - Um guia para criar um backtrace para ajuda-lo a depurar seu programa<br />
*[[Nomenclature/pt|Nomenclatura]] - Guia para escolher um nome para um novo método ou propriedade<br />
*[[DesignGuidelines/pt|Linhas Gerais de Desenho]] - Um guia sobre como proceder ao mudar o código-fonte de Lazarus.<br />
*[[GUI design|Desenho de Interfaces de Usuário]] - Linhas gerais de desenvolvimento da GUI do Lazarus<br />
*[[Road To 1.0|Rumo ao 1.0]] - O que precisa ficar pronto para o Lazarus 1.0<br />
*[[Detailed Lazarus 0.9.24 todo|Pendencias da versão 0.9.24]] - Uma lista do que ainda precisa ser feito antes de lançar a versão 0.9.24 do Lazarus<br />
*[[Moderating the bug tracker|Moderando o bug tracker]] - Guias gerais para desenvolvedores Lazarus e moderadores utilizarem o [http://www.lazarus.freepascal.org/mantis/ bug tracker].<br />
*[[Codetools]] - Como as ferramentas de código são integradas na IDE<br />
*[[Creating IDE Help|Criando a ajuda da IDE]] - Como extender a documentação da IDE<br />
*[[Unit not found - How to find units|Unit not found - Como encontrar unidades]] - Como configurar a IDE e os arquivos fontes<br />
*[[Bounties]] - Precisa de algo que o Lazarus não possuí ainda? Coloque um preço aqui.<br />
<br />
=== LCL - A biblioteca de componentes do Lazarus ===<br />
*[[LCL Messages|Mensagens da LCL]] - Um guia relacionada a mensagens da LCL.<br />
*[[LCL Internals|Por dentro da LCL]] - Informações sobre o funcionamento interno da LCL.<br />
*[[LCL Key Handling]] - Help! A key press, what now?<br />
*[[LCL Unicode Support|Suporte a Unicode na LCL]] - Rumo a um Lazarus com suporte a Unicode<br />
*[[LCL Documentation Roadmap|Mapa da documentação]] - Quais unidades ainda precisam ser documentadas<br />
<br />
=== Interfaces ===<br />
*[[GTK2 Interface|Interface Gtk2]] - Gtk2 para Unix, Mac OS X, Windows<br />
*[[Carbon Interface|Interface Carbon]] - A Interface Carbon para Mac OS X<br />
*[[Qt Interface|Interface Qt]] - A Interface Qt 4 para UNIX, Mac OS X e PDA baseados em Linux<br />
*[[Windows CE Interface|Interface Windows CE]] - Para Pocket PC e Smartphones<br />
*[[fpGUI Interface|Interface fpGUI]] - Uma biblioteca gráfica completamente escrita em Object Pascal<br />
<br />
=== Tradução ===<br />
* [[Getting translation strings right|Criando Programas]] Algumas notas para programadores interessados em criar e utilizar strings de tradução em seus aplicativos. Discute rapidamente a criação de strings, oferece algumas dicas sobre a implementação e faz algumas considerações sobre o uso do inglês como linguagem inicial, em particular.<br />
* '''Notas de Localização:'''<br />
:* [[German localization notes|Alemão]] - Notas e guia gerais para a tradução da IDE para alemão, incluindo um pequeno dicionário.<br />
:* [[Portuguese-Brazilian Localization Notes|Português]] - Pequeno dicionário contendo termos comuns utilizados na IDE e sua tradução para o português.<br />
<!-- *[[TO-DO]] Remaining Tasks --><br />
* [[Help:Add language bar/pt | Adicionar barra de idiomas]] explica como adicionar uma barra contendo uma lista de traduções no topo da página.<br />
<br />
== Documentação do Free Pascal ==<br />
Além [http://lazarus-ccr.sourceforge.net/fpcdoc/ deste website], a última versão da documentação pode ser encontrada online em vários formatos na página do Compilador [http://www.freepascal.org/docs.html Free Pascal].<br />
Agora também há uma WiKi para o FreePascal [http://www.freepascal.org/wiki/index.php/Main_Page] muito similar a esta, para permitir que os desenvolvedores enviem documentação adicional a oficial, que está abaixo.<br />
<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/user/user.html Guia do Usuário]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/prog/prog.html Guia do Desenvolvedor]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/ref/ref.html Guia de referencia da unidade system e construções do Pascal suportadas]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/rtl/index.html Manual de referencia da Run-Time Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fcl/index.html Manual de referencia do Free Component Library]<br />
*[http://lazarus-ccr.sourceforge.net/fpcdoc/fpdoc/fpdoc.html Manual da ferramenta de documentação do Free Pascal]<br />
<br />
== Blogs relacionados ao Lazarus ==<br />
<br />
*[[Adventures of a Newbie|Aventuras de um Newbie]] - A blog of a newbie getting started with some tutorial information in a running log.</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_IDE_Tools/pt&diff=18709Lazarus IDE Tools/pt2007-05-02T11:14:50Z<p>Aliotti: /* Deduzir Código (Code Completion) */</p>
<hr />
<div>{{Lazarus IDE Tools}}<br />
<br />
== Introdução ==<br />
A IDE usa uma biblioteca do código pascal analisando gramaticalmente e editando ferramentas, chamada de "codetools". Estas ferramentes dão capacidades como encontrar declaração (find declaration), completar código(code completion), extração (extraction), movendo inserindo e embelezando códigos pascal. Estas funções reduzem o seu tempo e facilitam o seu trabalho. Eles são customizáveis e cada um deles está disponível via teclas de atalho (veja Editor Options).<br />
<br />
Porque trabalham unicamente em fontes e compreendem o código do FPC, do Delphi e do Kylix, não requerem unidades compiladas nem um compilador instalado da Borland. Você pode editar Delphi e código de FPC ao mesmo tempo. Você pode mesmo trabalhar com diversos Delphi e versões de FPC ao mesmo tempo. Isto faz o código do Delphi ser portado muito mais facilmente.<br />
<br />
== Sumário da tabela de teclas de atalho da IDE ==<br />
{|<br />
|-<br />
| [[Lazarus_IDE_Tools#Find Declaration|Declaration Jumping]] || Ctrl+Click or Alt+Up (pula para a declaração do tipo ou variável)<br />
|-<br />
| [[Lazarus_IDE_Tools#Method Jumping|Method Jumping]] || Ctrl+Shift+Up (alterna entre definição e corpo)<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Templates|Code Templates]] || Ctrl+J<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Completion|Code Completion]] (Completa Classe) || Ctrl+Shift+C<br />
|-<br />
| [[Lazarus_IDE_Tools#Identifier Completion|Identifier Completion]] || Ctrl+Space<br />
|-<br />
| [[Lazarus_IDE_Tools#Word Completion|Word Completion]] || Ctrl+W<br />
|-<br />
| [[Lazarus_IDE_Tools#Parameter Hints|Parameter Hints]] || Ctrl+Shift+Space<br />
|}<br />
<br />
==Alternando no Método==<br />
Para pular entre o corpo do procedimento(begin..end) e a definição do procedimento (procedure Name;) use Ctrl+Shift+Up.<br />
<br />
Por Exemplo:<br />
interface<br />
<br />
procedure DoSomething; // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething; // procedure body <br />
begin<br />
end;<br />
<br />
Se o cursor está no corpo do procedimento e você pressionar Ctrl+Shift+Up, o cursor irá pular para a definição. Pressionando Ctrl+Shift+Up outra vez irá para o corpo, depois do 'begin'.<br />
<br />
Isto trabalha entre métodos(procedimentos nas classes) muito bem.<br />
<br />
Dicas:<br />
'Método Pulando' pula para o mesmo procedimento com o mesmo nome e parâmetros. Se não há exato procedimento, pula para melhor candidato e posiciona o cursor na primeira diferença.(o Delphi não faz isto).<br />
<br />
Por exemplo um procedimento com diferentes tipos de parâmetros:<br />
interface<br />
<br />
procedure DoSomething(p: char); // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething(p: string); // procedure body<br />
begin<br />
end;<br />
<br />
==Incluir Arquivos==<br />
Incluir arquivos como o nome diz: insere dentro dos códigos fontes com as diretivas de compilação:{$I nomedoarquivo} ou {$INCLUDE nomedoarquivo}. Lazarus e FPC usam muitas coisas para reduzir a redundância e evita {$IFDEF} ilegíveis construções para suportar diferentes plataformas.<br />
<br />
Ao contrário do Delphi, a IDE do Lazarus tem total suporte a inclusão de arquivos. Você pode por exemplo pular do método no arquivo .pas para o seu corpo no arquivo incluído. Todas as ferramentas de códigos como a de completar o código consideram arquivos incluídos como áreas especiais.<br />
<br />
Por exemplo: Quando completar o código adiciona um corpo novo do método atrás de um outro corpo do método, mantém ambos na mesmo arquivo. Esta maneira você pode pôr a implementação da classe dentro de arquivos incluídos, como o LCL faz para quase todos os controles.<br />
<br />
"Mas há uma armadilha para novatos: Se você abrir um arquivo incluído pela a primeira vez e tentar o método que salta ou acha a declaração você irá ter um erro. O IDE não sabe a que unidade o arquivo incluído pertence. Você deve abrir a unidade primeiramente.<br />
<br />
Assim que o IDE analisar a unidade, analisará as diretrizes orientadoras incluídas aqui e o IDE recordará este relacionamento. Salvando esta informação na saída e no projeto salva em ~/.lazarus/includelinks.xml. A próxima vez que você abre este arquivo incluído e saltar ou faça localizar a declaração, o IDE abrirá internamente a unidade e o salto trabalhará.<br />
<br />
É claro que este mecanismo tem seus limites. Alguns arquivos incluídos o são duas ou mais. Por exemplo:lcl/include/winapih.inc.<br />
<br />
Saltar das definições de procedimento/método neste arquivo incluído aos corpos depende de suas últimas ações. Se você trabalhar em lcl/lclintf.pp o IDE saltará a winapi.inc. Se você trabalhou em lcl/interfacebase.pp, então saltará a lcl/include/interfacebase.inc (ou a um do outro arquivo incluído). Se você estiver trabalhando em ambos, a seguir você pode ficar confundindo.;)<br />
<br />
==Code Templates - Moldes de Código==<br />
"Code Templates" converte um identificador em um texto ou fragmento de código.<br />
<br />
Code Templates tem como tecla de atalho por padrão: Ctrl+J. Você pode escrever um identificador, pressione Ctrl+J e o identificador é substituído pelo texto definido para o identificador. Os Code Templates podem ser definidos no Environment -> Editor Options -> CodeTools. <br />
<br />
Exemplo:<br />
Escreva um identificador 'classf', deixe o cursor à direita sobre o 'f' e pressione Ctrl+J. A 'classf' irá ser substituida por<br />
T = class(T)<br />
private<br />
<br />
public<br />
constructor Create;<br />
destructor Destroy; override;<br />
end;<br />
e o cursor fica atrás do 'T'. <br />
Você pode pegar a lista de templates posicionando o cursor no espaço em branco(não é um identificador) e pressionando a tecla Ctrl+J. A lista de code templates irá aparecer numa janela a parte. Use as teclas do cursor ou digite alguns caracteres para escolher um.<br />
Pressionando Enter cria-se o template selecionado e Escape(ESC) fecha a janela aberta dos templates.<br />
<br />
O grande redutor de tempo é o template 'b'+Ctrl+J para begin..end.<br />
<br />
==Sugestão de Parâmetros==<br />
<br />
Sugestão de parâmetros exibe uma caixa com as declarações dos parâmetros da lista corrente de parâmetros.<br />
<br />
Por exemplo<br />
<br />
Canvas.FillRect(|);<br />
<br />
Posicione o cursor entre os parenteses e pressione Ctrl+Shift+Space. Uma caixa de sugestões irá aparecer exibindo os parâmetros de FillRect.<br />
<br />
==Deduzir Código (Code Completion) ==<br />
Deduzir código pode ser encontrado no menu da IDE em Edit -> Complete Code e tem por padrão o atalho de teclado: Ctrl+Shift+C.<br />
<br />
Para os Programadores Delphi:<br />
Delphi chama "deduzir código" a função exibe a lista de identificadores na posição atual da fonte (Ctrl+Space). Sob Lazarus isto é chamado do "completando identificador".<br />
<br />
Deduzir código combina várias funções poderosas. Exemplos:<br />
* Deduzir Classe : completa propriedades, adiciona corpos aos métodos, adiciona variáveis e métodos de acesso privados<br />
* Deduzir procedimento antecipadamente: adiciona corpo ao procedimento<br />
* Deduzir associação de evento: completa associação de evento e adicina definição de método e seu corpo<br />
* Deduzir declaração de variável: adiciona definição da variável local<br />
* Reversa dedução da classe: adiciona declaração de um método para seu corpo.<br />
<br />
Que função é usada, depende da posição do cursor no editor.<br />
<br />
Deduzir código pode ser encontrado na IDE menu Edit -> Complete Code e tem o atalho de teclado por padrão: Ctrl+Shift+C.<br />
<br />
===Deduzir Classe (Class Completion)===<br />
<br />
A mais poderosa ferramenta de dedução de código é a de "Deduzir Classe"(Class Completion). Você escreve uma classe, adiciona os métodos e propriedades e a ferramenta irá adicionar o corpo dos métodos, os métodos de acesso as propriedades/variáveis e as variáveis privadas.<br />
<br />
Por exemplo: Crie uma classe (veja Moldes de Código - Code Templates para salvar como um tipo de trabalho): <br />
<br />
TExample = class(TObject)<br />
public<br />
constructor Create;<br />
destructor Destroy; override;<br />
end;<br />
Posicione o cursor em algum lugar na classe e pressione Ctrl+Shift+C. Isto irá criar os corpos dos métodos não encontrados e mover o cursor para o primeiro corpo de método criado, então você somente inicia escrevendo o código da classe: <br />
<br />
{ TExample }<br />
<br />
constructor TExample.Create;<br />
begin<br />
|<br />
end;<br />
<br />
destructor TExample.Destroy;<br />
begin<br />
inherited Destroy;<br />
end;<br />
Nota: O '|' é o cursor e não é adicionado. <br />
<br />
Dica: Você pode pular entre o método e seu corpo com Ctrl+Shift+Up. <br />
<br />
Você pode ver, que a IDE adicionou o 'inherited Destroy' também. Isto é feito, se na definição do método da classe tiver 'override'. <br />
<br />
Agora Adicione o método DoSomething: <br />
<br />
TExample = class(TObject)<br />
public<br />
constructor Create;<br />
procedure DoSomething(i: integer);<br />
destructor Destroy; override;<br />
end;<br />
Then press Ctrl+Shift+C and the IDE will add <br />
<br />
procedure TExample.DoSomething(i: integer);<br />
begin<br />
|<br />
end;<br />
Você pode ver, que o novo método é inserido entre o Create e Destroy, exatamente como na definição da classe. Este caminho os corpos mantém a mesma ordenação exata de suas definições na classe. Você pode definir a política de inserção no Environment > Codetools Options -> Code Creation. <br />
<br />
'''Deduzir Propriedades'''<br><br />
Adicione uma propriedade AnInteger:<br />
TExample = class(TObject)<br />
public<br />
constructor Create;<br />
procedure DoSomething(i: integer);<br />
destructor Destroy; override;<br />
property AnInteger: Integer;<br />
end;<br />
Pressione Ctrl+Shift+C e você irá ter:<br />
procedure TExample.SetAnInteger(const AValue: integer);<br />
begin<br />
|if FAnInteger=AValue then exit;<br />
FAnInteger:=AValue;<br />
end;<br />
A ferramente de deduzir código terá adicionado um acesso de escrita(método e seu corpo) e adicionado algum código.<br />
Pule para a classe com Ctrl+Shift+Up para ver a nova classe:<br />
TExample = class(TObject)<br />
private<br />
FAnInteger: integer;<br />
procedure SetAnInteger(const AValue: integer);<br />
public<br />
constructor Create;<br />
procedure DoSomething(i: integer);<br />
destructor Destroy; override;<br />
property AnInteger: integer read FAnInteger write SetAnInteger;<br />
end;<br />
A propriedade foi extendida pelos acessos de leitura e escrita. A classe recebeu uma nova seção 'private' com uma variável 'FAnInteger' e o método 'SetAnInteger'.<br />
<br />
<br />
...para fazer</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_IDE_Tools/pt&diff=18707Lazarus IDE Tools/pt2007-05-02T10:49:45Z<p>Aliotti: /* Deduzir Código (Code Completion) */</p>
<hr />
<div>{{Lazarus IDE Tools}}<br />
<br />
== Introdução ==<br />
A IDE usa uma biblioteca do código pascal analisando gramaticalmente e editando ferramentas, chamada de "codetools". Estas ferramentes dão capacidades como encontrar declaração (find declaration), completar código(code completion), extração (extraction), movendo inserindo e embelezando códigos pascal. Estas funções reduzem o seu tempo e facilitam o seu trabalho. Eles são customizáveis e cada um deles está disponível via teclas de atalho (veja Editor Options).<br />
<br />
Porque trabalham unicamente em fontes e compreendem o código do FPC, do Delphi e do Kylix, não requerem unidades compiladas nem um compilador instalado da Borland. Você pode editar Delphi e código de FPC ao mesmo tempo. Você pode mesmo trabalhar com diversos Delphi e versões de FPC ao mesmo tempo. Isto faz o código do Delphi ser portado muito mais facilmente.<br />
<br />
== Sumário da tabela de teclas de atalho da IDE ==<br />
{|<br />
|-<br />
| [[Lazarus_IDE_Tools#Find Declaration|Declaration Jumping]] || Ctrl+Click or Alt+Up (pula para a declaração do tipo ou variável)<br />
|-<br />
| [[Lazarus_IDE_Tools#Method Jumping|Method Jumping]] || Ctrl+Shift+Up (alterna entre definição e corpo)<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Templates|Code Templates]] || Ctrl+J<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Completion|Code Completion]] (Completa Classe) || Ctrl+Shift+C<br />
|-<br />
| [[Lazarus_IDE_Tools#Identifier Completion|Identifier Completion]] || Ctrl+Space<br />
|-<br />
| [[Lazarus_IDE_Tools#Word Completion|Word Completion]] || Ctrl+W<br />
|-<br />
| [[Lazarus_IDE_Tools#Parameter Hints|Parameter Hints]] || Ctrl+Shift+Space<br />
|}<br />
<br />
==Alternando no Método==<br />
Para pular entre o corpo do procedimento(begin..end) e a definição do procedimento (procedure Name;) use Ctrl+Shift+Up.<br />
<br />
Por Exemplo:<br />
interface<br />
<br />
procedure DoSomething; // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething; // procedure body <br />
begin<br />
end;<br />
<br />
Se o cursor está no corpo do procedimento e você pressionar Ctrl+Shift+Up, o cursor irá pular para a definição. Pressionando Ctrl+Shift+Up outra vez irá para o corpo, depois do 'begin'.<br />
<br />
Isto trabalha entre métodos(procedimentos nas classes) muito bem.<br />
<br />
Dicas:<br />
'Método Pulando' pula para o mesmo procedimento com o mesmo nome e parâmetros. Se não há exato procedimento, pula para melhor candidato e posiciona o cursor na primeira diferença.(o Delphi não faz isto).<br />
<br />
Por exemplo um procedimento com diferentes tipos de parâmetros:<br />
interface<br />
<br />
procedure DoSomething(p: char); // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething(p: string); // procedure body<br />
begin<br />
end;<br />
<br />
==Incluir Arquivos==<br />
Incluir arquivos como o nome diz: insere dentro dos códigos fontes com as diretivas de compilação:{$I nomedoarquivo} ou {$INCLUDE nomedoarquivo}. Lazarus e FPC usam muitas coisas para reduzir a redundância e evita {$IFDEF} ilegíveis construções para suportar diferentes plataformas.<br />
<br />
Ao contrário do Delphi, a IDE do Lazarus tem total suporte a inclusão de arquivos. Você pode por exemplo pular do método no arquivo .pas para o seu corpo no arquivo incluído. Todas as ferramentas de códigos como a de completar o código consideram arquivos incluídos como áreas especiais.<br />
<br />
Por exemplo: Quando completar o código adiciona um corpo novo do método atrás de um outro corpo do método, mantém ambos na mesmo arquivo. Esta maneira você pode pôr a implementação da classe dentro de arquivos incluídos, como o LCL faz para quase todos os controles.<br />
<br />
"Mas há uma armadilha para novatos: Se você abrir um arquivo incluído pela a primeira vez e tentar o método que salta ou acha a declaração você irá ter um erro. O IDE não sabe a que unidade o arquivo incluído pertence. Você deve abrir a unidade primeiramente.<br />
<br />
Assim que o IDE analisar a unidade, analisará as diretrizes orientadoras incluídas aqui e o IDE recordará este relacionamento. Salvando esta informação na saída e no projeto salva em ~/.lazarus/includelinks.xml. A próxima vez que você abre este arquivo incluído e saltar ou faça localizar a declaração, o IDE abrirá internamente a unidade e o salto trabalhará.<br />
<br />
É claro que este mecanismo tem seus limites. Alguns arquivos incluídos o são duas ou mais. Por exemplo:lcl/include/winapih.inc.<br />
<br />
Saltar das definições de procedimento/método neste arquivo incluído aos corpos depende de suas últimas ações. Se você trabalhar em lcl/lclintf.pp o IDE saltará a winapi.inc. Se você trabalhou em lcl/interfacebase.pp, então saltará a lcl/include/interfacebase.inc (ou a um do outro arquivo incluído). Se você estiver trabalhando em ambos, a seguir você pode ficar confundindo.;)<br />
<br />
==Code Templates - Moldes de Código==<br />
"Code Templates" converte um identificador em um texto ou fragmento de código.<br />
<br />
Code Templates tem como tecla de atalho por padrão: Ctrl+J. Você pode escrever um identificador, pressione Ctrl+J e o identificador é substituído pelo texto definido para o identificador. Os Code Templates podem ser definidos no Environment -> Editor Options -> CodeTools. <br />
<br />
Exemplo:<br />
Escreva um identificador 'classf', deixe o cursor à direita sobre o 'f' e pressione Ctrl+J. A 'classf' irá ser substituida por<br />
T = class(T)<br />
private<br />
<br />
public<br />
constructor Create;<br />
destructor Destroy; override;<br />
end;<br />
e o cursor fica atrás do 'T'. <br />
Você pode pegar a lista de templates posicionando o cursor no espaço em branco(não é um identificador) e pressionando a tecla Ctrl+J. A lista de code templates irá aparecer numa janela a parte. Use as teclas do cursor ou digite alguns caracteres para escolher um.<br />
Pressionando Enter cria-se o template selecionado e Escape(ESC) fecha a janela aberta dos templates.<br />
<br />
O grande redutor de tempo é o template 'b'+Ctrl+J para begin..end.<br />
<br />
==Sugestão de Parâmetros==<br />
<br />
Sugestão de parâmetros exibe uma caixa com as declarações dos parâmetros da lista corrente de parâmetros.<br />
<br />
Por exemplo<br />
<br />
Canvas.FillRect(|);<br />
<br />
Posicione o cursor entre os parenteses e pressione Ctrl+Shift+Space. Uma caixa de sugestões irá aparecer exibindo os parâmetros de FillRect.<br />
<br />
==Deduzir Código (Code Completion) ==<br />
Deduzir código pode ser encontrado no menu da IDE em Edit -> Complete Code e tem por padrão o atalho de teclado: Ctrl+Shift+C.<br />
<br />
Para os Programadores Delphi:<br />
Delphi chama "deduzir código" a função exibe a lista de identificadores na posição atual da fonte (Ctrl+Space). Sob Lazarus isto é chamado do "completando identificador".<br />
<br />
Deduzir código combina várias funções poderosas. Exemplos:<br />
* Deduzir Classe : completa propriedades, adiciona corpos aos métodos, adiciona variáveis e métodos de acesso privados<br />
* Deduzir procedimento antecipadamente: adiciona corpo ao procedimento<br />
* Deduzir associação de evento: completa associação de evento e adicina definição de método e seu corpo<br />
* Deduzir declaração de variável: adiciona definição da variável local<br />
* Reversa dedução da classe: adiciona declaração de um método para seu corpo.<br />
<br />
Que função é usada, depende da posição do cursor no editor.<br />
<br />
Deduzir código pode ser encontrado na IDE menu Edit -> Complete Code e tem o atalho de teclado por padrão: Ctrl+Shift+C.<br />
<br />
...para fazer</div>Aliottihttps://wiki.freepascal.org/index.php?title=Lazarus_IDE_Tools/pt&diff=18706Lazarus IDE Tools/pt2007-05-02T10:49:12Z<p>Aliotti: /* Deduzir Código (Complete Code) */</p>
<hr />
<div>{{Lazarus IDE Tools}}<br />
<br />
== Introdução ==<br />
A IDE usa uma biblioteca do código pascal analisando gramaticalmente e editando ferramentas, chamada de "codetools". Estas ferramentes dão capacidades como encontrar declaração (find declaration), completar código(code completion), extração (extraction), movendo inserindo e embelezando códigos pascal. Estas funções reduzem o seu tempo e facilitam o seu trabalho. Eles são customizáveis e cada um deles está disponível via teclas de atalho (veja Editor Options).<br />
<br />
Porque trabalham unicamente em fontes e compreendem o código do FPC, do Delphi e do Kylix, não requerem unidades compiladas nem um compilador instalado da Borland. Você pode editar Delphi e código de FPC ao mesmo tempo. Você pode mesmo trabalhar com diversos Delphi e versões de FPC ao mesmo tempo. Isto faz o código do Delphi ser portado muito mais facilmente.<br />
<br />
== Sumário da tabela de teclas de atalho da IDE ==<br />
{|<br />
|-<br />
| [[Lazarus_IDE_Tools#Find Declaration|Declaration Jumping]] || Ctrl+Click or Alt+Up (pula para a declaração do tipo ou variável)<br />
|-<br />
| [[Lazarus_IDE_Tools#Method Jumping|Method Jumping]] || Ctrl+Shift+Up (alterna entre definição e corpo)<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Templates|Code Templates]] || Ctrl+J<br />
|-<br />
| [[Lazarus_IDE_Tools#Code Completion|Code Completion]] (Completa Classe) || Ctrl+Shift+C<br />
|-<br />
| [[Lazarus_IDE_Tools#Identifier Completion|Identifier Completion]] || Ctrl+Space<br />
|-<br />
| [[Lazarus_IDE_Tools#Word Completion|Word Completion]] || Ctrl+W<br />
|-<br />
| [[Lazarus_IDE_Tools#Parameter Hints|Parameter Hints]] || Ctrl+Shift+Space<br />
|}<br />
<br />
==Alternando no Método==<br />
Para pular entre o corpo do procedimento(begin..end) e a definição do procedimento (procedure Name;) use Ctrl+Shift+Up.<br />
<br />
Por Exemplo:<br />
interface<br />
<br />
procedure DoSomething; // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething; // procedure body <br />
begin<br />
end;<br />
<br />
Se o cursor está no corpo do procedimento e você pressionar Ctrl+Shift+Up, o cursor irá pular para a definição. Pressionando Ctrl+Shift+Up outra vez irá para o corpo, depois do 'begin'.<br />
<br />
Isto trabalha entre métodos(procedimentos nas classes) muito bem.<br />
<br />
Dicas:<br />
'Método Pulando' pula para o mesmo procedimento com o mesmo nome e parâmetros. Se não há exato procedimento, pula para melhor candidato e posiciona o cursor na primeira diferença.(o Delphi não faz isto).<br />
<br />
Por exemplo um procedimento com diferentes tipos de parâmetros:<br />
interface<br />
<br />
procedure DoSomething(p: char); // procedure definition<br />
<br />
implementation<br />
<br />
procedure DoSomething(p: string); // procedure body<br />
begin<br />
end;<br />
<br />
==Incluir Arquivos==<br />
Incluir arquivos como o nome diz: insere dentro dos códigos fontes com as diretivas de compilação:{$I nomedoarquivo} ou {$INCLUDE nomedoarquivo}. Lazarus e FPC usam muitas coisas para reduzir a redundância e evita {$IFDEF} ilegíveis construções para suportar diferentes plataformas.<br />
<br />
Ao contrário do Delphi, a IDE do Lazarus tem total suporte a inclusão de arquivos. Você pode por exemplo pular do método no arquivo .pas para o seu corpo no arquivo incluído. Todas as ferramentas de códigos como a de completar o código consideram arquivos incluídos como áreas especiais.<br />
<br />
Por exemplo: Quando completar o código adiciona um corpo novo do método atrás de um outro corpo do método, mantém ambos na mesmo arquivo. Esta maneira você pode pôr a implementação da classe dentro de arquivos incluídos, como o LCL faz para quase todos os controles.<br />
<br />
"Mas há uma armadilha para novatos: Se você abrir um arquivo incluído pela a primeira vez e tentar o método que salta ou acha a declaração você irá ter um erro. O IDE não sabe a que unidade o arquivo incluído pertence. Você deve abrir a unidade primeiramente.<br />
<br />
Assim que o IDE analisar a unidade, analisará as diretrizes orientadoras incluídas aqui e o IDE recordará este relacionamento. Salvando esta informação na saída e no projeto salva em ~/.lazarus/includelinks.xml. A próxima vez que você abre este arquivo incluído e saltar ou faça localizar a declaração, o IDE abrirá internamente a unidade e o salto trabalhará.<br />
<br />
É claro que este mecanismo tem seus limites. Alguns arquivos incluídos o são duas ou mais. Por exemplo:lcl/include/winapih.inc.<br />
<br />
Saltar das definições de procedimento/método neste arquivo incluído aos corpos depende de suas últimas ações. Se você trabalhar em lcl/lclintf.pp o IDE saltará a winapi.inc. Se você trabalhou em lcl/interfacebase.pp, então saltará a lcl/include/interfacebase.inc (ou a um do outro arquivo incluído). Se você estiver trabalhando em ambos, a seguir você pode ficar confundindo.;)<br />
<br />
==Code Templates - Moldes de Código==<br />
"Code Templates" converte um identificador em um texto ou fragmento de código.<br />
<br />
Code Templates tem como tecla de atalho por padrão: Ctrl+J. Você pode escrever um identificador, pressione Ctrl+J e o identificador é substituído pelo texto definido para o identificador. Os Code Templates podem ser definidos no Environment -> Editor Options -> CodeTools. <br />
<br />
Exemplo:<br />
Escreva um identificador 'classf', deixe o cursor à direita sobre o 'f' e pressione Ctrl+J. A 'classf' irá ser substituida por<br />
T = class(T)<br />
private<br />
<br />
public<br />
constructor Create;<br />
destructor Destroy; override;<br />
end;<br />
e o cursor fica atrás do 'T'. <br />
Você pode pegar a lista de templates posicionando o cursor no espaço em branco(não é um identificador) e pressionando a tecla Ctrl+J. A lista de code templates irá aparecer numa janela a parte. Use as teclas do cursor ou digite alguns caracteres para escolher um.<br />
Pressionando Enter cria-se o template selecionado e Escape(ESC) fecha a janela aberta dos templates.<br />
<br />
O grande redutor de tempo é o template 'b'+Ctrl+J para begin..end.<br />
<br />
==Sugestão de Parâmetros==<br />
<br />
Sugestão de parâmetros exibe uma caixa com as declarações dos parâmetros da lista corrente de parâmetros.<br />
<br />
Por exemplo<br />
<br />
Canvas.FillRect(|);<br />
<br />
Posicione o cursor entre os parenteses e pressione Ctrl+Shift+Space. Uma caixa de sugestões irá aparecer exibindo os parâmetros de FillRect.<br />
<br />
==Deduzir Código (Code Completion) ==<br />
Deduzir código pode ser encontrado no menu da IDE em Edit -> Complete Code e tem por padrão o atalho de teclado: Ctrl+Shift+C.<br />
<br />
Para os Programadores Delphi:<br />
Delphi chama "deduzir código" a função exibe a lista de identificadores na posição atual da fonte (Ctrl+Space). Sob Lazarus isto é chamado do "completando identificador".<br />
<br />
Deduzir código combina várias funções poderosas. Exemplos:<br />
* Deduzir Classe : completa propriedades, adiciona corpos aos métodos, adiciona variáveis e métodos de acesso privados<br />
* Deduzir procedimento antecipadamente: adiciona corpo ao procedimento<br />
* Deduzir associação de evento: completa associação de evento e adicina definição de método e seu corpo<br />
* Deduzir declaração de variável: adiciona definição da variável local<br />
* Reversa dedução da classe: adiciona declaração de um método para seu corpo.<br />
<br />
Que função é usada, depende da posição do cursor no editor.<br />
<br />
Deduzir código pode ser encontrado naIDE menu Edit -> Complete Code e tem o atalho de teclado por padrão: Ctrl+Shift+C.<br />
<br />
...para fazer</div>Aliotti