sexta-feira, 16 de março de 2012

Configurando CGI no servidor Quick n Easy

A configuração de servidores Web para executar CGIs é um trabalho aborrecido, pois os produtores deste segmento de software se preocupam com tecnologias muito novas, e se esquecem do tão útil, consagrado, eficiente e seguro CGI (se for bem feito, e se estiver atrás de um Firewall bom).

É preciso entrar no software gerenciador e acessar a opção de menu e depois a aba de CGI:


Se não for possível ler os parâmetros, vamos repetí-los aqui:

Extension: exe

Interpreter: C:\Windows\system\cmd.exe /c

Experimente agora executar CGIs.

Lazarus Pascal - Criando componentes - II

No post anterior ( Lazarus Pascal - Criando componentes - II ) discutimos o protótipo da classe TGeraHtml. Agora falta realmente colocar funcionalidades nesta classe que será um componente.

Vamos criar duas variáveis PRIVADAS (private) que armazenarão o texto de HTML gerado em duas formas:


  • A forma de lista de strings;
  • A forma de texto inteiro (uma só string);


Estas variáveis são FHTMLDoc (formato de lista de strings) e FHTMLText (uma só string inteiriça). Para seguir o padrão do Lazarus usamos a letra "F" antecedendo os nomes das variáveis privadas.

E na seção Published da classe definimos a propriedade DocumentoHtml com o tipo TStringList, que lê ou devolve o parâmetro FHTMLDoc.

O pacote para o componente

Vamos então criar um pacote para este componente:


É mostrada uma tela de diálogo onde colocamos a unidade do componente (UComponente_GeraHtml.pas) através do botão Add:


Pressione o botão Compile e depois Install (1a. vez) ou Use => Install (2a. vez em diante).

Após o Install, se tudo der certo, o Lazarus vai reiniciar.

Coloque este componente em um formulário, e observe o Object Inspector:


Observe que apenas pela declaração de uma propriedade TStringList (DocumentoHtml) já aparece o botão que aciona o editor de código. No entanto, ele ainda não é operacional pelo fato de necessitar de acréscimos para funcionar.

O construtor da classe

Os métodos e propriedades funcionais aparecem no Object Inspector, mas para que funcionem corretamente, é preciso que o componente tenha um construtor. Deixamos de colocá-lo para mostrar a sua necessidade:



No construtor é preciso declarar a herança do construtor da classe imediatamente superior (TComponent) expresso na variável AOwner de chamada. Repare que no construtor fizemos a inicialização do campo de tipo TStringList, pois isto é necessário para que se consiga invocar o editor de código ao se pressionar o botão "..." ao lado do campo. Recompilamos o pacote e instalamos.

Quando clicamos no botão "...'" aparece o Editor abaixo:


Erros

No entanto, você vai obter erros para acessar este editor e até para gravar algum formulário com este componente incorporado. Apesar da propriedade DocumentoHtml ser do tipo TStringList, vamos optar pelo tipo TStrings e fazer a sua atribuição no construtor por um método acessor considerando sim o tipo como TStringList. Portanto, devemos proceder às seguintes alterações:



Caso a visibilidade desta imagem não o satisfaça, vamos enumerar o que fizemos:


  • A variável FHTMLDoc, que armazena o valor da propriedade DocumentoHtml, foi declarada como TStrings;
  • Declaramos um método acessor (procedure setHtmlDoc) que envia um valor do tipo TStrings;
  • Modificamos o tipo da propriedade DocumentoHtml para TStrings;
  • Colocamos o método acessor para ajustar a propriedade DocumentoHtml;
  • No construtor, criamos a variável que armazena a propriedadeDocumentoHtml como TStringList, apesar de ela ser do tipo TStrings;
  • No método acessor, utilizamos a procedure Assign do tipo TStrings;


Desta forma, o componente não mais dá o erro de Access violation até para salvar um formulário onde foi colocado este componente.







quinta-feira, 15 de março de 2012

Lazarus Pascal - Criando componentes - I

Sem enrolação, vamos explicar detalhadamente a criação de componentes no novo e excelente Lazarus Pascal (0.9.30.2).

Unit

O componente é baseado numa Unit. Como até esta versão do Lazarus não temos uma template de componente, teremos que:

Criar uma nova Unit (File => New Unit) e através do Project Inspector tirá-la do projeto.

Este é o corpo default de uma unit:


Vamos compor uma classe que será INCORPORADA à paleta de componentes do Lazarus para uso posterior. Ela será algo útil como um gerador de códigos HTML. Na maior parte de seus métodos obteremos como resultado (retorno de função) código HTML gerado.

A classe

Os componentes são expressos em forma de classes Pascal que se conectam ao framework do Lazarus para poderem ser incluídos em formulários Lazarus.

O nome de nossa classe será TGeraHtml. Desta forma, seu protótipo dentro de uma Unit Lazarus. Desta forma, o protótipo de nossa classe será:

O nome da classe leva a letra "T" antes do nome para ficar dentro do padrão Lazarus. O componente é uma extensão da classe TComponent (é óbvio). O protótipo de TComponent já carrega consigo uma série de interfaces que o tornam adequado a ser incluído em um formulário.

Procedimento de registro

Para ser incorporado à paleta de componentes do Lazarus, o componente precisa ter um método de registro na paleta, dando a forma final do protótipo de componentes do Lazarus Pascal.


Repare que salvamos a Unit com um nome sugestivo, e que por isto o Lazarus altera seu nome na cláusula Unit.

Este é o protótipo básico do componente.