32

EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

Embed Size (px)

Citation preview

Page 1: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,
Page 2: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,
Page 3: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

3

THE CLUBAv. Profº Celso Ferreira da Silva, 190

Jd. Europa - Avaré - SP - CEP 18.707-150Informações: (14) 3732-3689

Suporte: (14) 3733-1588 - Fax: (14) 3732-0987

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected]

Informações: [email protected]

DúvidasCorrespondência ou fax com dúvidas devem

ser enviados ao - THE CLUB, indicando"Suporte".

OpiniãoSe você quer dar a sua opinião sobre o clube

em geral, mande a sua correspondência para aseção "Tire sua dúvida".

ReproduçãoA utilização, reprodução, apropriação,

armazenamento em banco de dados, sobqualquer forma ou meio, de textos, fotos e

outras criações intelectuais em cada publicaçãoda revista “The Club Megazine” são

terminantemente proibidos sem autorizaçãoescrita dos titulares dos direitos autorais.

Impressão e acabamento:GRAFILAR

Tel.: (14) 3841-2587 - Fax: (14) 3841-3346Rua Cel. Amando Simôes, 779

Cep 18.650-000 - São Manuel - SPTiragem: 5.000 exemplares

Copyright The Club Megazine 2005

Diretor TécnicoMauro Sant’Anna

Colaboradores

EDITORIAL

Editorial

Editorial .................................................................................. 03Projeto Lazarus - Uma alternativa Open Source para osProgramadores Delphi ? ........................................................ 04Validando entrada de dados em aplicações ASP.NET ........... 07Agarre o Express - Uma visão geral dos produtos daedição Visual Studio Express ................................................. 12O tamanho importa - Diminua o código com o controleObjectDataSource ................................................................. 16O novo Microsoft Office.......................................................... 21Gravando Imagens JPEG no SQLServer 2000 ...................... 26

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

pelos seus respectivos proprietários.

Reginaldo Rubens da Silva

Olá amigos,

Estamos chegando com mais um edição da The Club Megazine trazendomuitas novidades à você!

Quem não gostaria de trabalhar com uma IDE de desenvolvimentototalmente gratuita? Acredito que a maioria dos programadores! Nossoamigo Reginaldo fala sobre o Lazarus, uma alternativa open-source para osprogramadores Delphi.

Nosso consultor Claudinei Rodrigues demonstra como efetuar validação deentrada de dados em aplicações ASP.NET, veja como o .NET Frameworkfacilita nossa vida. Ainda falando em .NET, a Microsoft acaba de lançar a suamais nova família de ferramentas para desenvolvimento .NET 2.0, confira asversões Express que têm um custo baixíssimo além de muita produtividade efacilidade ao programador, vale a pena conferir.

Dentro das novidades do .NET Framework 2.0 apresentamos ocomponente ObjectDataSource que permite organizar e diminuirdrasticamente o processo de codificação.

Ainda falando em novidades, Celso Jefferson apresenta o novo Office, issomesmo, a nova versão do pacote de ferramentas da Microsoft está vindo porai...

Nosso consultor Alessandro Ferreira demonstra em seu artigo comogravar imagens JPEG em banco de dados SQLServer 2000 utilizando ADO,veja como é fácil!

E para finalizar, nossa sessão Perguntas & Respostas com algumasdas solicitações atendidas neste mês.

Abraço e sucesso à todos,

Page 4: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

4

Lazarus

Com o slogan "Write once, compile everywhere!"(Escreva uma vez, compile em todo lugar), o projetoLazarus*, iniciado em fevereiro de 1999 por CliffBaeseman, Shane Miller e Michael A. Hess, se apresentacomo uma biblioteca de classes para o compilador FreePaascal** cujo objetivo é emular o Delphi.

Assim como o Free Pascal, o Lazarus também roda emdiversos sistemas operacionais, incluindo Linux eWindows e também é open source.

O objetivo deste artigo é explanar em linhas gerais oestado da arte desta ferramenta que pode vir a setraduzir em uma alternativa open source paraprogramadores Delphi, respeitadas obviamente aslimitações que um projeto open source, mantidomassiçamente por voluntários, tem frente a um produtocomercial como é o Delphi.

Ao contrário do Java que se esforça para ser "escrevauma vez, rode em qualquer lugar", o Lazarus e o FreePascal se esforçam para ser "escreva uma vez, compile emqualquer lugar".

Uma vez que o mesmo compilador está disponível emdiversas plataformas, significa que não é necessário fazerqualquer tipo de recodificação para produzir produtosidênticos para diferentes plataformas.

Conforme consta no site oficial do projeto, o Lazarusestá sendo desenvolvido para ser total e completamente

independente de API. Uma vez que você escreveu seucódigo, você apenas "linka" o mesmo com a API da suaescolha, como por exemplo, GTK+ ou Gnome.

É possível usar código Delphi já existente paraproduzir aplicações no Lazarus, desde que o referidocódigo não inclua nenhum componente ou bibliotecasespecíficas para a plataforma Windows, caso contrário,não será possível compilar o mesmo em um ambienteLinux.

Se a intenção é usar o Lazarus apenas para produziraplicações Windows, daí sim é possível aproveitar o códigojá existente mesmo que ele contenha dependências daplataforma Win32. No entanto, tais componentes nãoforam incluídos na Lazarus Component Library(Biblioteca de Componentes do Lazarus) - LCL, mas podeser possível fazê-lo no futuro.

O fato de o compilador Free Pascal ser licenciado sob alicença GPL, que dá ao usuário o direito de modificar ocódigo se desejar, desde que distribua ou torne disponíveisas alterações feitas, juntamente com o fato de que a FCL(Free Pascal Component Libraries - Bibliotecas deComponentes do Free Pascal) e a LCL são licenciadas sobuma licença LGPL modificada, tornam completamentepossível o desenvolvimento de aplicações comerciaisutilizando o Lazarus, sem a necessidade de disponibilizaros códigos-fonte da aplicação desenvolida.

Através da figura ao lado, capturada da seção

Uma alternativa Open Source para osUma alternativa Open Source para osUma alternativa Open Source para osUma alternativa Open Source para osUma alternativa Open Source para osProgramadores Delphi ?Programadores Delphi ?Programadores Delphi ?Programadores Delphi ?Programadores Delphi ?

por Reginaldo Rubens da Silva

Projeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto LazarusProjeto Lazarus

Page 5: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

5

Lazarus

ScreenShot da IDE do Lazarus.

"ScreenShots" do site oficial do projeto, é possívelconstatar que o Lazarus realmente consiste num clone doDelphi.

O que esperar do Lazarus ?

O Lazarus está atualmente em sua versão 0.9.10 e,portanto, ainda falta implementar muita coisa. Assim, élógico que não se pode esperar que o Lazarus ofereça nestemomento a mesma gama de recursos e funcionalidadesque o Delphi oferece. Aliás, pode ser que o Lazarus nuncavenha a se igualar totalmente ao Delphi, mas assimmesmo, vale a pena avaliar o que esta ferramenta tem aoferecer e principalmente, o que ela pode vir a oferecer embreve.

Afinal, muitas vezes trabalhamos com o

desenvolvimento de aplicações de pequeno porte, cujareceita gerada não justifica a aquisição de uma licença doDelphi.

Assim, o Lazarus pode sim se mostrar como uma boaalternativa para o desenvolvimento de aplicações paraaqueles amantes do Delphi que não tem condições deadquirir uma licença e que não querem trabalhar àsombra da pirataria de software.

O Lazarus, a exemplo da maioria dos projetos desoftware livre ou open source, conta com uma amplacomunidade de colaboradores.

Inúmeras pessoas de todas as partes do mundo,inclusive do Brasil, colaboram com as tarefas de projeto,desenvolvimento e documentação desta ferramenta.

Page 6: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

6

Lazarus

No site oficial do projeto se encontram disponíveisfóruns e mail-lists para a troca de conhecimento sobre oLazarus, bem como uma seção de documentação, que éconstantemente atualizada.

Além destes recursos de suporte à ferramenta, hácomunidades no Orkut, que reúnem entusiastas eusuários do Lazarus, onde também há compartilhamentode conhecimento, além de outros tantos sites que podemser encontrados na web que também abordam assuntosrelacionados ao projeto.

O site do projeto também divulga constantementenovidades sobre componentes e bibliotecas que sãoportados para o Lazarus, bem como uma relação de casosde utilização do Lazarus para a produção de diversasaplicações.

A seção de documentação do site doprojeto disponibiliza links paradiversos tutoriais sobre o uso doLazarus, incluindo um guia deconversão de código, que dá noçõesgerais sobre as conversões necessáriaspara se usar código Delphi já existenteno Lazarus.

Por exemplo, no Lazarus énecessário utilizar parênteses ao fazer a chamada a umaprocedure, mesmo que não sejam passados argumentos, oque já não acontece no Delphi, que dispensa aobrigatoriedade do uso dos parênteses neste caso.

Estes e outros detalhes são abordados no guia deconversão de código e muito mais conhecimento pode serobtido a partir dos demais tutoriais e documentosdisponíveis na seção de documentação.

Onde conseguir o Lazarus ?

Os arquivos de instalação do Lazarus podem serobtidos no site do projeto.

Há versões da instalação para Linux e para Windows.

A versão para Windows acompanha um instalador,que a exemplo dos demais aplicativos "for Windows", faztoda a instalação de modo automático.

Já a versão para Linux, segue os padrões das

aplicações desta plataforma, e exige um pouco mais deintervenção do usuário, prática que também já é bastantefamiliar dos usuários da plataforma Linux.

Considerações Finais

Pois bem, não há muito que concluir, por isso, vouapenas fazer algumas considerações para finalizar oartigo.

Como eu havia dito no início, a idéia deste artigo éapresentar em linhas gerais esta que, tem tudo para seruma alternativa de ferramenta de desenvolvimento muitointeressante, principalmente pelo seu caráter open source.

Por isso, não abordei detalhes do uso da ferramenta,mesmo porque, ainda não foi lançada a versão 1.0 damesma e, assim, supõe-se que a versão disponível ainda

apresenta muitos bugs e limitações,como é comum em versões beta.

Meu objetivo maior foi mesmo o dedivulgar a existência do projetoLazarus, principalmente porqueiniciativas deste tipo merecem serapoiadas e o simples de fato de baixara ferramenta e analisar o que ela podee o que poderá vir a oferecer, podecontribuir muito para a continuidade e

o bom andamento do projeto.

Há também a possibilidade de que alguns que leiameste meu artigo venham a se interessar por contribuir dealguma forma para o projeto, seja colaborando com aimplementação de novas características do Lazarus, sejacontribuindo para a elaboração de documentação, sejaapresentando idéias, sugestões ou mesmo críticas quepossam alavancar melhorias no projeto.

Site: http://www.lazarus.freepascal.org/

Sobre o autorReginaldo Rubens da Silva é Bacharel em Ciência da

Computação, graduado pela Universidade do Vale do Itajaí -UNIVALI e atualmente cursa o Mestrado em Ciência eTecnologia Ambiental, também na UNIVALI, estando em fasede conclusão da dissertação.

Com experiência de mais de 8 anos no desenvolvimento desoftware, atualmente atua como Desenvolvedor no Laboratóriode Soluções em Software - L2S, da UNIVALI.

Page 7: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

7

Asp.Net

A validação da entrada de dados é algo muito comumem qualquer tipo de aplicação e isto não é diferente emaplicações ASP.NET. Sempre quando um usuário fordigitar alguma informação, você quase sempre iráexecutar alguma rotina de verificação para validar estainformação. O ASP.NET fornece uma série Web Controlsque nos auxiliam a fazer esta validações.

Existem duas formas de validações em aplicaçõesASP.NET. A validação do lado cliente e a validação dolado servidor. Vamos ver um pouco de cada uma.

Validação do lado cliente (Client-side)Este tipo de validação é executada no lado cliente

através de uma linguagem de script chamada JavaScript.Esta validação é feita antes que a informação sejaenviada para o servidor, portanto ela é bem rápida.

Validação do lado servidor (Server-side)

Este tipo de validação é executada no lado servidor.Um exemplo bem típico é quando você quer fazer umadeterminada verificação no banco de dados. Você cria umafunção que irá verificar se um determinado código jáexiste. Então esta solicitação é feita no servidor e aresposta é enviada posteriormente ao lado cliente.

Existem cinco componentes diferentes para fazervalidação que podem ser encontrados na palheta WebControls, são eles:

CompareValidator - Este componente tem afinalidade de comparar um valor digitado com um valorpré-definido ou fazer comparações entre outroscomponentes.

RangeValidator - Este componente tem afinalidade de validar uma faixa de valores, por exemplo,você determinada que um determinado componente podereceber um valor entre 0 e 9.

RegularExpressionValidator - Este componentetem a finalidade de validar a informação em umaexpressão. Nós vamos utilizá-la na maioria dos casos emexpressões como números de telefones, ceps, etc.

RequeridFieldValidator - Este componente tem afinalidade de obrigar que alguma informação sejainformada. Ou seja, se você utilizar este componente emum TextBox onde seja digitado o nome, ele não vaipermitir que o nome fique em branco.

CustomValidador - Com este componente vocêpode atribuir as suas próprias funcionalidades, ou seja,qualquer coisa que não exista nos outros componentescitados anteriormente.

Agora que já conhecemos um pouco de cadacomponente vamos montar um simples projeto paraentender na prática como estes componentes irão nosajudar.

Trabalhando com o RequeridFieldValidatorAbra o seu Delphi 2005 e crie uma nova aplicação

ASP.NET.

No seu WebForm inclua um componente Label, umcomponente TextBox., um componenteRequeridFieldValidator e um componente Button.Coloque um componente abaixo do outro. Você terá umaterá uma tela semelhante ao mostrado na figura 1.

Por Claudinei Rodrigues - [email protected]

Validando entrada de dadosValidando entrada de dadosValidando entrada de dadosValidando entrada de dadosValidando entrada de dadosem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NET

Validando entrada de dadosValidando entrada de dadosValidando entrada de dadosValidando entrada de dadosValidando entrada de dadosem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NETem aplicações ASP.NET

Page 8: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

8

Asp.Net

Figura 1: Exemplodo WebForm emtempo dedesenvolvimento.

Agora temos que fazer algumas configurações nocomponente RequiredFieldValidator.

A primeira coisa a se fazer é informar a qualcomponente ele se aplica. Para isto vamos utilizar apropriedade ControlToValidate. Nesta propriedadevamos informar o nome do nosso componente TextBox,como mostrado na figura 2.

Figura2: Propriedades docomponenteRequiredFieldValidator.

assegurar que uma informação não é igual a outra. Nestecaso este componente se encaixa no que precisamos. Comoeste componente nós podemos definir um valor para ele efazer que um componente seja validado com estainformação ou fazer a validação entre outros doiscomponentes.

Vamos para o primeiro exemplo:No seu WebForm inclua um componente Label, um

componente TextBox., um componente CompareValidatore um componente Button. Coloque um componente abaixodo outro. Você terá uma terá uma tela semelhante aomostrado na figura 3.

Agora nós temos que configurar o nosso componenteCompareValidator. Como você pode ver na figura 4 nósalteramos ControlToValidate. É a partir destapropriedade que este componente vai saber sobre qualcomponente ele tem que trabalhar.

Na propriedade ErrorMessage é onde vamos informara mensagem de erro que será mostrada. A propriedade IDé no nome do componente.

Agora rode a sua aplicação e realize os testes.

Trabalhando com o CompareValidatorÀs vezes necessitamos comparar dois campos para

verificar se a informação é realmente válida. Ás vezesprecisamos fazer ao contrário, ou seja, precisamos nos

Figura 3: Usando oCompareValidator

Figura 4: Propriedadesdo componenteCompareValidator

Page 9: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

9

Asp.Net

Da mesma forma que fizemos anteriormente vamosinformar na propriedade ErrorMessage a mensagem deerro que iremos mostrar no momento do erro.

Neste exemplo nós vamos comparar o nossocomponente TextBox a uma propriedade chamadaValueToCompare. No nosso caso eu informei a palavraThe Club. Se for digitada qualquer coisa diferente de TheClub, o componente acusará o erro.

Este componente também lhe dá a oportunidade defazer diversas outras comparações. Por exemplo, você podeter um componente TextBox para digitar umadeterminada senha, e um outro componente TextBox paraconfirmar esta senha. Isto também é muito simples.

Ao invés de utilizar a propriedade ValueToCompare,você vai utilizar a propriedade ControlToCompare. Aoclicar na propriedade ControlToCompare, você terá acessoa um combobox com a lista de componentes disponíveis noseu Form.

Uma outra propriedade bastante interessante é apropriedade Operator. Por padrão, ela é configurada comoEqual, mas existem várias outras opções.

Trabalhando com o RangeValidatorEm alguns tipos de aplicações é comum trabalhar com

faixa de valores, como por exemplo, período de datas,valores monetários, etc.

Este componente é justamente para isto. Ele tem umapropriedade MinimumValue para informar o valormínimo e uma propriedade chamada MaximumValuepara informar o valor máximo.

Conforme eu já mencionei no exemplo anterior, no seuWebForm inclua um componente Label, um componenteTextBox., um componente Button, e agora um componenteRangeValidator. Coloque um componente abaixo do outro.

Agora como nos outros componentes vá até apropriedade ControlToValidate e informe o nome desteultimo componente TextBox que você acabou de incluir.Informe na propriedade MaximumValue o numero 10 e napropriedade MinimumValue o valor 1.

Na propriedade ErrorMessage nós devemos informar amensagem de erro. E você ainda tem a propriedade Type

Figura 5: Configuraçõesdo componenteRangeValidator.

Trabalhando com oRegularExpressionValidator

Este componente faz com que o usuário não digite umainformação inválida. Através deste componente nóspodemos validar informações como e-mail, cep, telefone,url e assim por diante.

Este componente é muito simples de se utilizar. Incluaum componente TextBox, um componenteRegularExpressionValidator e um componente Button.

Veja na figura 6 as propriedades que foram alteradasneste componente.

Trabalhando com o CustomValidatorConforme eu havia dito anteriormente nós podemos

utilizar o CustomValidator para fazer um determinadotipo de validação diferente dos que os componentes que jámencionamos.

na qual você informa o tipo da informação a sertrabalhada, por exemplo, inteiro, string, data, etc.

Veja a configuração das propriedades na figura 5.

Page 10: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

10

Asp.Net

Por exemplo, podemos utilizar este componente emconjunto com uma função nossa de verificação de CPF.

Eu não sei se você havia notado até o momento, masfizemos diversos tipos de validações e não escrevemosnenhuma linha de programação até agora.

Agora inclua a rotina abaixo no seu código fonte:

function vercpf(snrcpf : string) : boolean;

VAR WCPFCALC : STRING; WSOMACPF : INTEGER; WSX1 : SHORTINT; WCPFDIGT : INTEGER;

begin

if (snrcpf <> ' . . - ') and (snrcpf <> '') then

BEGIN try snrCpf := snrcpf.Replace

(' ','').Replace('-','').Replace('/','').Replace('.','');

wcpfcalc := copy(snrCpf, 1, 9); wsomacpf := 0; for wsx1:= 1 to 9 DO wsomacpf := wsomacpf +

strtoint(copy(wcpfcalc,wsx1, 1)) * (11 - wsx1);

wcpfdigt:= 11 - wsomacpf mod 11; if wcpfdigt in [10,11] then

BEGIN wcpfcalc:= wcpfcalc + '0'; END else

BEGIN wcpfcalc := wcpfcalc +

inttoStr(wcpfdigt); END;

wsomacpf:= 0; for wsx1:= 1 to 10 DO wsomacpf := wsomacpf +

strtoint(copy(wcpfcalc,wsx1, 1)) * (12 - wsx1);

wcpfdigt:= 11 - wsomacpf mod 11; if wcpfdigt in [10,11] then BEGIN wcpfcalc:= wcpfcalc + '0'; END else

BEGIN wcpfcalc := wcpfcalc +

inttoStr(wcpfdigt); END;

if snrcpf <> wcpfcalc then begin vercpf := false; end else vercpf := true; except on econverterror do

begin vercpf := false;

Figura 6: Configuraçõesdo componenteRegularExpressionValidator

Page 11: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

11

Asp.Net

endend

ENDend;

Listagem 1: Rotina de verificação de CPF.

A rotina mencionada na listagem 1 como você mesmopode ver, vai receber o CPF, vai verificar se ele é ou nãoverdade e retornar True ou False.

Agora vamos testar. Novamente inclua umcomponente Button e um TextBox, além é claro docomponente CustomValidator.

Clique no componente CustomValidator e vá até oevento ServerValidate.

Dê um duplo clique neste evento e inclua a seguintelinha de código:

Sobre o autorClaudinei Rodrigues,Consultor Técnico do The [email protected]

args.IsValid := vercpf(TextBox5.Text);

Está pronta o nosso ultimo exemplo de validação.

Conclusão.A utilização de validações em páginas ASP.NET é

muito simples. Você viu que a utilização de código foipraticamente nenhuma.

A principal intenção aqui é mostrar toda a capacidadedo .NET Framework.

Espero que todos tenham gostado e até o próximo mês.

Page 12: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

12

Visual Studio Express

O.NET Framework 2.0 foi finalmente lançado. Juntocom o objetivo final das ferramentas paradesenvolvedores que tem como alvo os programadoresprofissionais, com o Visual Studio 2005, a Microsoft estálançando uma suíte paralela de ferramentas paradesenvolvedores amadores ou hobbistas. Estasferramentas estão disponíveis sob o rótulo "Express".

Este artigo fornecerá uma visão geral da linha deprodutos das edições Express, que incluem ferramentaspara desenvolver aplicações Web e Windows, bem comoum banco de dados gratuito (veja a figura 1).

Agarre o ExpressAgarre o ExpressAgarre o ExpressAgarre o ExpressAgarre o ExpressUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos da

edição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Express

Agarre o ExpressAgarre o ExpressAgarre o ExpressAgarre o ExpressAgarre o ExpressUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos daUma visão geral dos produtos da

edição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Expressedição Visual Studio Express

Figura 1: Os produtos do Visual Studio Express Edition

Os produtos da edição ExpressA Microsoft expandiu a linha de produtos do Visual

Studio para incluir um novo conjunto de produtosentitulados Express Editions. Os produtos ExpressEdition fornecem um conjunto de ferramentas leve, e tema intenção de ser usado por amadores, desenvolvedoresnovatos e estudantes (a Microsoft coloca estes indivíduossob a categoria de usuários não-profissionais). Osdesenvolvedores profissionais continuarão a usar a linhade produtos principal, o Visual Studio 2005. É bom

recordar que as versões beta do .NET Framework 2.0,tiveram as versões dos produtos Express para que osdesenvolvedores entusiastas pudessem ter suas própriasexperiências com a nova versão do .NET Framework semter a necessidade de ter uma assinatura do MSDN. Sevocê é um desenvolvedor e não teve a oportunidade detestar a versão beta ou final do Visual Studio porque nãotem uma assinatura do MSDN, ou se não está disposto agastar no momento para comprar a ferramenta, amaneira mais fácil de começar a trabalhar com o novoframework é fazer o download das versões ExpressEditions.

Os produtos Express Edition também são usados pelaMicrosoft para atrair desenvolvedores para a plataformaMicrosoft. Estes desenvolvedores são os que desenvolvemaplicações baseadas em Linux, Apache Web Server,mySQL, PHP, Perl ou Python.

A Microsoft sempre usou a expressão Express paradiferenciar as versões full das versões mais leves dosprodutos. Por exemplo, com o Microsoft Outlook eMicrosoft Outlook Express, onde o Outlook Express serviucomo uma edição leve do Microsoft Outlook completo. Noentanto, é aqui que a similiaridade termina. Os produtosda versão Express Edition não estão disponíveis comofreeware, exceto o SQL Server 2005 Express. O SQLServer 2005 Express é livre e pode ser redistribuído; orestante dos produtos Express Edition custam US$49cada, após um ano de uso (você pode usar gratuitamenteos produtos por um ano antes de decidir se compra ou nãoas ferramentas).

Voltando à figura 1, podemos ver que o Visual WebDeveloper 2005 Express serve como ferramenta paraaplicações Web, enquanto o SQL Server 2005 Expressserve como um banco de dados. Há quatro produtos paraos novatos/amadores poderem escolher baseado nalinguagem de sua preferência para construir suas

Page 13: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

13

aplicações Windows.

Visual Web Developer 2005 Express: Construindoaplicações Web Applications sem o IIS!

O Visual Web Developer Express pode ser usado paraconstruir aplicações Web baseadas no ASP.NET 2.0 epode construir aplicações Web e Web services. Aferramenta oferece suporte a três linguagens: VisualBasic, C#, e J#.

Uma das maiores vantagens de usar esta ferramentaé que a dependência do Internet Information Services (IIS)como servidor web para construir e testar aplicações foieliminada. Isto foi obtido ao ser incluído no produto umaversão atualizada do Cassini Web server, a qual começoucomo um simples exemplo de um servidor web. Isto

significa que um Amador/Novato pode construir e testaraplicações usando o Visual Web Developer Expresslocalmente no computador sem ter o IIS, e então distribuirpara uma máquina com o IIS. No entanto, o IIS ainda énecessário para hospedar um site construído com o VisualWeb Developer Express.

A interface de usuário do Visual Web DeveloperExpress é similar à do Visual Studio 2005, mas semalgumas características do Visual Studio 2005. A figura 2mostra o ambiente do Visual Web Developer Express.

Outra característica importante a ser observada é queos arquivos do Project e Solution criados com o VisualWeb Developer Express ou produtos Express podem ser

Figura 2: O IDE do Visual Web Developer 2005 Express Edition.

Visual Studio Express

Page 14: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

14

importados para o Visual Studio 2005. Isto significa quea qualquer momento é possível atualizar/mover para asversões professional ou enterprise do Visual Studio 2005.

Na próxima seção, daremos uma olhada no SQLServer 2005 Express, que serve como um banco de dadosleve e grátis.

SQL Server 2005 Express: Umsubstituto para o MSDE

O SQL Server 2005 Express foi feito para substituir oMSDE. O SQL Server 2005 Express é gratis para uso eredistribuição e é feito com base no núcleo principal doSQL Server 2005. Ele oferece muitas das característicascomerciais do SQL Server 2005, como views, triggers, ecursors.

Como a Microsoft inclui o mesmo núcleo de banco dedados do SQL Server Database, foi necessário colocaralgumas imposições ao produto leve (Express). Isto foiobtido no MSDE regulando a carga de trabalho, onde odesempenho é limitado baseado em vários tipos de uso ecenários de carga. No caso do SQL Express 2005, alimitação de carga de trabalho foi removida e hálimitações fixas baseadas na CPU, RAM e banco dedados.

O SQL Server Express 2005 suporta até 1GB de RAMe um único processador, mesmo se usado em sistemascom múltiplos processadores. O banco de dados pode teraté 4GB de tamanho. A figura 3 mostra estas limitações.

Figura 3: Limitações doSQL Server 2005Express.

O SQL Server 2005 Express suporta a criação demúltiplas instâncias na mesma máquina. De fato, estalimitação é comparável à do MSDE. No SQL ServerExpress 2005 você pode ter 50 instâncias na mesmamáquina; o MSDE suporta somente 16 instâncias. Alémdisso, o Express Edition tem suporte completo aintegração do CLR do SQL Server 2005 e inclui suportenativo para tipos de dados XML e XQuery. O SQL Expresstambém suporta muitas novas características, como oisolamento de snapshots e índices extendidos.

A Microsoft também está oferecendo uma ferramenta

baseada em GUI chamada de Express Manager (XM) paraadministrar o banco de dados. Esta é uma versão leve doSQL Server Management Studio. O Express Managerpode ser usado para fazer maior parte das tarefas que umnovato pode precisar. A figura 4 mostra o ExpressManager. O Express Manager também inclui um editor dequery, onde os desenvolvedores podem escrever e executarsuas queries.

Figura 4: A interface de usuário do SQL Express Manager.Outra característica importante a considerer da

perspectiva do desenvolvedor é o suporte a API. A APIexposta pelo Express Edition e pelo produto principal sãoidênticas, e o usuário pode migrar a qualquer momento deuma versão Express Edition para o produto full. O SQLServer Express também pode ser acessado a partir do.NET 1.1 e de aplicações do Visual Basic 6.0.

Algumas das características que não estão incluídasno SQL Server Express 2005 são o SQL Agent e DataTransformation Services (DTS) - as quais agora sãochamadas de SQL Server Integration Services (SSIS) nanova versão. Embora não haja suporte nativo para 64-bit,se instalado em uma máquina 64-bit, o SQL Server 2005Express rodará usando a camada de execução WOW. Orestante dos produtos são principalmente baseados nalinguagem, então vou lhe mostrar somente o Visual C#2005 Express na próxima seção. Os desenvolvedores quetêm preferência a uma linguagem diferente podemescolher uma ferramenta diferente baseada na linguagemde sua preferência.

Visual C# 2005 ExpressO Visual C# 2005 Express é uma ferramenta que pode

ser usada para desenvolver aplicações Windows. Elaoferece muitas características oferecidas pelo produtoprincipal, como o Edit e Continue, Debugger Visualizers,

Visual Studio Express

Page 15: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

15

Code Snippets, e refactoring. A figura 5 mostra oambiente do Visual C# 2005 Express. O Visual C#Express Edition não suporta plug-ins ou compilação paraplataformas 64-bit. Ferramentas adicionais como o ClassDesigner, Object Test Bench, ferramentas de perfil decódigo, e ferramentas de análises estátisticas, as quaissão parte do produto full, não estão inclusas no ExpressEdition.

DocumentaçãoTodas as versões Express Edition dos produtos

incluem documentação e tutorias simples para ajudar osprogramadores iniciantes. Elas também incluem starterkits, os quais são exemplos para ajudar os novatos aaprenderem. Há uma versão leve do MSDN chamadaMSDN Express, a qual é instalada com os produtos

Express.

Downloading os produtos ExpressTodas as versões Express já foram lançadas e podem

ser baixadas no seguinte endereço:http://msdn.microsoft.com/vstudio/express/

default.aspx

ConclusãoEste artigo forneceu uma visão geral dos novos

produtos Express Edition da Microsoft, os quais tem comopúblico alvo os desenvolvedores novatos e amadores. Osprodutos Express Editions fornecem uma solução de custozero para os desenvolvedores amadores que não precisamde todas as características do Visual Studio 2005completo.

Figura 5: O IDE do Visual C# 2005 Express Edition.

Visual Studio Express

Page 16: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

16

Visual Studio

Com o lançamento do .NET versão 2, odesenvolvimento de aplicações Web se tornou maisprodutivo do que nunca - especialmente quando énecessária a construção em larga escala, de aplicaçõesWeb direcionada a dados. Vários novos controles deservidor e classes do framework foram adicionadas naversão 2 do framework fazendo com que o processo degeração de páginas dinâmicas na Web necessitem demenos código e sejam mais simples. Porque isto importa?É realmente bem simples: menos código implica emmenos bugs, manutenção mais fácil e ótima performancegeral.

Adicionalmente a todos os fantásticos controles deservidor do ASP.NET que estão sendo lançados com aversão 2 do framework, também há 5 novos controles defonte de dados. Estes controles incluem o SqlDataSource,XmlDataSource, AccessDataSource, SiteMapDataSource,e ObjectDataSource. Usando os controles de fonte dedados em seus formulários Web ASP.NET você podesignificativamente minimizar a quantidade de códigonecessário para obter dados e fornecê-los aos controles deservidor, como os novos controles GridView ouDetailsView. Neste artigo focarei o controleObjectDataSource e demonstrarei como ele pode ser usadoamarrar o código de apresentação com a camada denegócios com o mínimo de esforço.

Porque usar o controle ObjectDataSource?Sou um grande fã do modelo de arquitetura n-tier,

onde a apresentação, negócios, e camada de dados sãoseparados em tarefas lógicas para uma ótima reutilizaçãode código e maior flexibilidade quando o código futuromuda (veja a Figura 1). Com o lançamento do controleObjectDataSource, ligar a camada de apresentação à

camada de negócios é mais fácil do que nunca - e emmuitos casos pode ser feito sem escrever uma simpleslinha de código.

O tamanho importaO tamanho importaO tamanho importaO tamanho importaO tamanho importaDiminua o código com oDiminua o código com oDiminua o código com oDiminua o código com oDiminua o código com o

controle ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSource

O tamanho importaO tamanho importaO tamanho importaO tamanho importaO tamanho importaDiminua o código com oDiminua o código com oDiminua o código com oDiminua o código com oDiminua o código com o

controle ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSourcecontrole ObjectDataSource

Figura 1: Um modelode arquitetura n-tierfornece umareutilização de códigomelhor e ajuda aisolar a camada deapresentação deoutras camadas, comoa camada de dados

O controle ObjectDataSource pode ser utilizadoarrastando e soltando-o a partir do toolbox do VisualStudio.NET 2005 (ou Visual Web Developer 2005) noformulário Web ASP.NET. Aqueles que preferirem entrarcom o código manualmente podem colocar algosemelhante a isto no editor de código:

<asp:ObjectDataSource ID="odsCustomers"runat="server" SelectMethod="GetCustomers" TypeName="BAL" DataObjectTypeName="Customer"/>

Page 17: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

17

O controle de fonte de dados ObjectDataSourcetrabalha usando reflexão para ler objetos específicos(BAL no código mostrado acima), e então chama mais dosmétodos membros. Enquanto isto talvez erga algumabandeira vermelha porque a reflexão depende deoperações após o preenchimento, o desempenho é umpouco melhor em testes não-científicos que eu executei.Obviamente você vai querer testar este contexto com suaaplicação para ter certeza que atende as suasexpectativas de desempenho.

Selecionar um objeto de negócios que o controleObjectDataSource pode utilizar é mais fácil utilizando-seum dos wizards disponíveis nos vários ambientes dedesenvolvimento do 2005 (veja a Figura 2). Os wizardsfazem a seleção dos objetos e métodos rapidamente e nãonecessitam que código seja escrito. Os métodos podem serescolhidos entre as operações select, insert, update, edelete.

Figura 2A: O wizard do controle ObjectDataSource permite queos objetos e métodos sejam selecionados rapida e facilmente sema necessidade de se escrever código. Esta imagem mostra comoum objeto de negócios pode ser selecionado.

Figura 2B: Esta imagem mostra como métodos sem um objeto denegócios podem ser usados para fazer várias operações CRUD

Após um objeto de negócios e os métodos associadosterem sido atribuídos ao ObjectDataSource, ele pode serusado como fonte de dados para os controles de servidorcomo o DropDownList, GridView, DetailsView, e outros. Ocódigo seguinte mostra como um controle GridViewcontrola a propriedade DataSourceID e pode ser usadapara fazer referência ao controle ObjectDataSourcechamado odsCustomers (o controle GridView substitui ocontrole DataGrid encontrado no ASP.NET 1.1):

<asp:GridView ID="gv" runat="server" DataSourceID="odsCustomers" />

Referenciando o controle de fonte de dados, o controleGridView será automáticamente propagado com qualquerdados sem a necessidade de se escrever código adicional. Aamarração de dados no .NET versão 1.1 era justa, masvocê pode ver que é muito mais fácil na versão 2 - mesmoquando os dados são obtidos da camada de negócios ou dacamada de código de dados.

Criando a camada de negócios e dadosAgora que já temos alguns dos fundamentos do

controle ObjectDataSource, vamos ver como ele pode sercolocado para usar uma camada juntamente com camadasdiferentes de código. Primeiro precisaremos escrever asclasses da camada de dados e de negócios que apontam asregras de negócio e acesso a dados, respectivamente. Afigura 3 mostra um método chamado GetCustomers naclasse da camada de dados chamada DAL. Este métodochama uma stored procedure do SQL Server que retornaum conjunto de objetos Customer de todos os clientes dobanco de dados Northwind. Cada objeto do cliente é criadoe preenchido com a chamada de outro método chamadoFillCustomer. O objeto Customer contém as propriedadesbásicas como CustomerID, ContactName, City, ePostalCode, e outros mais.

public static Customer[] GetCustomers() { Customer[] custs = null;

Visual Studio

Page 18: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

18

DbConnection conn = null; DbDataReader reader = null; try { conn = GetConnection("NorthwindConnStr"); conn.Open(); DbCommand cmd = conn.CreateCommand(); cmd.CommandText = "GetCustomers"; cmd.CommandType =

CommandType.StoredProcedure; reader = cmd.ExecuteReader(); custs = FillCustomer(reader); } catch (Exception exp) { HttpContext.Current.Trace.Warn("Erro", "Erro no GetCustomers: " + exp.Message); return null; } finally { if (conn != null) conn.Close(); if (reader != null) reader.Close(); } return custs;}

private static DbConnectionGetConnection(string connStrName) { ConnectionStringSettings s = ConfigurationManager.ConnectionStrings[connStrName]; DbProviderFactory f = DbProviderFactories.GetFactory(s.ProviderName); DbConnection conn = f.CreateConnection(); conn.ConnectionString = s.ConnectionString; return conn;}private static Customer[]FillCustomer(DbDataReader reader) { List<Customer> custList = newList<Customer>(); while (reader.Read()) { Customer cust = new Customer(); cust.Address =reader["Address"].ToString(); cust.City = reader["City"].ToString(); cust.CompanyName =

reader["CompanyName"].ToString(); cust.ContactName =

reader["ContactName"].ToString(); cust.ContactTitle =

reader["ContactTitle"].ToString(); cust.Country =

reader["Country"].ToString(); cust.CustomerID =

reader["CustomerID"].ToString(); cust.Fax = reader["Fax"].ToString(); cust.Phone = reader["Phone"].ToString(); cust.PostalCode =

reader["PostalCode"].ToString(); cust.Region = reader["Region"].ToString(); custList.Add(cust); } return custList.ToArray();}

Figura 3: O método GetCustomers aponta toda a funcionalidadede acesso à dados e retorna à chamada o resultset contend osregistros dos clientes. O método GetCustomers mostrado aqui éum membro da classe chamada DAL (data access layer -camada de acesso a dados) .

Outro método chamado GetConnection também émostrado na figura 3 demonstra o uso da nova classeDbProviderFactory encontrada no .NET versão 2. Emborauma discussão completa desta classe e suas classesrelacionadas esteja além do escopo deste artigo, empoucas palavras, a classe DbProviderFactory permite oacesso a dados com código genérico que não é a camadaespecífica do provedor do banco de dados como a Microsoftou a Oracle. Adicionalmente ao uso da classeDbProviderFactory, o método GetConnection na figura 3também mostra o acesso aos novos ajustes<connectionStrings> com o uso do web.config usando aclasse ConfigurationManager.

Após o código da camada de acesso a dados ser escrito,uma classe de camada de negócios é necessária parachamar o método GetCustomers com a camada de dados.A figura 4 mostra uma camada de negócios simpleschamada GetCustomers que é membro de uma classechamada BAL. Embora bem simples, o GetCustomerspode incluir regras de negócios necessárias pela aplicação,como um filtro ou regras de cache.

public static Customer[] GetCustomers() { return DAL.GetCustomers();}

Figura 4: O método GetCustomers mostrado aqui é membro daclasse BAL (business access layer - camada de acesso denegócios) que aponta a camada de negócios na execução docódigo.

Visual Studio

Page 19: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

19

Agora o código da camada de negócios e dados foramescritas para selecionar os clientes do banco de dadosNorthwind, o ObjectDataSource pode ser combinado com onovo controle de servidor GridView para facilmente atar acamada de apresentação à camada de negócios e mostraros clientes aos usuários finais. Passando o mouse sobre ocontrole ObjectDataSource enquanto se está no modo deprojeto no Visual Studio.NET 2005 (ou Visual WebDeveloper 2005), a nova funcionalidade de smart tagaparecerá como mostrado na figura figura 5. SelecionadoConfigure Data Source a classe de negócios BAL pode serselecionada, bem como o método GetCustomers (veja afigura 2 como um exemplo do wizard ObjectDataSource).

controle ObjectDataSource. No entanto, nada foimencionado sobre as operações de como inserir, atualizarou apagar. Felizmente, adicionar esta funcionalidade nãoé muito difícil. Primeiro, os métodos apropriados devemser adicionados às camadas de dados e de negócios. Ocódigo exemplo incluído com este artigo define os métodosDeleteCustomer, UpdateCustomer, e InsertCustomer comcada classe de camada.

Fazer as operações de atualização ou apagar éextremamente fácil usando o controle GridView junto como controle ObjectDataSource. No entanto, inserir registrosnecessitam de mais código do que eu achava necessário,

então eu combinei o controle GridView como controle DetailsView porque o controleDetailsView foi projetado para lidar comas operações de atualização, apagar einserção diretamente.

Se você não está familiarizado com ocontrole DetailsView, ele é usado paramostrar um registro por vez e permite aousuário final modificar o registro se assimdesejar. Um exemplo de edição de umregistro é mostrado na figura 6.

Como os dois controles estão sendousados para mostrar dados (GridView eDetailsView), dois controlesObjectDataSource são necessários. Oprimeiro seleciona todos os dados docliente e os passa para o controle GridViewmostrar. Uma vez que o usuário selecioneum registro no GridView, o Segundocontrole ObjectDataSource pega os dadosapropriados do cliente baseado na seleçãodo CustomerID do GridView e mostra osdados do cliente usando o controleDetailsView.

O segundo controle ObjectDataSourcetambém mostra o registro selecionado no controleDetailsView para ser atualizado, apagado ou inseridochamando os métodos da classe da camada de negócios.Estas operações são possíveis usando o wizardObjectDataSource (novamente, veja a figura 2) evirtualmente não requer código a ser escrito. De fato,usando somente os controles GridView, DetailsView, eObjectDataSource, uma quantidade minima de código nacamada de apresentação deve ser escrita, a qual aponta o

Figura 5: A nova funcionalidade smart tag encontrada nosutilitários de desenvolvimento do 2005 permite fácil acesso àsfuncionalidade dos objetos. Este exemplo mostra como acessar owizard ObjectDataSource's e selecionar o objteto de negócios e osmétodos associados.

Atualizando, apagando e inserindoregistros

Até este ponto você viu como os registros podem serselecionados usando a arquitetura de camadas e o

Visual Studio

Page 20: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

20

refresh do controle GridView quando cada registro formudado. Um pedaço do código é mostrado abaixo:

//Atualiza o GridView quando o controleDetailsView (dvCustomer)//dispara o evento insert então um novoregistro é mostrado.protected void dvCustomer_ItemInserted(objectsender, DetailsViewInsertedEventArgs e) { this.gvCustomers.DataBind();

}

ConclusãoUsar o controle ObjectDataSource permitirá que você

Figura 6: Editar registros em um banco de dados é facilmente feito usando o novo controle DetailsView. Este exemplo mostracomo usar o controle GridView para permitir que o usuário selecione um registro específico e então edite o registro com o controleDetailsView

se concentre em partes importantes de sua aplicação enão se preocupe muito com as camadas de apresentação ede negócios. Isto deve levar a uma redução do tempo dedesenvolvimento, menos bugs, e, por fim, clientes maisfelizes.

O controle ObjectDataSource certamente não é perfeitopara cada situação onde o ASP.NET Web Form precisaconsumir a camada de dados e negócios; executei váriasinstâncias onde eu tive trabalho fora do normal parapreencher os controles e tive de escrever código adicionalpara suportar isso. No entanto, quando usadoapropriadamente, isto pode definitivamente acelerar seudesenvolvimento de aplicações usando o ASP.NET 2.0.

Visual Studio

Page 21: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

21

Office 12 (Beta)

Novamente, o The Club traz até você em primeira mãoinformações sobre mais um lançamento da Microsoft,agora sobre o Microsoft Office 12 (talvez Office 2006). OThe Club teve acesso a uma cópia beta do Office 12, a qualtive o prazer de testar e escrever este artigo que você estálendo agora. A tendência é clara: a Microsoft estáinvestindo pesado em deixar a interface de usuário muitomais bonita (como já tinha dito com a matéria sobre oWindows Vista no mês passado) e também estápreocupada com a funcionalidade prática do sistema.Posso dizer em primeira mão que gostei muito do novoOffice (apesar dos bugs que são normais numa versãobeta). Não tive problemas para fazer a instalação, sendosomente necessário que o Office 2003 fossecompletamente desinstalado. Alguns aplicativos jámostram os novos recursos, outros ainda estão"engatinhando", mas isso não tira o valor das inovações.Se você se lembra, não houvepraticamente alteraçõesentre o Office XP e o Office2003. Isso não se aplica nestanova versão. Há muitasalterações, e para melhor. Ovisual está mais limpo, asinformações e ferramentasestão mais à mão, e osaplicativos estão maisinteligentes e interativos.

DesafiosQuando a Microsoft

planejou a próxima versão doMicrosoft Office, ela levou emconsideração o desafio detornar as principaisaplicações mais fáceis deusar. Levando emconsideração a usabilidadeextensivo de dados e osrecentes avanços de hardwaree software, a equipe de

O novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft OfficeO novo Microsoft Officedesenvolvimento do Microsoft Office fez as maioresinovações na interface de usuário (UI) da última década. Oresultado destes esforços é uma nova interface que tornamais fácil para as pessoas encontrar e usar ascaracterísticas apropriadas que elas precisam parachegar aos resultados que elas querem.

A próxima versão dos produtos do Microsoft Officeapresentará uma área de trabalho mais simples,arrumada, que minimize as distrações e habilite aspessoas a encontrarem os resultados que elas queremmais rápido e facilmente.

Metas de projeto e acessoNas várias versões do Microsoft Office, as pessoas

interagiam com as aplicações através de um sistema demenus, toolbars, painéis de tarefas, e caixas de diálogo.

Novo Word

por Celso Jefferson Paganelli

Page 22: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

22

Enquanto este sistema fornecia com sucesso o acesso auma grande variedade de características, o desafio paraaumentar as capacidades disto para permitir que aspessoas tivessem uma forma adequada de tiraremvantagem delas foi aumentando. A meta é escrever umanova UI para obter uma nova interface de usuário quehabilita os usuários a encontrarem com mais sucesso ascaracterísticas avançadas do Microsoft Office. Uma metaadicional importante foi preservar a area de trabalhoarrumada para reduzir a distração dos usuários, assimeles podem passar mais tempo com sua energia focada notrabalho. Com estas metas em mente, foi desenvolvidoalgo bem próximo dos resultados esperados, que simpli-ficam como os usuários chegarão aos resultados desejadosquando trabalharem com a área de trabalho do Office.

Características chavesEnquanto que o visual geral é um projeto totalmente

novo para as aplicações, testes recentes indicam que aspessoas rapidamente se sentem em casa com a novainterface de usuário e rapidamente se acostumam com anova maneira destas aplicações trabalharem. Falo issonão só por mim como também por outras pessoas queinstalaram o novo Office aqui no trabalho. Eu levei menosde 5 minutos para me adaptar e encontrar algumasferramentas que precisava, isso não foi diferente comoutros colegas de trabalho. A facilidade das quais aspessoas se beneficiarão com a nova interface é devido àsimplicidade das seguintes novas características:

Command TabsOs tradicionais menus e toolbars foram substituídos

por um conjunto de Command Tabs. Apresentadosgraficamente, os Command Tabs mostram os comandosque são mais relevantes para cada tarefa com o MicrosoftOffice Word, PowerPoint, Excel, ou Access. Por exemplo, oWord tem um Command Tab para escrever, inserir, pagelayout, trabalhar com referências, enviar correspondência,e revisar documentos. O Excel tem um conjunto similar deCommand Tabs que fazem sentido às planilhaseletrônicas: criar folhas de trabalho, inserir objetos comográficos, page layout, trabalhar com fórmulas, gerenciardados, e revisão. Os Command Tabs simplificam o acessoàs características das aplicações porque eles organizam

O conjunto primário do Command Tabs para a próxima versão do Microsoft Office Word.

os comandos de uma maneira que correspondemdiretamente ao desempenho das tarefas das pessoasnestas aplicações.

Command Tabs ContextualCertos conjuntos de comandos são relevantes somente

quando objetos de um tipo particular estão sendoeditados. Por exemplo, os comandos para editar um

Command Tabs Contextual são chamados conforme anecessidade da atenção do usuário em tempo apropriado.

Novo Excel

Office 12 (Beta)

Page 23: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

23

gráfico no Excel não são relevantes até que o gráficoapareça numa planilha e que o usuário esteja com o foconele e o esteja modificando. Na versão atual do MicrosoftOffice, estes comandos podem ser difíceis de seremencontrados ou podem se tornar evasivos. Na próximaversão do Excel, ao clicar num gráfico, faz com que umCommand Tab Contextual apareça, com comandos quesão relevantes para a edição de gráficos próximo aosoutros Command Tabs do Excel. Estes Command TabsContextual somente aparecerão quando eles foremnecessários e tornem muito mais fácil encontrar e usar oscomandos necessários para a operação correta enquanto éfácil voltar a trabalhar no seu documento.

GaleriasAs galerias são o coração das novas aplicações

reprojetadas. As galerias fornecem aos usuários umconjunto de resultados a serem escolhidos quandotrabalhando em seus documentos, planilhas,apresentações, ou banco de dados do Access. Porapresentar um simples conjunto de resultados potenciais,ao invés de complexas caixas de diálogo com numerosasopções, as galerias simplificam o processo produzindo umtrabalho com visual profissional. As interfacestradicionais de caixas de diálogo ainda estão disponíveispara aqueles que desejam um alto grau de controle sobreo resultado da operação.

As galerias simplificam muitas operações apresentando um conjunto deresultados que os usuários podem simplesmente "escolher e clicar" para chegaraos resultados desejados.

Live PreviewLive Preview é uma nova tecnologia que mostra os

resultados da aplicação ou edição de uma formataçãoconforme o usuário move o ponteiro sobre os resultadospresentes na galeria. Estas novas capacidades dinâmicassimplificam o processo de definição da página, edição, eformatação, assim os usuários podem criar excelentesresultados em menos tempo e com menos esforço.

Estes elementos são apenas algumas das novastecnologias que se combinam à novainterface de usuário do Microsoft Office.

BenefíciosA meta da nova interface de usuário do

Microsoft Office é deixar as aplicações doOffice mais fáceis de se trabalharem. Comoos comandos estão melhor organizados eapresentados de uma maneira quecorresponde a como as pessoas trabalham,os usuários do Microsoft Office estarãoaptos a facilmente encontrar e utilizar asnovas capacidades avançadas do MicrosoftOffice. A próxima versão do sistema deprodutos Microsoft Office com visualsimplificado e a orientação a resultadosdinâmicos das galerias habilitarão osusuários a passar mais tempo focados emseu trabalho e menos tempo procurando porferramentas nas aplicações. Comoresultado, com o novo Microsoft Office aspessoas estarão aptas a produziremmelhores resultados mais rapidamente.

Novo Access

Office 12 (Beta)

Page 24: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

24

Microsoft Office DiagnosticsUma nova ferramenta muito útil e interessante

acompanha este novo Office.

Trata-se do Microsoft Office Diagnostics, que ficavigiando constantemente a estabilidade das aplicações doOffice, e caso um problema ocorra (no meu caso ele teve deocorrer três vezes seguidas), a ferramenta é acionada, fazvários testes (quando aconteceu comigo foram mais de 50)de forma rápida e tenta corrigir o máximo de problemasque encontra.

No meu caso especificamente, houve um problema como Outlook, no qual a ferramenta detectou 10 problemas(principalmente compatibilidade de versão) e conseguiuresolver 3.

A boa notícia é que não tive mais problemas com oOutlook depois disso.

Algumas questões dosdesenvolvedores

A nova interface de usuário é extensível?

Sim, um conjunto robusto de capacidades estãodisponíveis para desenvolvedores de aplicações paraadicionarem funcionalidade à nova geração do MicrosoftOffice de uma maneira que se integram perfeitamente ànova interface de usuário.

Os desenvolvedores estarão aptos a adicionaremCommand Tabs, Command Tabs Contextuais e galerias.Adicionalmente, os desenvolvedores estarão aptos aintegrarem seus comandos aos Command Tabs existentesou em seus próprios.

Os add-ins existentes para o Microsoft Officetrabalharão com a nova interface?

Sim, os comandos existentes dos menus add-ins etoolbars aparecerão automaticamente no novo Add-InCommand Tab que aparecerá quando add-ins para oMicrosoft Office estiverem presentes.

Os desenvolvedores devem usar a nova interface deusuário como modelo para a interface de usuário de suasaplicações?

A nova interface de usuário da Microsoft foi projetadaespecificamente para o Word, Excel, PowerPoint e Access.

Novo PowerPoint

Novo FrontPage

Novo Outlook

Office 12 (Beta)

Page 25: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

25

Embora não tenha a intenção de ser um modelo deinterface de usuário para todas as aplicações, osprojetistas de interface de usuário talvez encontremalguns princípios que vêm agregado à nova interface deusuário do Office que eles poderão agregar às suaspróprias aplicações.

Haverá um suporte à programação para a adoção danova interface de usuário da Microsoft?

A Microsoft ainda está trabalhando nodesenvolvimento da nova interface de usuário e estáconsiderando as opções disponíveis para tornar o suporteà programação disponível.

Leia mais em:http://www.microsoft.com/office/preview/default.mspx

Sequência de imagens do Microsoft Office Diagnostics em açãono Outlook

Office 12 (Beta)

Page 26: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

26

Gravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGno SQLServer 2000no SQLServer 2000no SQLServer 2000no SQLServer 2000no SQLServer 2000

SQLServer

Considerações iniciaisTemos recebido várias consultas a

respeito de qual campo e como gravarimagens do tipo JPEG em tabelas noSQLServer 2000. A princípio, o quepoucos usuários sabem é que o campoIMAGE no SQLServer na realidade é umcampo BLOB no qual podemos gravarqualquer tipo de dado em formatobinário, seja imagem, arquivos diversos,texto formatado, etc. Neste artigo ireidemonstrar como utilizar este campopara armazenar imagens no formatoJPEG e posteriormente estar carregandoestas imagens do banco para umcomponente Image...

Definindo a tabelaPara começar, abra o Query

Analyser,crie um banco de dados ouutilize um banco já existente no qualiremos criar uma tabela parautilizarmos neste projeto de exemplo. Alistagem 1 apresenta o script desta tabela.

if exists (select * from dbo.sysobjects whereid = object_id(N'[dbo].[Imagens]') andOBJECTPROPERTY(id, N'IsUserTable') = 1)drop table [dbo].[Imagens]GO

CREATE TABLE [dbo].[Imagens] ([ID] [int] IDENTITY(1, 1) NOT NULL ,[Descricao] [varchar] (50)COLLATE Latin1_General_CI_AS NULL ,

[Imagem] [image] NULL) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO

Listagem 1 - Tabela Imagens.

Definindo o projetoNosso próximo passo será criar um novo projeto no

Delphi e salvá-lo. A figura 1 apresenta o layout sugerido eos componentes que serão necessários neste contexto.

Gravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGGravando Imagens JPEGno SQLServer 2000no SQLServer 2000no SQLServer 2000no SQLServer 2000no SQLServer 2000

Por Alessandro Ferreira, [email protected]

Figura 1 - Layout sugerido

Page 27: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

27

Aponte a conexão (AdoConnection) para o banco dedados que contém a tabela IMAGENS, depois ligue oADODataSet (adsImagens) ao ADOConnection e oDataSource (dsImagens) ao ADODataSet. Não irei entrarem detalhes a respeito das configurações destescomponentes, pois foge do contexto deste artigo. Casotenha dúvidas em relação aos componentes ADO poderáconsultar o artigo: "Acesso a Banco de Dados com ADO"publicado em nossa revista de Julho/2000 na coluna doSant´Anna.

Observe que utilizamos um componente TImage enão TDBImage, pois iremos trabalhar com imagensJPEG e o TDBImage não dá suporte a este formato.

ProcedimentosPartiremos agora para a codificação dos

procedimentos que irão nos auxiliar em gravar e lerimagens no SQLServer. Como mencionei no início desteartigo, o campo do tipo IMAGE no SQLServer possibilitaarmazenar qualquer formato de arquivo, desde quearmazenado em formato binário. Para isso, iremosimplementar dois procedimentos: LoadFromBlob eSaveToBlob, ambos recebendo como parâmetros umobjeto TField que irá representar o campo noADODataSet e um objeto TStream que possibilitarágravar/ler em formato binário, acompanhe a listagem 2.

function LoadFromBlob(const AField: TField;const Stream: TStream): boolean;var ResultStr: string; PResultStr: PChar;begin Result := false; if (Assigned(AField)) and(Assigned(Stream)) then begin try ResultStr := AField.Value; PResultStr := PChar(ResultStr); Stream.Write(PResultStr^,

Length(ResultStr)); Stream.Seek(0,0); Result := true; except end; end;end;

function SaveToBlob(const Stream: TStream;const AField: TField): boolean;var FieldStr: string; PFieldStr: PChar;begin Result := false; if (Assigned(AField)) and(Assigned(Stream)) then begin try Stream.Seek(0,0); SetLength(FieldStr, Stream.Size); PFieldStr := PChar(FieldStr); Stream.Read(PFieldStr^, Stream.Size); AField.Value := FieldStr; Result := true; except end; end;end;

Listagem 2 - Procedimentos para gravar e ler nocampo IMAGE.

Vale ressaltar que os procedimentosLoadFromBlob e SaveToBlob não são exclusivospara gravar e ler imagens e sim, servem paraarmazenar qualquer tipo de conteúdo binário queestiver no TField que for passado como parâmetro eda mesma forma, irá retornar qualquer conteúdoarmazenado via Stream.

Prosseguindo, iremos implementar dois procedimentosespecíficos para gravar e ler JPEG, nos quais, iremos fazeruso dos procedimentos anteriormente criados, veja alistagem 3.

function AddJpgToTable(Imagem: String;Campo: TBlobField): boolean;

var AJpeg: TJpegImage; MS: TMemoryStream;begin Result := false; AJpeg := TJpegImage.Create; MS := TMemoryStream.Create; try AJpeg.LoadFromFile(Imagem); AJpeg.SaveToStream(MS);

SQLServer

Page 28: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

28

Result := SaveToBlob(MS, Campo); finally AJpeg.Free; MS.Free; end;end;

function LoadJpgFromTable(Campo: TBlobField;var AJpeg: TJpegImage): boolean;var MS: TMemoryStream;begin Result := false; AJpeg := TJpegImage.Create; MS := TMemoryStream.Create; try if (LoadFromBlob(Campo, MS)) then begin AJpeg.LoadFromStream(MS); Result := true; end; finally MS.Free; end;end;

Listagem 3 - Procedimentos para gravar e ler JPEG.

O procedimento AddJpgToTable, como o próprio nomesugere irá receber o caminho (path) do arquivo JPEG e emqual field (campo) ele deverá injetar o arquivo JPEG.Neste procedimento criamos um objeto TJpegImage queirá ler o arquivo em disco e um objeto TMemoryStreamque irá receber a representação binária do arquivocarregado no TJpegImage e para finalizar, chamamos oSaveToBlob que irá atribuir do Stream para o campo.

O procedimento LoadJpgFromTable recebe comoparâmetro o Field (campo) onde a imagem será carregadae um objeto TJpegImage (por referência) que irá devolver aimagem JPEG para ser apresentada no componenteTImage. Dentro deste procedimento efetuamos a chamadado procedimento LoadFromBlob que será o responsávelem acessar o campo e extrair a imagem no mesmoarmazenada.

Finalizando a codificaçãoIremos agora concluir a codificação do nosso projeto de

exemplo efetuando a chamada aos procedimentosimplementados anteriormente. Teremos a necessidade de

um objeto TJpegImage auxiliar, declare-o abaixo dasessão var de sua unit, veja a listagem 4.

var Form1: TForm1; temp: TJpegImage;

implementation

{$R *.dfm}

Listagem 4.

Este objeto "temp" poderá ser instanciado na sessãoinitialization de nossa unit, a qual deve ser declara antesdo "end." Da mesma, confira na listagem 5.

initialization temp := TJpegImage.Create;finalization temp.Free;

end.

Listagem 5.

Dando continuidade, vamos efetuar a codificação doevento OnClick do btnProcurar que será responsável emacionar o OpenPictureDialog para permitir ao usuárioprocurar a imagem em disco, veja a listagem 6.

procedure TForm1.btnProcurarClick(Sender:TObject);begin if dsImagens.State in [dsInsert, dsEdit]then if pDialog.Execute then begin imgEx.Picture.LoadFromFile(pDialog.FileName); if DBEdit_Desc.Text = '' then DBEdit_Desc.Text := pDialog.FileName; end;end;

Listagem 6 - OnClick do btnProcurar.

Somente iremos permitir ao usuário procurar umaimagem em disco se a tabela estiver em modo de ediçãoou inserção visto que a imagem selecionada seráadicionado ao campo imagem da tabela IMAGENS. Após

SQLServer

Page 29: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

29

ser confirmada a seleção da imagem, fazemos a atribuiçãoda mesma ao componente TImage para ser apresentadaao usuário e caso não seja informada nenhuma descriçãono DBEdit_Descricao iremos atribuir o caminho e o nomeda imagem como descrição.

Neste momento, ainda não atribuímos a imagemselecionada ao campo da tabela, a imagem por enquantoestá apenas no componente TImage. A atribuição daimagem dar-se-á no momento que o usuário resolvergravar o registro e o melhor local para isso é o eventoBeforePost do ADODataSet, veja a listagem 7.

procedure TForm1.adsImagensBeforePost(DataSet: TDataSet);

begin if FileExists(pDialog.FileName) then AddJpgToTable(pDialog.FileName,

adsImagensImagem);end;

Listagem 7 - BeforePost do adsImagens.

Se compilarmos e executarmos nosso projeto deexemplo neste momento, a imagem será armazenada natabela, porém, para podermos visualizar as imagens(referente cada registro armazenado na tabela ao navegarvia DBNavigator) no componente TImage deverá efetuarum controle de navegação para que a cada registroposicionado possamos obter a imagem do campo eapresentá-la no TImage. Um ótimo local para isso é oevento AfterScroll do componente ADODataSet(adsImagens), pois este evento é acionado imediatamenteao navegarmos pela tabela, acompanhe a listagem 8.

procedureTForm1.adsImagensAfterScroll(DataSet:TDataSet);var AJpeg: TJpegImage;begin if (DataSet.State = dsBrowse) and not

(adsImagensImagem.IsNull) then if LoadJpgFromTable(adsImagensImagem,

AJpeg) then imgEx.Picture.Assign(AJpeg); AJpeg.Free;end;

Listagem 8 - AfterScroll do adsImagens.

Primeiro, verificamos o estado da tabela e somenteiremos obter a imagem se a tabela estiver em modo"browse" e o conteúdo do campo imagem não for nulo.Estando estas duas condições satisfeitas, efetuamos achamada do procedimento LoadJpgFromTable e caso oretorno seja verdadeiro atribuímos a imagem ao TImage.

Bem, estamos quase terminando! Lembra daqueleobjeto TJpegImage que declaramos e instanciamosanteriormente? Pois bem, iremos utilizá-lo agora. Naverdade, o tratamento a seguir é apenas por uma questãode estética. Quando o usuário for adicionar um novoregistro clicando no botão (+) do DBNavigator, como ocomponente TImage não possui nenhuma ligação com atabela ele irá continuar mostrando a imagem do registroanterior, e isso poderia confundir nossos "experts"usuários... Para evitar este problema, no eventoAfterInsert do ADODataSet iremos limpar a imagemexistente no TImage. Você pode estar se perguntando:Onde entra o objeto TJpegImage nisso? Respondo: Se ousuário adicionar um novo registro e salvá-lo, o objetoTJpegImage não terá nenhuma finalidade, contudo, se ousuário adicionar um novo registro e cancelar, nossoTImage não irá retornar automaticamente para imagemanteriormente apresentada, visto ele não ter nenhumaligação com a tabela e por isso, no evento AfterInsert,antes de limpar o TImage armazenaremos a imagematual no objeto JPegImage (temp) e caso ele venha acancelar retornaremos a imagem ao TImage no eventoAfterCancel do ADODataSet. O código de ambos oseventos estão a seguir na listagem 9.

procedure TForm1.adsImagensAfterInsert(DataSet: TDataSet);

begin temp.Assign(imgEx.Picture); imgEx.Picture := nil;end;

procedure TForm1.adsImagensAfterCancel(DataSet: TDataSet);

begin imgEx.Picture.Assign(temp);end;

Listagem 9 - AfterInsert e AfterCancel.

Com isso finalizamos nosso projeto, compile, execute ese tudo estiver OK o resultado será parecido com oapresentado na figura 2.

SQLServer

Page 30: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

30

Considerações finaisDemonstrei neste artigo como salvar imagens JPEG

em banco de dados SQLServer. Como já mencionadoanteriormente, estes procedimentos podem ser utilizadospara ler e gravar qualquer tipo de arquivo que venha anecessitar guardar em seu banco de dados, bastando paraisso, converte-lo em formato binário.

Abraço e sucesso à todos,

DownloadO projeto de exemplo referente este artigo está disponível para

download no endereço:http://www.theclub.com.br/revista/download/sqlserverjpg.zip.

Sobre o autorAlessandro Ferreira,Consultor Técnico do The [email protected]

SQLServer

Estamos chegando ao final de mais um ano. Esperamos que nossos serviços tenhamatendido as expectativas de todos vocês, e que o trabalho de todos tenha sido produtivo.Agora neste final de ano, vamos aproveitar dois feriados para darmos férias para nossosconsultores. Portanto o suporte técnico não atenderá no período de 16/12/2005 à 01/01/2006,voltando as suas atividades normais a partir de 02/01/2006 após as 13:00 horas.

ATENÇÃO

Figura 2

Page 31: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,

31

Perguntas & Respostas

Pergunta: Preciso criar via minha aplicação umatalho na área de trabalho do

Windows, fazendo a verificação prévia da suaexistência.

Resposta: Para criar um atalho poderá utilizar aseguinte rotina:

implementationuses ShlObj, ActiveX, ComObj;{$R *.dfm}

procedure CriaShortCut(aNome, aFileName:string; aLocation: integer);var IObject : IUnknown; ISLink : IShellLink; IPFile : IPersistFile; PIDL : PItemIDList; InFolder : array[0..MAX_PATH] of Char; TargetName : String; LinkName,s : WideString;begin TargetName := aFileName;

IObject :=CreateComObject(CLSID_ShellLink); ISLink := IObject as IShellLink; IPFile := IObject as IPersistFile;

with ISLink do begin SetPath(pChar(TargetName)); SetWorkingDirectory(pChar(ExtractFilePath

(TargetName))); end;

SHGetSpecialFolderLocation(0, aLocation, PIDL);

SHGetPathFromIDList(PIDL, InFolder);

s := InFolder; LinkName := s + '\' + aNome + '.LNK';

if FileExists(LinkName) then ShowMessage('Atalho já existe!') else IPFile.Save(PWChar(LinkName), false);

end;

// Para utilizar:

CriaShortCut('Calculadora','c:\windows\system32\calc.exe',CSIDL_DESKTOP);

Dúvida enviada por Nirlan E. Fundão, São Mateus/ES.

Pergunta: Para não ser necessário distribuirDBEXPINT.DLL existe alguma unit para ser adicionadaem uses como ocorre com MIDAS.DLL e MidasLib?

Resposta: Poderá declarar a unit dbExpInt:

uses Windows, Messages, SysUtils, Variants,

Classes, Graphics, Controls, Forms, Dialogs, dbExpInt, MidasLib;

Dúvida enviada Paulo Geloramo, Assis/SP.

Page 32: EDITORIAL · Programadores Delphi ? ... como uma biblioteca de classes para o compilador Free Paascal** cujo objetivo é emular o Delphi. Assim como o Free Pascal,