32
Fevereiro 2010

The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010

Page 2: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010

Page 3: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 03

.NETBanco de Dados

Interoperabilidade COM - Silverlight comunicando com o Skype 20Autor: Djontas Tenfen

Desafio The Club

.NET

- Dicas Delphi

29Dicas

- Cruzada

30

Delphi

índiceUsando JavaScrip no Delphi Prism

Editorial Delphi

09Agora sim o ano vai começar!Carnaval passou, quem pulou, pulou; quem não pulou que dê seus pulos... 04

Criando um Windows Service em Delphi 2010

05Interbase e Firebird com UDFs - Torne seu banco mais poderoso 16

JQuery com ASP.NET - Utilizando o plub lightbox e criando popup com TIckbox 24

LegendaInicianteIntermediárioAvançado

Autor: Luciano Pimenta

Autor: Felipe Santos Autor: Luis Alexandre

Autor: Antonio Spitaleri

Page 4: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201004

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Marcos César Silva - Editor [email protected]

Agora sim o ano vai começar!

Carnaval passou, quem pulou, pulou; quem não pulou que dê seus pulos.

O mês de fevereiro é um mês atípico, um mês de muita festa e que passa muito rápido. Espere um pouco... Eu disse atípico? Esqueçam, ainda estou sobe forte efeito das marchinhas.

Nessa edição temos a “vorta dos que não foi” (quem não entender acesse o site charges.com.br e veja as charges do Tonin) com o colunista Luiz Alexandre que após merecidas férias nos escreve sobre ”JQuery com ASP.NET - Utilizando o plub lightbox e criando popup com TIckbox” onde ele mostra de maneira objetiva como fazer um popup com efeito utilizando os recursos do ASP.NET e JQuery.

Nosso consultor técnico Antonio Spitaleri Neto nos mostra como criar e configurar um serviço do Windows na matéria “Criando um Windows Service em Delphi 2010”.

Na matéria de capa Luciano Pimenta nos dá dicas de como tirar proveito do JavaScript utilizando o DelphiPrism.

Na seção sobre banco de dados a matéria “Interbase & Firebird com UDFs – torne seu banco mais poderoso” do colunista Felipe Santos nos mostra o exemplo de UDFs gratuitas, de fácil utilização e com várias funções para utilizarmos em nossas aplicações.

Djonatas Tenfen nos mostra no artigo “Interoperabilidade COM - Silverli-ght comunicando com o Skype” a capicidade de comunicação do silverlight com outras bibliotecas.

Além claro das dicas Delphi e do nosso “Desafio The Club” para testar o conhecimento de nossos leitores.

Espero que gostem de nossa edição de carnaval da The Club - Mega-zine.

Grande abraço!

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3

www.twitter.com/theclubbr

Copyright The Club Megazine 2009

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoTassiane Fileto

ColunistasAntonio Spitaleri Neto

Bruno NascimentoDjonatas TenfenFelipe Santos

Luciano PimentaLuis Alexandre de Oliveira

Impressão e acabamento:GRIL - Gráfica e Editora

Taquarituba-SP - Tel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

Page 5: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 05

Delphi

Geralmente, utilizamos a plataforma Del-phi para criar aplicações na forma tradicional de executáveis, os famosos “.exe”, que podem ser instalados em um computador ou serem iniciados através da abertura do arquivo, sem a necessidade de serem instalados.

Aplicações na forma de executável requerem que o usuário inicie a mesma e a finalize quando a desejar. É claro que isso nem de longe é uma limitação, pois o usuário é quem deve decidir quando necessita utilizar um aplicativo.

Em algumas situações, porém, necessi-tamos que um determinado aplicativo seja iniciado pelo próprio Windows do que pelo usuário do computador .

Para exemplificar essa situação, imagine um sistema comercial que atue em conjunto com um sistema de logs, para armazenar informações do que os usuários fizeram no sistema. Nesse caso não é interessante que a tarefa de iniciar esse sistema de logs fique a cargo do usuário, e sim que seja iniciada junto com o Windows.

É para essa situação que existem os Windows Services, que são aplicativos que

iniciam juntamente com o Windows.Um bom exemplo de aplicação desse tipo é o servidor de banco de dados Firebird.

Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando o Delphi 2010. Mãos à obra!

Iniciando a Aplicação

Abra o Delphi 2010 e acesse o menu File – New –Other, selecione Delphi projects e escolha o template Service Application:

Veja a imagem 1.

Criando um Windows Service em Delphi 2010

Imagem 1.

Page 6: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201006

Será criada a “janela” de nosso serviço, na verdade é apenas um espaço onde colocaremos os componentes que farão parte de nosso serviço, porém é importante lembrar que são componentes não visuais, já que o serviço rodará em “back-ground” na máquina.

Nosso serviço fará uma espécie de monitora-mento das ações dos usuários em um programa de acesso a dados que criaremos mais tarde.

Esse monitoramento será feito a partir da leitura de arquivos texto.Portanto nosso serviço conterá funções simples de leitura de arquivos baseadas em TStringlist.

Selecione a janela da aplicação, será mostrado no Object Inspector, as propriedades de nosso serviço, as mais importantes são:

Name- Nome do serviço que estamos criando. Não pode ser igual ao DisplayName. Nesse exemplo utilizarei SRVMONITORDB.

AllowPause e AllowStop- Essas duas propriedades vem marcadas por default como true, o que permite que o usuário inicie e pare o serviço manualmente através do painel de controle do Windows. Manterei as duas nesse exemplo como true.

Dependencies- Aqui é possível definir serviços dos quais o serviço que estamos criando irá depender. Para isso, é necessário clicar sobre o botão “...” ao lado da proprie-dade e incluir o nome dos serviços dos quais o nosso irá depender. Nesse exemplo não utilizarei dependências.

DisplayName- Esse é o nome que irá aparecer no gerenciador de serviços do Win-dows. Em nosso exemplo utilizarei o nome MONITORDB.

StartType- Aqui é definido como nosso serviço será iniciado, se automaticamente (stauto) ou manualmente pelo usuário (stma-nual). Para nosso exemplo defina stauto.

Se você desejar que o serviço esteja associado a uma conta de usuário, defina em ServiceStartName e Password o nome de usuário e a senha aos quais o serviço estará vinculado.

Codificando o serviço

Para que nosso serviço funcione continua-mente até que seja interrompido pelo usuário, precisamos fazer com que a thread que gerencia

procedure TService1.ServiceExecute(Sender: TService);begin while not Terminated do ServiceThread.ProcessRequests(true);end;

o serviço seja mantida em atividade, para isso, no evento onexecute do serviço, faça:

Veja o Código 1.

Com esse código, enquanto o serviço estiver ativo, as rotinas que ele executa continuarão em execução.

Iremos agora criar a rotina que irá monitorar o banco de dados através de arquivo texto. Essa rotina irá buscar por um arquivo texto em um diretório predeterminado e caso encontre fará a leitura e posterior gravação de seus dados em arquivos XML.

Segue o código: Veja o Código 2.

procedure TSRVMONITORDB.MonitorLog;var Vlog:TStringList;begin try try if(FileExists(‘C:\MONITORDB\log.txt’))then begin

// Caso o arquivo esperado esteja na pasta, cria o xml com a data // e hora da alteração. // Repare que o xml é montado como um arquivo texto normal

Vlog:=TStringList.Create; Vlog.Add(‘<?xml version=”1.0” encoding=”UTF-8” ?>’); Vlog.Add(‘<dadosalteracao>’); Vlog.Add(Format(‘<%s>%s</%s>’,[‘datahora’,datetimetostr(Now),’/datahora’])); Vlog.Add(‘</dadosalteracao>’); Vlog.SaveToFile(‘C:\MONITORDB\log’+Formatdatetime(‘dd—mm—yyyy hh—mm--ss’,Now)+’.xml’); DeleteFile(‘C:\MONITORDB\log.txt’); end else begin // Caso não encontre o arquivo gera o arquivo de texto faillog com // a data e hora

Vlog:=TStringList.Create; Vlog.Add(‘Arquivo não encontrado’); Vlog.SaveToFile(‘C:\MONITORDB\faillog’+FormatDateTime(‘dd—mm-yyyy hh-mm-ss’,Now)+’.txt’); end; except

Código 1

Código 2

Page 7: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 07

// Em caso de ocorrer um erro na execução do serviço, gera // um log desse erro em formato texto com a data e hora do erro

on E:Exception do begin if(Vlog<>nil)then begin Vlog.Add(‘Erro: ‘+e.Message); Vlog.SaveToFile(‘C:\erro’+ FormatDateTime(‘dd—mm-yyyy hh-mm-ss’,Now)+’.txt’); end else begin Vlog:=TStringList.Create; Vlog.Add(‘Erro: ‘+e.Message); Vlog.SaveToFile(‘C:\erro’+ FormatDateTime(‘dd—mm-yyyy hh-mm-ss’,Now)+’.txt’); end; end; end; finally FreeAndNil(Vlog); end;end;

Inclua na janela do serviço um componente timer e em seu evento ontimer, chame essa proce-dure que acabamos de criar. Ajuste o intervalo do timer para 5000, ou seja a cada 5 segundos nosso serviço irá verificar o diretório monitorado e gerar o log caso o arquivo seja encontrado.

No evento onstart de nosso serviço iremos verificar se o diretório a ser utilizado para os logs já existe e caso não exista criaremos esse diretório.Além disso dispararemos o timer.

Veja o Código 3.

Salve as alterações.

Instalando o serviço

Com nosso serviço devidamente criado, iremos agora instalá-lo para que ele funcione corretamente.

Salve o projeto do serviço Delphi com o nome de MONITORDB. Em seguida clique em Project- Build MONITORDB. Copie o executável do projeto na pasta C:\Windows, em seguida vá em Iniciar – Executar e digite cmd para abrir o prompt de co-mando do Windows. Digite os seguintes comandos na sequência:

cd C:\WINDOWSMONITORDB.exe /install

Se tudo deu certo, será exibida uma mensa-gem: “Service installed succesfully”.

Criando a aplicação de banco de dados

Chegou a hora de criarmos a aplicação que irá interagir com o banco de dados e será monitorada pelo serviço que acabamos de criar.

No exemplo irei utilizar o banco de dados de exemplo que acompanha o Firebird, chamado employee. Sinta-se à vontade para utilizar outro banco se desejar. Os métodos e rotinas utilizados funcionarão da mesma forma.

No Delphi 2010, vá ao menu File –New – VCL

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);begin if not(DirectoryExists(‘C:\MONITORDB’)) then ForceDirectories(‘C:\MONITORDB’); Timer1.enabled:=True;End;

Forms Application.

Inclua na aplicação os componentes neces-sários para conexão ao banco da aba DBExpress e DataAccess:

SQLConnection, SQLDataSet, DataSetProvi-der, Clientdataset.

Faça a conexão ao banco da forma padrão. Não abordarei detalhes da conexão por não ser o foco do artigo.

A aplicação deverá ficar com o layout seme-lhante ao da figura:

Código 2

Código 3

Page 8: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201008

O objetivo de criarmos essa aplicação é para que toda vez que alterarmos algo no banco de dados, ou inserirmos algum dado, seja gerado um log dessa ação pelo serviço que criamos.

Para isso, utilizaremos o evento afterpost do componente Clientdataset, onde iremos criar o arquivo texto que está sendo esperado pelo serviço que criamos.

Segue o código:

Veja o Código 4.

Como você pôde reparar, o arquivo texto que estamos criando não necessita ter nenhum conte-údo, já que será apagado pelo serviço logo após o log ter sido gerado.

Salve as alterações e teste o aplicativo.

Se tudo estiver fucionando corretamente será gerado na pasta monitorada pelo serviço um arqui-vo XML com os dados do log. Esse arquivo poderá ser acessado via Tstringlist ou Txmldocument em uma aplicação Delphi

Conclusão

Vimos nesse artigo mais um recurso do Delphi 2010. Com a possibilidade de criarmos serviços Windows, podemos, com a mesma lógica utilizada em aplicações Win32, criar aplicações de background para monitoramento de sistemas além de outras finalidades que podem ser aplicadas a esses serviços.

Espero que tenham gostado e até a próxima!

procedure TForm1.ClientDataSet1AfterPost(DataSet: TDataSet);var arquivo:TStringList;begin try try TClientDataSet(DataSet).ApplyUpdates(0); arquivo:=TStringList.Create; arquivo.SaveToFile(‘C:\MONITORDB\log.txt’); except Abort; end; finally FreeAndNil(arquivo); end;end;

Código 4

Consultor Técnico The Club.

Sobre o autor

Antonio Spitaleri Neto

[email protected]

Page 9: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 09

Mostrarei neste artigo, algumas dicas de como usar JavaScript em aplicações ASP.NET, usando o Delphi Prism. Muitos desenvolve-dores, ao iniciarem sua jornada no ASP.NET, querem que os projetos sejam semelhantes aos projetos desktop.

Com algum código JavaScript, podemos simular determinadas situações, mas deixo claro, que nem tudo é possível realizar no ASP.NET igual ao desktop, pois são plataformas diferentes (Web e Win32).

Neste artigo, veremos algumas dicas e técnicas para encapsular algumas chamadas de funções do JavaScript para usar em mais de um projeto ASP.NET.

Criando o projeto ASP.NET

Crie um projeto ASP.NET no Delphi Prism, dan-do o nome de “DicasJS”. Veremos duas maneiras de usar o código JavaScript na aplicação, sendo uma

Usando JavaScript no Delphi Prism

no código ASPX outra no código Delphi.

Adicione dois botões na página da aplicação ASP.NET, colocando o Caption como “ASPX” e “Delphi”, respectivamente. No primeiro exemplo, vamos criar uma função no código ASPX para ser chamada pelo botão. Acesse o arquivo ASPX da página e adicione o código da Listagem 1 após o elemento <body>.

Nota: Tome cuidado, pois o JavaScript é case-sensitive.

Listagem 1. Criando um método JavaScript

<script language=”javascript=”>function Message (){ alert(‘Mensagem do JavaScript - ASPX’);}</script>

Para exibir essa mensagem no botão ASPX, no Page_Load do formulário, adicione o seguinte código:

Button1.Attributes.Add(‘onclick’, ‘javascript:AlertMessage()’);

Para o segundo botão, vamos adicionar có-digo no PAS. Use o código da Listagem 2 no Click do botão.

Listagem 2. Usando mensagem JavaScript no PAS

uses System.Text;...begin var aScript: StringBuilder := new StringNuilder();

Page 10: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201010

aScript.Append(‘<script language=”JavaScript”>’); aScript.Append(‘alert(‘’Mensagem do JavaScript - Delphi’’);’); aScript.Append(‘</script>’); if not Page.IsClientScriptBlockRegistered(‘client’) then Page.RegisterClientScriptBlock(‘client’, aScript.ToString);end;

No código anterior, declaremos uma variável do tipo StringBuilder e fizemos uma concatenação de strings criando uma função do JavaScript. Note que nesse caso, não precisamos dar um nome para a mesma (se desejar, pode criar a mesma assinatura do método, como mostramos na Listagem 1).

No final, verificamos se o script não foi regis-trado pela página e então, registramos o mesmo, mostrando a mensagem ao usuário. O valor do parâmetro do IsClientScriptBlockRegistered e RegisterClientScriptBlock é uma chave, portanto coloque o valor que desejar. Execute a aplicação e clique nos botões para exibir as mensagens (Figura 1).

Veja a figura 1 Você também pode colocar o código direta-

mente na propriedade Atributtes do Button:

Button1.Attributes.Add(‘onclick’, ‘alert(‘’Mensagem do JavaScript’’);’);Objeto window

Uma das técnicas mais procuradas pelos de-senvolvedores é para abrir uma nova janela. Para isso, temos que usar o método open do objeto window, que possui vários parâmetros, sendo pos-sível configurar menus, barras de botões, barra de status da nova janela.

No link msdn2.microsoft.com/en-us/library/ms536651.aspx temos a descrição de todos os

Figura 1. Mensagens do JavaScript no ASP.NET

parâmetros do open. Adicione um novo botão no formulário e crie uma nova página. No ASPX da pri-meira página, adicione mais uma função JavaScript, conforme o código da Listagem 3.

Listagem 3. Chamando o open do objeto window

function OpenWindow(){ window.open(‘Default2.aspx’, ‘’, ‘channelmode=yes, resizable=no, fullscreen=no, width=300, height=300’);}

Além da página do nosso projeto (Default2.aspx), podemos passar uma URL para o parâme-tro:

window.open(‘http://www.theclub.com.br’, ‘’, ‘channelmode=yes, resizable=no, fullscreen=no, width=300, height=300’);

Novamente no Page_Load, adicione o seguinte

código, que vai chamar a função JavaScript:

Button3.Attributes.Add(‘onclick’, ‘javascript:OpenWindow()’);

Veja na Figura 2 a aplicação com as janelas do projeto e com o site da The Club.

Veja a figura 2.

As características dos parâmetros são:

• resizable: evita que a janela seja redimensionada (veja que na janela do site não pudemos “rolar” a mesma);

• fullscreen: se a janela aparecerá no tamanho definido pelas propriedades width e height. Se fullscreen for igual a yes ou 1, os valores das propriedades são ignorados;

• menubar: exibe ou não a barra de me-nus;

• scrollbars: exibe ou não as barras verti-cais e horizontais;

• status: exibe ou não a barra de status (rodapé);

• toolbar: exibe ou não a barra de ferra-mentas (botões);

• height e width: tamanho da janela;• left e top: posição da janela.Veja que você pode personalizar em muita a

janela do browser.

Page 11: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 11

Figura 2. Abrindo páginas do projeto e sites

Janelas de consultas

Com as informações que temos até aqui, já podemos incrementar nossa aplicação ASP.NET, por exemplo, criando um tela de consulta, que será separada da janela da aplicação, semelhante a que temos em aplicações desktop.

Vamos criar uma nova página e criar uma tela de cadastro semelhante a Figura 3.

Veja a Figura 3.

Nota: Podemos utilizar as facilidades de telas de cadastro no Delphi Prism, usando os controles FormView e DetailsView. Apenas para fins didáticos, resolvi fazer o cadastro “na mão”.

Esta fora do escopo do artigo, as configurações de banco e componentes. Os fontes estarão dis-poníveis para download e na internet (site da The Club), temos vários artigos e dicas mostrando como conectar ao banco em aplicações ASP.NET.

O banco de dados foi criado para o artigo, possuindo duas tabelas apenas (CLIENTE e DEPEN-DENTE). A idéia é ter uma pesquisa no cadastro de Clientes e outras duas no cadastro de Dependentes (uma para o dependente e outra para o cliente).

Lembrando que a aplicação será semelhante a desktop na funcionalidade de trazer apenas um registro por vez, daí a necessidade da pesquisa.

Crie uma nova página e dê o nome de “pes-quisacliente.aspx”. Nessa página, vamos adicionar alguns componentes, como podemos ver na Figura 4, responsáveis pela entrada dos dados de pesquisa e exibição do resultado.

Veja a figura 4.

O campo Selecionar do GridView é do tipo CommandField>Select e estamos adicionando as colunas via editor (Figura 5).

Veja a Figura 5.

No Localizar do cadastro de clientes, vamos utilizar novamente JavaScript para chamar a tela de pesquisa, usando o código da Listagem 4.

Figura 3. Tela de cadastro de exemplo

Figura 4. Tela de pesquisa do cliente

Page 12: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201012

Listagem 4. Chamando a página de pesquisa de clientes

var aScript: StringBuilder;begin aScript := new StringBuilder(); aScript.Append(‘<script language=”JavaScript”>’); aScript.Append(‘window.open(“pesquisacliente.aspx”,’); aScript.Append(‘””, “channelmode=yes, ‘); aScript.Append(‘resizable=no,fullscreen=0,status=yes ‘); aScript.Append(‘width=500, height=500”)’); aScript.Append(‘</script>’); if not Page.IsClientScriptBlockRegistered(‘client’) then Page.RegisterClientScriptBlock(‘client’, aScript.ToString);end;

Não esqueça de adicionar no uses o namespa-ce System.Text. Lembre-se que o navegador pode bloquear a página pensando ser um popup. Você pode incrementar a tela de pesquisa, paginando o GridView.

Retornando o registro escolhido

OK, tudo legal, mas como retornar o registro que escolhi na tela de consulta? Como você verá no código-fonte, armazenamos o código da tabela (idCliente) em uma variável de sessão (poderia ser uma QueryString - onde iríamos configurar a mesma na chamada da tela de cadastro, cookie etc), assim, basta armazenar na mesma o código escolhido no GridView.

E ao clicar no registro escolhido, quero que a janela seja fechada e o item atualizado no cadastro. Nesse caso, voltamos a usar JavaScript chamando o close do window, com o código da Listagem 5 no evento SelectedIndexChanged do GridView.

Figura 5. Editor para adicionar as colunas do Grid

Listagem 5. Fechando a janela de consulta

var aScript: StringBuilder;begin { Passa para a session o código do cliente } Session[‘id’] := GridView1.SelectDataKey[GridView1.SelectIndex]; aScript := new StringBuilder(); aScript.Append(‘<script language=”JavaScript”>’); aScript.Append(‘window.opener.location = “cliente.aspx”;’); aScript.Append(‘window.close()’); aScript.Append(‘</script>’); if not Page.IsClientScriptBlockRegistered(‘client’) then Page.RegisterClientScriptBlock(‘client’, aScript.ToString);end;

Primeiro, preenchemos uma variável de sessão com o código do cliente, escolhido no GridView. Após, o window.opener.location faz um redirecio-namento para a página de cadastro e o window.close fecha a janela.

Para entender melhor, no formulário de ca-dastro, no Page_Load é verificado se a variável de seção esta preenchida, então é feito a consulta no banco com o código da mesma. Veja o resultado na Figura 6.

Veja a Figura 6.

Preenchendo controles

Depois da pesquisa, poderíamos, por exemplo, preencher um TextBox com o nome do usuário es-colhido no GridView. No cadastro de dependentes temos uma consulta para o Cliente (o Dependente tem um cliente vinculado). Então, veja na Figura 7 um exemplo do cadastro de dependentes.

Veja a Figura 7.

Você deve estar se perguntando, vou ter de fa-zer outra tela de pesquisa? Se não, como fazer para saber quando é o cadastro de clientes e quando é o de dependentes? Simples, use uma QueryString, variável de sessão, cookie para indicar de onde a

Page 13: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 13

Figura 6. Fazendo a busca do cadastro

Figura 7. Cadastro de dependentes

tela de pesquisa foi chamada.

Vamos preencher o TextBox com o nome do cliente escolhido na tela de pesquisa. Para isso, devemos chamar a tela de pesquisa no cadastro de dependentes usando o código a seguir:

...aScript.Append( ‘window.open(“pesquisacliente.aspx?act=dep”,’);aScript.Append(‘””, “channelmode=yes, ‘);aScript.Append(‘resizable=no,fullscreen=0,status=yes ‘);

No Selecionar do GridView, devemos alterar o código para o da Listagem 6, que verifica o for-mulário que chamou (QueryString chamada act) a tela de pesquisa e executa o código de acordo com a opção.

Listagem 6. Verificando a página chamadora

... aScript.Append(‘<script language=”JavaScript”>’);if Request.QueryString[‘act’] = ‘dep’ thenbegin aScript.Append(‘window.opener.document.forms[0]’); aScript.Append(‘[“txtCliente”].value =”’ + GridView1.SelectedRow.Cells[1].Text + ‘”; ‘);endelse aScript.Append(‘window.opener.location = “cliente.aspx”;’);

aScript.Append(‘window.close()’);...

Veja que modificamos a página que deve ser redirecionada e utilizamos a coleção de controles

da página que chamou (forms[0]), passando o nome do controle que queremos preencher, nesse caso, o txtCliente.

Note também que não redirecionamos para a página de dependentes, pois queremos apenas preencher o controle e não atualizar a página (isso deve ser feito na pesquisa de dependentes, como fizemos no de clientes). Atente para o nome correto do controle, em seguida, continuamos com

o código normal.

Ao executar a aplicação basta localizar o cliente na mesma tela de pesquisas usada no cadastro, e ver que o valor escolhido pelo usuário esta sendo preenchido no TextBox da página de cadastro (Figura 8).

Veja a Figura 8.

Figura 8. Preenchendo controles

Page 14: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201014

Trabalhando com calendário

O exemplo com calendário é bastante parecido com o exemplo anterior, mas o que diferencia, é que podemos formatar a data de retorno e não precisamos validar a data do usuário. Adicionei um ImageButton ao lado do campo Data de Nascimen-to no cadastro de clientes.

Criei uma nova página com um calendário formatado. O código para chamar o formulário é o mesmo usado para a pesquisa. No calendário, vamos usar o código da Listagem 7, no evento SelectionChanged do Calendar.

Listagem 7. Evento SelectionChanged do Calendar

var aData: string; aScript: StringBuilder;begin aData := String.Format(‘{0:dd/MM/yyyy}’, Calendar1.SelectedDate); aScript := new StringBuilder(); aScript.Append(‘<script language=”JavaScript”>’); aScript.Append(‘window.opener.document.forms[0]’); aScript.Append(‘[“txtData”].value=”’+ aData + ‘”; window.close();’); aScript.Append(‘</script>’); if not Page.IsClientScriptBlockRegistered(‘client’) then Page.RegisterClientScriptBlock(‘client’, aScript.ToString);end;

Se preferir, pode colocar o código anterior, em um botão. Formatamos a data escolhida através do String.Format, utilizando o formato dd/MM/yyyy. Agora, você tem um calendário para que o usuário escolha a data, sem precisar validar a mesma (basta desabilitar o controle para que o usuário não digite a data escolhida), como podemos ver na Figura 9.

Veja a Figura 9.

Customizações

Colocar o código JavaScript no Delphi pode ser um pouco cansativo, então, o que acha de customizarmos alguns métodos? Para executar um determinado bloco de código, chamar o método de caixa de mensagem, abrir uma janela com open etc.

Veja no código da Listagem 8 a customização de alguns métodos para que possamos utilizá-los de uma maneira mais fácil na aplicação, usando uma unit separada, por exemplo.

Listagem 8. Customização dos métodos

method OpenWindow (aPage: System.Web.UI.Page; aRedirect, aWidth, aHeight: string);var aScript: StringBuilder;begin { abre uma nova janela do browser } aScript := new StringBuilder(); aScript.Append(‘<script language=”JavaScript”>’); aScript.Append(‘window.open(“’+ aRedirect + ‘”, ‘);

aScript.Append(‘””, “resizable=no, menubar=no, ‘); aScript.Append(‘scrollbars=yes, status=yes, ‘); aScript.Append(‘left=350, top=150, width=’+ aWidth + ‘, height=’ + aHeight + ‘”)’); aScript.Append(‘</script>’); if not aPage.IsClientScriptBlockRegistered(‘client’) then aPage.RegisterClientScriptBlock(‘client’, aScript.ToString);end;

method ExecuteScript (aPage: System.Web.UI.Page;aScript: string);var Script: StringBuilder;begin { Execute script passado como parâmetro } Script := new StringBuilder(); Script.Append(‘<script language=”JavaScript”>’); Script.Append(aScript); Script.Append(‘</script>’); if not aPage.IsClientScriptBlockRegistered(‘client’) then

Figura 9. Escolhendo a data e desabilitando o controle

Page 15: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 15

aPage.RegisterClientScriptBlock(‘client’, Script.ToString);end;

method MessageScript(aPage: System.Web.UI.Page; aTexto: string);var Script: StringBuilder;begin { mensagem com JavaScript } Script := new StringBuilder(); Script.Append(‘<script language=”JavaScript”>’); Script.Append(‘alert(“’+ aTexto + ‘”);’); Script.Append(‘</script>’); if not aPage.IsClientScriptBlockRegistered(‘client’) then aPage.RegisterClientScriptBlock(‘client’, Script.ToString);end;

Veja que poupamos bastante código ao custo-mizar os métodos, por exemplo, no OpenWindow passamos a página a ser exibida, bem como o tamanho da mesma. Veja na Listagem 9, exemplos de utilização dos métodos criados.

Listagem 9. Exemplos de chamadas dos métodos

Mostra a caixa de mensagemif Update then MessageScript(Page, ‘Atualização realizada com sucesso!’);

Executa o script passado como parâmetroExecuteScript(Page, ‘window.opener.document.forms[0]’+ ‘[“txtData”].value=”’+ aData + ‘”; window.close();’);

Abre a janela de localizar clientesOpenWindow(Page, ‘pesquisacliente.aspx’, ‘600’, ‘450’);

Também poderiamos criar uma biblioteca de métodos JavaScript, usando um arquivo do tipo JS. Dentro de cada página ASPX (ou em uma Master-Page), devemos indicar a referencia do arquivo JS, usando o seguinte exemplo:

<script type=”text/javascript” src=”LibJS.js”></script>

Conclusão

Vimos neste artigo, algumas dicas de JavaScript para ser adicionadas em aplicações ASP.NET com Delphi Prism. Vale lembrar que alguns navegadores podem ter incompatibilidade com o código. Os testes realizados utilizaram somente o Internet Explorer 8.

Portanto, é válido testar a sua aplicação em outros navegadores, antes de colocar a mesma para a utilização dos usuários do site. Um grande abraço a todos e até a próxima!

É Técnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicações Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4ª edição da Borland Conference (BorCon).

Autor de mais de 60 artigos e de mais de 300 vídeos aulas publicadas em revistas e sites especializados. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados. É desenvolvedor da Paradigma Web Bussi-ness em Florianópolis-SC.

Sobre o autor

Luciano Pimenta

www.lucianopimenta.net

Page 16: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201016

Olá pessoal,

Estamos de volta esse mês com um tema bem interessante: UDFs (User Defined Functions). Um objeto utilizado pelos bancos de dados InterBase e Firebird que amplia nossa capacidade de interação com queries. Apesar de ser bem conhecido por qualquer desenvolvedor desses bancos, tenho notado que o uso das UDFs é pouco difundido. Muitos preferem escrever suas funções nas aplica-ções ao invés de utilizar as funções diretas no banco. Claro que existem casos e casos, mas quando podemos simplesmente trabalhar com o resultado prontinho do banco, nossa tarefa fica muito mais fácil.

Nesse artigo quero trazer o exemplo de uso de duas UDFs padrões de mercado, gratuitas, de fácil utilização e que trazem uma extensa gama de funções que podemos usar em nossas aplicações, queries, stored procedures, triggers e views.

INTERBASE & FIREBIRD COM UDFs

TORNE SEU BANCO MAIS PODEROSO

UDF - DEFINIÇÃO

As Users Defined Functions, ou simplesmente UDFs, nada mais são do que bibliotecas que distri-buímos com nossos bancos de dados, que contém o corpo de uma ou várias funções. Essas funções nós podemos utilizar em nossas queries, stored procedures, triggers e views.

As UDFs podem ser escritas por qualquer linguagem de programação que tenha suporte às bibliotecas compartilhadas, com exceção do JAVA – linguagem ainda não suportada nativamente pelos bancos InterBase e Firebird (por enquanto!).

Seu uso mais comum é em funções que trabalham e tratam com Strings, campos Data, Numéricos, ou funções de controle.

As UDFs trazem como maior benefício o ganho de performance, já que não precisamos carregar as informações do lado client para processar e tratar os dados. A tarefa pesada fica por conta do servidor, o que otimiza muito o processo.

E é claro, o fato de podermos reutilizar uma única função já declarada no banco em todos os nossos sistemas, melhorando nossa produtivi-dade.

Podemos criar nossas próprias UDFs ou utilizar UDFs já disponíveis no mercado. Se utilizarmos funções de mercado, verifique sempre se essa UDFs é mantida por uma empresa ou por um projeto já estável, garantindo o suporte futuro às suas funções.

Para mais informações de como escrever suas próprias UDFs, acessa referência que indico no final desse artigo.

INSTALANDO A UDF E DECLARANDO AS FUNÇÕES

Tanto no InterBase quanto no Firebird, a instalação da UDF é um processo simples. Basta seguir os passos:

Page 17: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 17

1. Se o serviço do banco de dados esti-ver ativo, pare o mesmo.

2. Copie sua UDF, o arquivo DLL para a pasta UDF existente no diretório de instalação do seu banco de dados (E.: C:\ARQUIVOS DE PROGRAMAS\INTERBASE\UDF).

a. No caso do Firebird, existem algumas configurações avançados do uso de UDFs que podem ser feitas no arquivo de configuração do Firebird – firebird.conf – presente no diretório raiz da sua instalação. Essas configu-rações são referentes à permissão de acesso e segurança do diretório de uso das UDF.

b. Em caso de servidores Linux, utilize /opt/interbase/UDF.

c. Lembrando também que, para sis-temas operacionais diferentes de Windows, sua UDF deve estar compilada para rodar no sistema operacional onde o seu banco de da-dos estiver rodando. Assim, UDFs para Linux, por exemplo, são sempre no padrão “.so”.

3. Reinicie o serviço do banco de da-dos.

4. Abra seu(s) banco(s) de dados e de-clare suas funções UDFs, utilizando comandos padrão DLL.

Dependendo da sua UDF, diversas funções es-tarão disponíveis, mas é preciso declará-las em seus bancos de dados para poder utilizá-las. Lembrando sempre que, para que suas funções funcionem, sua UDF deve estar presente no diretório correto, caso contrário você receberá uma exception informando que não foi possível a execução da mesma. Parece até estranho falar isso, mas é comum ver situações em que, por exemplo, o cliente troca de servidor, troca de sistema operacional, instala tudo certinho e esquece de copiar suas UDFs.

Para declarar suas funções, utilize a seguinte sintaxe:

DECLARE EXTERNAL FUNCTION name [datatype|CSTRING (int) [, datatype | CSTRING (int) ...]]

RETURNS {datatype [BY VALUE] | CSTRING (int) | PARAMETER n}[FREE_IT]ENTRY_POINT ‘entryname’MODULE_NAME ‘modulename’;

Basicamente definimos o nome da função, os parâmetros de entrada e saída, o entry point, ou seja, o ponto de chamada da função dentro da sua UDF e o nome da sua UDF sem a extensão. Se você trabalha com múltiplos bancos de dados, deve declarar suas funções em todos os bancos, um a um.

Uma vez que a sua UDF está instalada corre-tamente, vamos mostrar a seguir mostrar detalhes de duas UDFs muito utilizadas, que suportam todas as plataformas de InterBase e Firebird – a IBUDF e a FreeAdHocUDF. Como declarar e utilizar suas principais funções, assim como mostrar aplicações interessantes das mesmas.

A IbUDF

É a UDF padrão do InterBase e acompanha a instalação do produto. Você irá encontrar na pasta <interbase>/examples/udf o script ibudf.sql. Nesse script já estão as declarações de todas as funções que a IbUDF oferece. Você pode rodar o script todo ou selecionar apenas as funções que deseja utilizar e rodar suas declarações separada-mente. Abaixo seguem suas principais funções e exemplos de uso:

Função Lower – Dado um determinado valor string, a função retorna essa string em lowercase, todas minúsculas. Declaração:

DECLARE EXTERNAL FUNCTION lowerCSTRING(80)RETURNS CSTRING(80) FREE_ITENTRY_POINT ‘IB_UDF_lower’ MODULE_NAME ‘ib_udf’;

Exemplo de uso: Crie uma trigger que irá salvar o campo E-mail do cadastro de clientes sempre em letras minúsculas, independente da forma que o cliente digitou:

Create Trigger BI_CLIENTES for ClientesActive Before Insert Position 0As Begin

new.email = lower(new.email); End

Função SubStr – Dado um determinado valor string, a função retorna a uma substring começan-do pelo caractere X e terminando no caractere Y. Declaração:

DECLARE EXTERNAL FUNCTION SUBSTRCSTRING(80), SMALLINT, SMALLINTRETURNS CSTRING(80) FREE_ITENTRY_POINT ‘IB_UDF_substr’ MODULE_NAME ‘ib_udf’;

Exemplo de uso: Você possui uma coluna de nomes de clientes do tipo Varchar (50) e precisa portar esses nomes para outra tabela, em uma coluna do tipo Varchar(40). Utilize a função SubStr para isso:

Insert into New_Table (Nome_Cliente) Select substr(Nome,1,40) from Clientes;

Além dessas duas, a IbUDF muitas outras fun-ções, em especial as funções matemáticas para cál-culos de Tangente, Seno, Cosseno, Raiz Quadrada, enfim. Consulte também nosso guia de referência indicado ao final para mais informações.

A FreeAdHocUDF

Em minha opinião essa é a mais completa UDF de mercado, com mais de 540 funções disponíveis. Criada em 2004 por um grupo de desenvolvedores alemães, você pode encontrá-la no site:

Page 18: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201018

http://www.freeadhocudf.org/index_eng.html

Ao fazer o download da FreeAdHoc você irá encontrar uma dll para cada plataforma desejada – InterBase e Firebird / Windows, Linux, Solaris e MacOS, bem como os scripts de declaração de todas suas funções.

A FreeAdHoc possui funções para tratar de tudo um pouco: Strings, Numéricos, Data e Hora, Blobs, Conversão de Valores, MD5, Constantes, e mais. Vamos ver algumas de suas funções e exem-plos práticos de uso:

Função F_Replace – Dado um determinado valor string, a função localiza uma substring e substitui por uma nova string que você escolher. Declaração.

DECLARE EXTERNAL FUNCTION F_REPLACECSTRING(254),CSTRING(254),CSTRING(254)RETURNS CSTRING(254) FREE_ITENTRY_POINT ‘replace’ MODULE_NAME ‘FreeAdhocUDF’;

Exemplo de uso: Você precisa trocar a des-crição de todas as contas correntes cadastrados em seu sistema financeiro, pois o nome do banco foi trocado:

Update CadContaCorrenteSet Descricao = F_Replace(Descricao,’Unibanco’,’Itaú-Unibanco’);

Função F_CollateBR – Dado um texto escrito e gravado com acentos, a função retorna esse mesmo texto sem acentos. Declaração:

DECLARE EXTERNAL FUNCTION F_COLLATEBR CSTRING(32760) RETURNS CSTRING(32760) FREE_IT

ENTRY_POINT ‘collatebr’ MODULE_NAME ‘FreeAdhocUDF’;

Exemplo de uso: Localize nomes em seu cadastro de clientes, independente se eles estão acentuados ou não:

Select * from ClientesWhere UPPER(F_

CollateBR(Nome)) like = ‘JOAO’;

Função F_Soundex – Essa função é muito interessante. Dado uma palavra, a função identi-fica um grupo fonético (Em Inglês) da pronuncia dessa palavra e determina um código desse grupo. Declaração:

DECLARE EXTERNAL FUNCTION F_SOUNDEX CSTRING(8190) RETURNS CSTRING(6) FREE_IT ENTRY_POINT ‘soundex’ MODULE_NAME ‘FreeAdhocUDF’;

Exemplo de uso: Você pode, por exemplo, localizar nomes semelhantes em um cadastro de clientes:

Select Nome from ClientesWhere F_Soundex(Nome) = F_Soundex(‘Cristina’);

Esse select deve retornar nomes como Cristina, Christina, Christine, Kristina, e diversas outras varia-ções, pois a pronuncia da palavra é a mesma.

Função F_RoundFloat– Faz um arredondamen-to de um valor decimal, conforma a precisão que você determinar:

DECLARE EXTERNAL FUNCTION F_ROUNDFLOAT DOUBLE PRECISION ,

DOUBLE PRECISION RETURNS DOUBLE PRECISION FREE_IT ENTRY_POINT ‘roundfloat’ MODULE_NAME ‘FreeAdhocUDF’;

Exemplo de uso: Utilize essa função para cal-cular valores de impostos e taxas que trabalham com muitas casas decimais, sem correr o risco de cálculo em arredondamentos:

Select F_RoundFloat(Prc_Produto,2) * F_RoundFloat(ICMS,2) from TabPrecos.

ou

Select F_RoundFloat(Prc_Gasolina,3) from TabPrecos.

Funções F_UUID1MACMAC e F_UUID1MAC – As funções UUID – Universally Unique Identifier – Trabalha com a identificação única de componentes que atuam no servidor. A lista de funções UUID na FreeAdHocUDF é extensa. Vamos mostrar a declaração de duas delas importantes.

DECLARE EXTERNAL FUNCTION F_UUID1MAC RETURNS CSTRING(36) FREE_IT ENTRY_POINT ‘uuid1mac’ MODULE_NAME ‘FreeAdhocUDF’;

DECLARE EXTERNAL FUNCTION F_UUID1MACMAC CSTRING(254) RETURNS CSTRING(18) FREE_IT ENTRY_POINT ‘uuid1macmac’ MODULE_NAME ‘FreeAdhocUDF’;

Page 19: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 19

Felipe Santos é especialista em InterBase. Trabalha com o InterBase desde 2001. atuando como consultor e instrutor do produto em todo Brasil. Especialista em ambientes críticos. Atua e trabalha com os maiores clientes do InterBase no Brasil. Participante ativo na comunidade, com diversos artigos publicados. Participante do grupo de beta testers mundial do produto. Palestrante em eventos como IB Tour, Borcon Conference, CodeRage Latin América, Delphi Developers Day, Linux Day, entre outros. Atualmente trabalhando na área técnica do InterBase na Presence Tecnologia – agente oficial especializado do produto no Brasil.

Sobre o autor

Felipe Santos

[email protected]

A primeira função cria um UUID do servidor de banco de dados, baseado no MAC Address desse computador. A segunda função extrai o MAC Address do computador em que foi criado um UUID. Então no exemplo abaixo, podemos identificar o número Mac Address da placa de rede principal do servidor de banco de dados de nossos clientes, podendo utilizar essa informação para um sistema de liberação de licenças, por exemplo:

Select F_UUID1MACMAC(F_UUID1MAC()) from Rdb$Database;

CONCLUSÃO

AS UDFs são definitivamente uma “mão na roda”. Trazem a solução rápida de pequenos pro-blemas que temos e que, muitas vezes, gastamos horas buscando uma forma de resolver e horas

de desenvolvimento. Usar UDFs é realmente fun-damental para otimizar nossas atividades. Mas é importante ficar sempre atento. UDFs são funções que rodam em nossos servidores de bancos de dados, em processos gerenciados pela SGDB, e normalmente trabalham com acesso à memória e alocação de recursos de servidor. Uma UDF “mal escrita” pode causar alguns tipos de falhas abruptas no servidor, podendo sim fazer parar um servidor inesperadamente. Por isso, se você for escrever suas UDFs, leia atentamente à referência indicada. Se você for utilizar uma UDF de mercado, verifique se o grupo tem suporte ou mantém o projeto ativo.

Mas não deixe de utilizar as UDFs! Declare apenas as funções que você for utilizar e comece a portar e transformar algumas rotinas suas, queries e triggers, incorporando as UDFs em seus projetos. Você só tem a ganhar.

Até a próxima.

Referência:

InterBase 2007 – Developers Guide – cap. 6 – Working With UDFs.

Page 20: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010

Olá, hoje vou falar sobre as novas fe-atures do Silverlight 4, interoperabilidade COM, ou seja a capacidade do silverlight de se “comunicar” com outras bibliotecas seja ela qual for.

Neste artigo eu vou mostrar como fazer o Silverlight se comunicar com o Skype através da API Skype4COM.Skype.

Instalando a API do Skype

Primeiro vamos entrar no site Skype Developer Zone (https://developer.skype.com/) clique no menu Tools & SDKs e baixe a versão mais recente da API, (atualmente é a versão 1.0.31.0).

Depois de baixar a API descompacte o arquivo e copie a Dll Skype4COM.dll para a unidade C:\ (para facilitar o registro da DLL) depois execute o promt de comando do Windows e registre a dll através do comando regsvr32 Skype4COM.dll (conforme imagem 1), se o registro ocorrer corretamente uma mensagem “DllRegisterServer em Skype4COM.dll obteve êxito” irá ser apresentada.

Veja a imagem 1

Interoperabilidade COM Silverlight comunicando

com o Skype

Codificando

Agora que já temos nossa Dll registrada va-mos codificar um pouco, para isso abra o Visual Studio 2010 e crie um projeto do tipo Silverlight

Imagem 1

Application, não esqueça de selecionar Silverlight 4 na caixa Options Silverlight Version. Agora abra o arquivo MainPage.xaml e codifique o seguinte código da Listagem 1.

Veja a Listagem 1.

<UserControl x:Class=”SkypeApplication.MainPage”xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation”;xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”;xmlns:d=”http://schemas.microsoft.com/expression/blend/2008”;xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006”;mc:Ignorable=”d”d:DesignHeight=”300” d:DesignWidth=”400”><Grid x:Name=”LayoutRoot” Background=”White”><StackPanel HorizontalAlignment=”Center”

Listagem 1.

Page 21: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 21

Veja a Imagem 2.

Agora que o código XAML está ok vamos codi-ficar o Código C# conforme Listagem 2:

Veja a Listagem 2.

Um ponto importante é dar um unisg do Namespace Microsoft.CSharp, mas para isso é necessário incluir a referência no projeto Silver-light ao arquivo C:\Program Files (x86)\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\Microsoft.CSharp.dll.

Observe no código C# o método RealizarCha-mada onde é criado um objeto dinâmico chamado skype e nele é instanciado a API Skype4COM.Skype, depois iniciamos o cliente Skype instalado na má-quina e por fim realizamos a chamada solicitada. Uma coisa importante é que esse recurso não funciona se não estiver em modo OutOfBrowser, a seguir vamos ver como configurar esse recurso e depois eu retorno explicando o comando Appli-cation.Current.Install();

Configurando OutOfBrowser

Para que a interoperabilidade COM possa funcionar junto ao Silverlight 4 é necessário que a aplicação esteja instalada na máquina do cliente, para isso é necessário configurar o recurso OutO-fBrowser, primeiro selecione o projeto Silverlight em sua Soulution Explorer ( imagem 3 ) depois selecione a opção Properties. Quando selecionar essa opção irá abrir uma tela de propriedades do projeto Silverlight (Imagem 4), marque a opção “Enable running application out of browser” essa opção permite que a aplicação seja instalada na máquina do cliente, agora observe que o botão Out-of-browser Settings está ativo, clique nele e irá abrir a tela de configurações do Out-of-Browser, nesta tela ative a opção “Require elevated trust when running outside the browser” (imagem 5) essa opção tem que ser marcada quando for ne-cessário que o Silverlight interaja com as bibliotecas com registradas no cliente, (no nosso caso a API do Skype), agora clique em OK Salve as modificações e vamos voltar ao código C#.

Veja a Imagem 3.Veja a Imagem 4.Veja a Imagem 5.

VerticalAlignment=”Center”><TextBlock Text=”Usuario:” /><TextBox x:Name=”edtusuario” Width=”300” Height=”23” /><Button x:Name=”btnChamar” Width=”100” Height=”30” Margin=”0,5,0,0” Content=”Realizar Ligação” Click=”btnChamar_Click”/><Button x:Name=”btnInstalar” Width=”100” Height=”30” Margin=”0,5,0,0” Content=”Instalar” Click=”btnInstalar_Click”/></StackPanel></Grid></UserControl>

public partial class MainPage : UserControl{public MainPage(){InitializeComponent();}private void btnChamar_Click(object sender, RoutedEventArgs e){RealizarChamada(edtusuario.Text);}private void RealizarChamada(string telefone){dynamic skype = ComAutomationFactory.CreateObject(“Skype4COM.Skype”);skype.Client.Start();

skype.PlaceCall(telefone);}private void btnInstalar_Click(object sender, RoutedEventArgs e){ if (Application.Current.InstallState == InstallState.NotInstalled)Application.Current.Install();}}

Listagem 1.

Listagem 2.

Imagem 2

Page 22: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201022

Configurando o botão Instalar

No arquivo MainPage.cs tem um método nomeado btnInstalar_Click esse método é res-ponsável pelo clique do botão instalar, observe que o Código primeiro tem um if verificando se a aplicação já está instalada na máquina do cliente, se negativo então instala a aplicação, isso é porque se você tentar forçar uma re-instalação irá ocorrer um erro. Para desinstalar uma aplicação silverlight, basta abrir a aplicação instalada apertar com o botão da direita do mouse e escolher a opção “Remove this application” (Imagem 6).

Imagem 6

Testando a aplicação

Execute aplicação através do F5 e no textBox escreva o endereço do Skype de testes echo123 se tudo ocorrer corretamente o Skype irá abrir e na primeira vez ele irá pedir permissão para realizar ligação, conceda a permissão e observe que ele irá fazer uma ligação para o echo123 que é um boot de testes do Skype realize alguns testes ligando para seus amigos.

Galera acho que é isso e até o próximo post sobre Silverlight.

Trabalha a quase 7 anos com Delphi, trabalha na empresa Benner Sistemas (www.benner.com.br ) na área de tecnologia desenvolvendo fer-ramentas em Delphi e como hobby e visão de mercado está migrando seus conhecimentos para a plataforma .NET. Faz parte do grupo .NET Blumenau http://dotnetblumenau.ning.com/ . Possue certificação 70-536 (Microsoft .NET Framework 2.0 Application Development Foundation ) . Twitter: djonatastenfen - blog http://www.djonatastenfen.blogspot.com/

Sobre o autor

Djonatas Tenfen

[email protected]

Imagem 3

Imagem 4

Imagem 5

Page 23: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 23

Page 24: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201024

Aproveitando o artigo do Djonatas Ten-fen, de 09/2009, o qual aborda os primeiros passos com JQuery e ASPNet, irei demonstrar o plugin LightBox JQuery, que faz alguns efei-tos bacanas em imagens. Vale ressaltar que existe um framework chamado LightBox 2 que é independente do JQuery e praticamente tem a mesma funcionalidade, entretanto, na minha opinião, o Lighbox traz um efeito mais interessante e é mais fácil de configurar.

Crie um novo WebSite no Visual Studio. Chame-o de JqueryLightBox.

Vamos fazer o download no site http://lean-drovieira.com/projects/jquery/lightbox/

Imagem 1 - Site

TRABALHANDO COM JQUERY COM ASPNETUTILIZANDO O PLUG LIGHTBOX E CRIANDO POPUP COM THICKBOX.

Imagem 1 - Site

Page 25: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 25

Clique em Get new version para obter a nova versão. Descompacte no diretório do seu projeto. Observe no arquivo descompactado o CSS, pois dará todo efeito no elemento div, que é usado para agrupar um ou mais elementos nível de bloco. Con-tém também as imagens dos botões, os arquivos JS e as fotos. Em soluction Explorer, clique em css e clique no arquivo. O mesmo será responsável pelo layout (imagem 2)

Veja a Imagem 2 (

Vamos criar um novo web form. Em soluction Explorer, no path do projeto com botão direito do mouse, selecione add new item. Selecione o objeto web form e chame-o de ListBox.aspx (Imagem3)

Veja a Imagem 3

Em source logo acima da tag <html... Vamos vincular o JQuery, o lightbox (Listagem 1)

<script type =”text/jscript” src =”jquery-1.3.2.min.js”></script><script type =”text/jscript” src =”js/jquery.lightbox-0.5.js”></script>

Listagem 1

Precisamos informar em qual elemento estare-mos aplicando o efeito do lightbox. Crie um outro script conforme listagem abaixo (listagem 2)

<script type =”text/jscript”> $(document).ready(function() { $(“#galeria a”).lightBox(); });</script>

Listagem 2 (método para aplicar o efeito do lightbox)

O elemento galeria será nosso div que con-

Imagem 2 (Folha de estilo encadeada - CSS)

Imagem 3

Page 26: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201026

terão as fotos e o “a” representa o link de cada foto, isso mesmo, cada foto terá um link para sua ampliação.

Logo abaixo da tag <title.. vamos adicionar o css. É só clicar no pasta css e arrastar o arquivo para o local desejado (Listagem 3)

<link href=”css/jquery.lightbox-0.5.css” rel=”stylesheet” type=”text/css” />Listagem 3 ( Css)Adicione um id para o div (listagem 4)<div id=”galeria”>

Listagem 4 (identificando a div)

Vamos incrementar um estilo para a div galeria listagem 5.

<style type=”text/css”> #galeria { width:500px; height:300px; background-color:#C0C0C0; margin : auto; }

Listagem 5

Observe que estamos alterando algumas pro-priedades da div galeria, tais como altura, largura, cor de fundo e a margem que foi centralizada.

Nosso script completo ficará assim (Listagem 5):

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”ListBoxaspx.aspx.cs” Inherits=”ListBoxaspx” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0

Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”><script type =”text/jscript” src =”jquery-1.3.2.min.js”></script><script type =”text/jscript” src =”js/jquery.lightbox-0.5.js”></script><script type =”text/jscript”> $(document).ready(function() { $(“#galeria a”).lightBox(); });</script><html xmlns=”http://www.w3.org/1999/xhtml”><head runat=”server”> <title>Untitled Page</title> <link href=”css/jquery.lightbox-0.5.css” rel=”stylesheet” type=”text/css” /></head><body>

<form id=”form1” runat=”server”> <div id=”galeria”> </div> </form></body></html>

Listagem 5 (script completo)

No nosso webform adicionei 5 hiperlinks na região do nosso div

Tenho 5 imagens e 5 miniaturas para as mes-mas (thumbnail).

Para cada hiperlink na propriedade naviga-teurl, linkei com as fotos de imagens normais e linkei com a miniatura correspondente.

Só executar e verificar esse magnífico efeito que o plugin lightbox proporciona.

Veja o projeto em funcionamento (Imagem 4)

Veja a imagem 4.

Imagem 4 – Imagens

Page 27: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 27

Agora é só selecionar a imagem para carregar a sua correspondente (Imagem 5)

Veja a Imagem 5.

Finalizamos a primeira parte que é a manipu-lação de imagens. Vamos agora utilizar o TickBox com Jquery que substitui o ModalPopUpContainer do AjaxToolkit.

Vamos precisar fazer o download do script do Thickbox e neste exemplo irei utilizar o código css fornecido no site do Thickbox: http://jquery.com/demo/thickbox/.

Faça o download do thickbox-compressed.js. Salve na pasta js do seu projeto.

Existe um link que abre um arquivo txt, cha-mado e ThickBox.css . Salve na pasta css do seu projeto com a extensão .css.

Criem dois webforms, um chamado TickBox .aspx e outro chamado Modal.aspx

No TickBox.aspx ,em source, após a tag Title do seu formulário adicione as referências aos scripts. Adicionam primeiro o CSS, depois o script do Jquery e por último o script do ThickBox.

Observe a listagem 6

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”TickBox.aspx.cs” Inherits=”TickBox” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<html xmlns=”http://www.w3.org/1999/xhtml”><head runat=”server”> <title>Untitled Page</title> <link href=”css/thickbox.css” rel=”stylesheet” type=”text/css” />

<script type =”text/jscript” src =”jquery-1.3.2.min.js”></script>

<script type =”text/jscript” src =”thickbox-compressed.js”></script> </head><body> <form id=”form1” runat=”server”> <div> </div> </form></body></html

Listagem 6

Se você quiser abrir uma página com um link html basta adicionar a tag class especifica do Thi-ckBox que já irá funcionar (Listagem 7)

<form id=”form1” runat=”server”> <div> <a href=”Modal.

aspx?width=200&height=200” class=”thickbox””> Abrir Janela Modal </a> </div> </form>

Listagem 7

Adicione um ScriptManager, um UpdatePanel e um botão no nosso formulário. E vamos fazer uma chama para uma janela modal no Evento do botão (Listagem 8)

protected void Button1_Click(object sender, EventArgs e) { string script = “tb_show(‘’,’Modal.aspx?height=420&width=550’,’’);”; ScriptManager.RegisterClientScriptBlock(UpdatePanel1, this.GetType(), “janela”, script, true); }

Listagem 8

Imagem 5 – Imagem carregada

Page 28: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201028

Técnologo em Processamento de Dados ,graduado pela Faculdade de Técnologia de Sorocaba, Consultor técnico do The Club.

Docente do curso técnico informática - Etec de Avaré e do curso Tecnologia em Redes de Computadores - Fatec Eduvale – Avaré

Sobre o autor

Luís Alexandre de Oliveira

[email protected]

Com o código acima será aberto formulário WebForm1 em uma janela modal de 320px de Height por 450px de Width. Nessas duas linhas de código escrevi o JavaScript que chama a janela e logo em seguida registra o mesmo no UpdatePanel . É importante que registre seu código JavaScript para que quando ocorra um PostBack em seu formulário o UpdatePanel mantenha a referência dos Scripts adicionados.

Veja o efeito final (Imagem 6) Veja a Imagem 6.

Vimos a utilização do poderoso JQuery com LightBox que cria um efeito incrível em imagens e vimos também a criação de um formulário modal utilizando o Thicket com JQuery. Sem dúvidas o ma-ravilhoso JQuery podemos criar aplicaçãoes ricas para internet (RIA) sem perder performance.

Até a próxima!

Veja o efeito final (Imagem 6)

Page 29: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010 29

Dicas DELPHIConverter para Romanos

Function DecToRoman( Decimal: LongInt ): String; constRomans: Array[1..13] of String = ( ‘I’, ‘IV’, ‘V’, ‘IX’, ‘X’, ‘XL’, ‘L’, ‘XC’, ‘C’, ‘CD’, ‘D’, ‘CM’, ‘M’ );Arabics: Array[1..13] of Integer =( 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000);var i: Integer; scratch: String;begin scratch := ‘’; for i := 13 downto 1 do while ( Decimal >= Arabics[i] ) do begin Decimal := Decimal - Arabics[i]; scratch := scratch + Romans[i]; end; Result := scratch;end;

Excluir arquivos usando caracteres curingas (*)

var SR: TSearchRec; I: integer; begin I := FindFirst(‘c:Teste/Teste*.*’, faAnyFile, SR); while I = 0 do begin if (SR.Attr and faDirectory) <> faDirectory then if not DeleteFile(‘c:Teste’ + SR.Name) then ShowMessage(‘Não consegui excluir c:Teste’ + SR.Name); I := FindNext(SR); end;

Desta forma os arquivos serão excluídos permanentemente, sem passa-gem pela lixeira.

Copiar arquivos usando caracteres curingas (*)

var SR: TSearchRec; I: integer; Origem, Destino: string; begin I := FindFirst(‘c:Origem*.*’, faAnyFile, SR); while I = 0 do begin if (SR.Attr and faDirectory) <> faDirectory then begin Origem := ‘c:Origem’ + SR.Name; Destino := ‘c:Destino’ + SR.Name; if not CopyFile(PChar(Origem), PChar(Destino), true) then ShowMessage(‘Erro ao copiar ‘ + Origem + ‘ para ‘ + Destino); end; I := FindNext(SR); end;

Se o arquivo copiado já existir no diretório em que ele será enviado a função não funcionará.

Esconder Botão iniciar

var taskbarhandle,buttonhandle : HWND;begin taskbarhandle := FindWindow(‘Shell_TrayWnd’, nil); buttonhandle := GetWindow(taskbarhandle, GW_CHILD); If Visible=True Then ShowWindow(buttonhandle, SW_RESTORE) //mostra o botão else ShowWindow(buttonhandle, SW_HIDE); //esconde o botãoend;

Page 30: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 201030

VerticalHorizontal

Page 31: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010

Page 32: The Club - megazineexemplo de aplicação desse tipo é o servidor de banco de dados Firebird. Nesse artigo estarei mostrando como po-demos criar e configurar um Windows Service utilizando

Fevereiro 2010