Boletim Pascal #42
Os exemplos do código fonte desta edição estão disponíveis para download.
![]() |
![]() |
Boletim Pascal #42 - 09 DE ABRIL DE 2003 (Original: 16-JAN-2003) Índice 1. Algumas Palavras dos Editores 2. TDataSet => Excel (OLE/EXCEL não necessários) Classe TDataSetToExcel 3. Aplicações distribuídas do jeito fácil (I) Como trocar dados entre processos num aplicação distribuída 4. Chamadas à Qt geram problemas na instalação de componentes no IDE do Kylix BCB 5. Assembler nativo em Delphi (VI) - Chamando procedimentos externos 6. Fóruns / Listas 7. Delphi na Rede - Sites em português - Componentes, Bibliotecas e Utilidades . Shareware/Comercial . Freeware - Artigos, Dicas e Truques - Tutoriais - Outros Links ________________________________________________________________________ 1. Algumas Palavras dos Editores Editorial da Versão em Português -------------------------------- Mais uma vez voltamos a avançar rapidamente com as traduções dos boletins. Isso graças ao esforço e cooperação de nossos tradutores. Já estamos num ritmo bastante avançado e no prazo de mais algumas semanas estaremos em dia com as traduções. Por enquanto, vocês continuarão a ler os editoriais em inglês com algum atraso. Agora chega de conversa. Divirtam-se com nosso boletim! Demian Lessa demian@knowhow-online.com.br Editor da versão em português __________________ Editorial da Versão em Inglês ----------------------------- Estou orgulhoso em anunciar que o boletim alcançou quase 7500 assinantes e que a edição em inglês está no topo da categoria Delphi no Yahoo! Grupos: http://dir.groups.yahoo.com/dir/Computers___Internet/Programming_Languages/ Delphi?show_groups=1 A propósito, delphi-en --nossa lista de discussão para programadores Delphi de nível intermediário-- tem aproximadamente 1,000 assinantes e está listada em décimo na mesma página. Mês passado eu fiquei bastante feliz ao ver o Pascal Newsletter mencionado como "Great Delphi Newsletter" no Boletim #100 do Delphi3000.com. Eu apreciei demais a menção já que sou um grande fã do D3K e o considero o melhor site sobre Delphi na rede. Você pode constatar que o Dave sempre inclui referências a artigos de http://www.delphi3000.com na seção Delphi na Rede. Gostaria de agradecer a Mike Heydon, Eugene Mayevski e Richard Winston por colaborarem com artigos nesse número e fico feliz em presentear Eugene Mayevski com uma licença do llPDFLib: * llPDFLib v1.1 - por llionsoft, Shareware ($70, $280 com fontes) llPDFLib é uma biblioteca Object Pascal para a criação de documentos PDF. Não utiliza DLLs ou software externo de terceiros para gerar os PDFs. A biblioteca consiste de um componente TPDFDocument com métodos e propriedades análogos ao TPrinter do Delphi, mas orientados à geração do arquivo PDF. http://www.llion.net/ Para o próximo número, teremos os seguintes prêmios disponíveis para nossos colaboradores (de artigos em inglês): * SDL Component Suite 7.0 - por Software Development Lohninger ($99) O SDL Component Suite oferece uma ampla variedade de copmponentes para aplicações científicas e de engenharia (matemática, estatística, química, gráficos, visualização de dados, transformações de Fourier, plotagem em 3D, mapas geográficos, ajuste de curvas, etc). Disponível para Delphi 3-7 e BCB 4-6. http://www.lohninger.com/sdlindex.html * TSDBGridFooter v2.0 por Jovan Sedlan, Shareware ($74.50) Esse componente é uma ferramenta poderosa que permite cálculos automáticos no seu DBGrid e exibe essa informação num rodapé configurável abaixo do grid. É projetado para funcionar com o TSDBGrid (também incluído) apesar de poder ser utilizado em qualquer descendente de TCustomDBGrid. http://www.sedlan.com/dbgrid_footer.php Nas notícias, no site da Borland existe um patch oficial para o Delphi 6 e uma atualização para o Delphi for .NET preview (disponível apenas para os usuários registrados do Delphi 7). Verifique a seção Outros Links para uma breve descrição e os URLs correspondentes. Espero que gostem deste número. Cordialmente, Ernesto De Spirito boletim-pascal-owner@yahoogrupos.com.br __________________ Colaboraram nesse número: Dave Murray and Charl Linssen ________________________________________________________________________ Object Inspector 1.2 (by Greatis Software) is a suite of components that includes a special component for easy and convenient access to all published properties and events of any component, a common inspector that can be used for inspecting everything in your application, and a ready-to-use component inspector that mimics the IDE Object Inspector. It has different paint styles, as well as font and color customization features. For Delphi 3-7 and BCB 5-6. http://www.greatis.com/objinsp.htm ________________________________________________________________________ 2. TDataSet => Excel (OLE/EXCEL não necessários) Classe TDataSetToExcel Direitos Autorais (c) 2002 Mike Heydon Tradução: Fabio Barreto Esta classe irá produzir uma planilha do Excel a partir de um TDataSet. Não é preciso utilizar OLE tampouco instalar o Excel para criar o arquivo. O único problema com a automação do Excel OLE é que ela tende a ser um tanto leeeento. A classe utiliza funções padrão do Delphi para E/S e é consideravelmente mais rápida que as chamadas OLE. Exemplo: var XL : TDataSetToExcel; begin XL := TDataSetToExcel.Create(MinhaQuery,'c:\temp\test.xls'); XL.WriteFile; XL.Free; end; As colunas são dimensionadas corretamente. Os números são formatados em "Courier" e obedecem à máscara "###,###,#0.00" para ponto flutuante e "0" para inteiros. As datas são formatadas "dd-MMM-aaaa hh:mm:ss". Cabeçalhos de colunas ficam em negrito, emoldurados e sombreados. __________________ Nota do Editor: Esta classe é fornecida na certeza de ser de alguma forma útil para alguns propósitos, mas você deve estar advertido de que esta é uma classe bastante básica e necessita de muitas melhorias. Por exemplo, as strings de formatação de célula são de difícil codificação, assim, a classe não suporta localidades internacionais. A classe precisaria de propriedades para os variados formatos de células, exemplo: property FormatText : string property FormatInt : string property FormatFloat : string property FormatDateTime : string property FormatDate : string property FormatTime : string ou ainda, métodos de quebra de página, cores de célula... a lista é interminável! Favor não enviar nenhum email ao autor solicitando mais recursos. A classe é fornecida como "ela é". ________________________________________________________________________ JfControls Library. Multi-language. Multi-appearance. Skins. Privileges. More than 40 integrated and customizable components. Impressive GUI. Centralized resources administration. Multiple programming problems solved. For Delphi 3-7 and C++ Builder 3-6. http://www.jfactivesoft.com/ ________________________________________________________________________ 3. Aplicações distribuidas, o caminho fácil (I) Como trocar dados entre processos num aplicação distribuída Por Eugene Mayevski <Mayevski@eldos.org> Tradução: Carlos Arrebola Há muitas formas de transferir dados de um processo para outro. Todos esses métodos têm vantagens e desvantagens. Há um modo de se ter um sistema de troca de dados flexível e não se aprofundar em detalhes técnicos? Quando uma aplicação consiste de mais de um processo, nos deparamos coma a questão de otimização da comunicação entre os processos. Tais aplicações distribuídas incluem redes computacionais, redes ponto-a- ponto, aplicações cliente-servidor e aplicações de 3 camadas. Todas usam diferentes modos de envio de informações para outros processos e recepção de suas respostas. Além disso, há muitos tipos de aplicações triviais que seriam beneficiadas se as quebrássemos em duas ou mais partes. São aplicações que realizam tarefas em segundo plano, como monitoração de sites na web, filtragem de tráfico na Internet, varredura de arquivos e correio eletrônico à procura de vírus, somente para citarmos algumas. Geralmente, a lógica de negócios pode ser facilmente separada da interface do usuário e esta pode ser carregada somente quando necessário. Todas estas aplicações têm algo em comum: a necessidade de oferecer algum mecanismo para a troca de dados entre as diferentes partes da aplicação. Há muitos modos de se trocar dados- que são usados em diferentes situações. Os mais freqüentemente usados no Windows são (a partir dos mais simples): 1) Mensagens do Windows; 2) Mailslots do Windows; 3) Arquivos de memória mapeada (memory-mapped files - MMF); 4) Sockets TCP ou UDP; 5) COM/DCOM Cada um destes métodos tem suas próprias vantagens. As mensagens do Windows são muito fáceis de se usar e trabalhar. Os mailslots são parecidos com as mensagens, mas trabalham em redes locais. Arquivos de memória mapeada são uma maneira rápida e relativamente fácil de se trocar dados quando não se pode trabalhar com handles (exemplo, aplicações de serviço, aplicações de console). Sockets são universais e independentes da plataforma. COM/DCOM são orientados a objeto e de mais alto nível. Contudo, cada um destes métodos tem suas próprias desvantagens. COM, mensagens do Windows e arquivos de memória mapeada podem ser usados somente em computadores standalone (arquivos MMF podem ser abertos em drives de rede, mas a integridade dos dados e seus valores reais não são garantidos). Mailslots e sockets UDP não são confiáveis (isto significa que quando se envia dados, não se pode facilmente saber se o destinatário recebeu os dados com sucesso). Os sockets TCP podem ser usados numa ampla variedade de situações, mas há um problema: eles trabalham somente como fluxo de dados. É responsabilidade da aplicação dividir o fluxo em blocos de dados e processar estes blocos. DCOM é uma solução sofisticada que muitas vezes é difícil de se instalar e manter, e que se torna um pesadelo quando se trata de segurança. Não é necessário dizer que todos os métodos descritos, exceto os sockets (e custosas implementações de DCOM de terceiros criadas para sistemas baseados no Unix), são somente para a plataforma Windows. Se você cria uma aplicação que deveria trabalhar não somente para a plataforma Windows, você fica refém dos sockets. Os sockets são uma solução poderosa já que eles permitem o controle de quase todos os aspectos da entrega de dados: como e quando os dados são envidados, quanto tempo a aplicação espera por uma resposta e outras coisas mais. O aspecto negativo desta flexibilidade é que você PRECISA controlar estes aspectos (talvez não todos, mas a maioria deles). Voltemos agora às mensagens do Windows. Elas são realmente simples: uma estrutura com vários campos que podem ser preenchidos com dados e enviada ao receptor com uma chamada. E quando você precisa passar algum bloco de dados, você pode usar a mensagem WM_COPYDATA. "Que bom seria se existissem métodos para usar a mesma técnica tanto no mesmo computador quanto em redes", você poderia pensar. Nós pensamos o mesmo. Infelizmente, isto não é possível... Bem, até agora. Agora você pode combinar a simplicidade do sistema de mensagens do Windows com o poder e flexibilidade das comunicações via sockets ou arquivos de memória mapeada usando a estrutura MsgConnect. MsgConnect encapsula operações de baixo nível usadas para estabelecer a comunicação e trocar informações, e oferece uma simples API que se parece muito com o sistema de mensagens do Windows. A seqüência de ações necessária para adicionar comunicação independentes de plataforma à sua aplicação caberá em 20 linhas de código: 1) criar um instância de um objeto Messenger (usado para enviar uma mensagem); 2) criar uma instância de um objeto Transport (usado para entregar mensagens aos receptores. Você vai precisar de uma instância de transporte para cada transporte que for usar, seja ele um socket ou um MMF); 3) criar uma instância de um objeto Queue (usado para receber mensagens); 4) ligar estes objetos com as chamadas de método; 5) definir um manipulador de evento que é disparado quando a mensagem é recebida. Isso é tudo. Pode começar a enviar e receber mensagens. Por que seria o uso da MsgConnect mais fácil que se usar os modos convencionais de comunicação? Antes de mais nada, MsgConnect esconde os detalhes, mas conserva-os disponíveis para uso. A estrutura permite que você refine objetos de transporte para alcançar a máxima performance para qualquer tipo de aplicação, de mensagens ocasionais a troca pesada de dados. E se você não quer entrar nos detalhes, a MsgConnect trabalhará perfeitamente com os ajustes padrão. É claro, você precisará projetar o protocolo, ou seja, definir que mensagens serão usadas para diferentes finalidades na sua aplicação, e esta será uma parte da lógica de negócios da aplicação. Você não vai precisar se aprofundar em detalhes da implementação do protocolo TCP ou gerenciar a segurança para um MMF. A segunda coisa é que a troca de mensagens é universal. Com MsgConnect, a mensagem pode conter quaisquer dados binários e o receptor pode alterar este bloco de dados e enviá-lo de volta com a mesma mensagem. Em outras palavras, os lados da troca de dados podem fazer um envio/retorno de dados com somente uma mensagem. O resultado é que MsgConnect pode ser usada tanto em comunicações uni-direcionais quanto bi-direcionais, sem limitações. O terceiro benefício é que para mudar a comunicação de um computador local para uma rede você precisa somente adicionar outro objeto de transporte e mudar o endereço para o qual as mensagens serão entregues. Não é necessário implementar outro algoritmo ou alterar outro algoritmo de baixo nível. Quarto, sua aplicação pode trocar informações com aplicações rodando em diferentes plataformas. MsgConnect suporta uma ampla faixa de plataformas (atualmente Windows, Windows CE, Linux, Unix, Java, .NET e outras serão suportadas num futuro próximo). Por fim, mas não menos importante: se você desenvolver um projeto open-source gratuito ou um imenso sistema proprietário, MsgConnect tem uma licença adequada para você. Ela está disponível como open-source e oferece serviços adicionais para os usuários que obtêm a licença comercial. __________________ MsgConnect é um esforço conjunto de EldoS Group (http://www.eldos.org) e TamoSoft (http://www.tamos.com), e pode ser obtido com código fonte completo, de forma gratuita, em http://www.msgconnect.com (licenciado pela GPL ou versão de avaliação, atualizável para versão comercial). ________________________________________________________________________ Greatis Runtime Fusion includes Form Designer Pro ($ 49.95) and Object Inspector Pro ($ 49.95), two flagship Delphi-related products of Greatis Software, and costs $89.90 - Save $10 and get additional demos. Let the user design forms at runtime. >>>>>>> http://www.greatis.com/runtime.htm ________________________________________________________________________ 4. Chamadas à Qt geram problemas na instalação de componentes no IDE do Kylix BCB Por Richard Winston Tradução: Demian Lessa Resumo: Se um componente escrito em Delphi faz chamadas à Qt, instalar esse componente no ID do Kylix BCB pode ser difícil. Esse artigo explica como contornar esse problema. Eu tive problemas com um componente que escrevi que fazia chamadas à Qt. O procedimento que causava o problema escrevia Text na posição (X,Y) num ângulo especificado por Angle no código abaixo. Uses Qt, QGraphics; procedure TRbwRuler.PaintRotated(const X, Y, Angle: double; const Text: string); begin Canvas.Start; QPainter_translate(QPainterH(Canvas.Handle),X,Y); try QPainter_rotate(QPainterH(Canvas.Handle),Angle); try Canvas.TextOut(0,0,Text); finally QPainter_rotate(QPainterH(Canvas.Handle),-Angle); end; finally QPainter_translate(QPainterH(Canvas.Handle),-X,-Y); Canvas.Stop; end; end; Isso funcionava bem no IDE do Kylix/Delphi mas simplesmente não compilava no IDE do Kylix/C++. As mensagens de erro eram [Linker Error] Unresolved external 'Qt::QPainter_translate( QT::QPainter *, double, double)' referenced from QrbwRuler.o e [Linker Error] Unresolved external 'Qt::QPainter_rotate( QT::QPainter *, double, double)' referenced from QrbwRuler.o Eu podia escrever um componente similar no Kylix/C++ utilizando código como esse: void __fastcall TRbwRuler::PaintRotated(const double X, const double Y, const double Angle, const AnsiString Text) { Canvas->Start(); Qt.QPainter_translate((QPainter__*)Canvas->Handle,X,Y); __try { Qt.QPainter_rotate((QPainter__*)Canvas->Handle,Angle); __try { Canvas->TextOut(0,0,Text); } __finally { Qt.QPainter_rotate((QPainter__*)Canvas->Handle,-Angle); }; } __finally { Qt.QPainter_translate((QPainter__*)Canvas->Handle,-X,-Y); Canvas->Stop(); }; } Eu podia fazer componentes que funcionassem em qualquer dos IDEs declarando um método virtual abstrato e então definindo dois componentes- um para cada IDE, especializando esse método abstrato com o código que funcionava naquele IDE. Entretanto, se você desejasse utilizar herança visual no IDE do C++ para herdar de formulários desenvolvidos no IDE do Delphi, isso não funcionaria. Eu podia visualizar os formulários no IDE mas quando eu tentava compilar o projeto, o linkeditor acusava erros. Isso parecia acontecer devido às diferenças nas versões C++ e Delphi dos componentes: os componentes não eram os mesmos apesar de terem nomes e funcionalidades idênticas. Esse é realmente o mesmo tipo de problema que eu tentava evitar ao criar os dois componentes em primeiro lugar. Os IDEs do C++ e Delphi parecem precisar de versões distintas de QPainter_translate e de QPainter_rotate. O Delphi parece resolver as referências para as versões declaradas em Qt.pas enquanto o C++ parece resolvê-las para aquelas declaradas em qpainter.hb. Minha solução final para o problema foi instalar o componente no IDE do C++ como um pacote. Selecione Component|Install Packages... Clique o botão Add... Selecione um arquivo *.so gerado pelo Delphi Clique o botão Open Clique o botão OK Para cada pacote, você precisa gerar um arquivo *.a. File|CloseAll File|New|Other|Library File|Save Project As... e salve com o mesmo nome base que o arquivo do pacote do Delphi Project|Add to Project Selecione o arquivo *.so File | Save All Agora você está pronto para construir a biblioteca, então: Project | Build Clique o botão OK __________________ Richard Winston desenvolve interfaces gráficas para programas de modelagem de águas subterrâneas para o U.S. Geological Survey. ________________________________________________________________________ Qual foi a última vez que você votou para o Boletim Pascal? Suporte essa iniciativa votando para o Boletim Pascal no The Programming Top 100! http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium ________________________________________________________________________ 5. Assembler nativo em Delphi (VI) - Chamando procedimentos externos Por Ernesto De Spirito <eds2004 @ latiumsoftware.com> Tradução: Carlos Arrebola Funções API e a convenção de chamada Stdcall ============================================ As funções API são chamadas de forma transparente a partir do assembler nativo com a declaração CALL. Contudo, devemos levar em consideração que passar parâmetros para funções API é diferente já que elas normalmente usam o convenção de chamada Stdcall, ao invés da convenção de chamada Register, que é a que vimos em várias ocasiões anteriores já que ela é a convenção padrão. Na convenção de chamada Stdcall, todos os parâmetros são passados para a pilha, da direita para a esquerda, ou seja, o último parâmetro (o mais à direita) é enviado primeiro e o primeiro (o mais à esquerda) é enviado por último, e, portanto, ele será o primeiro no topo da pilha. Eis um exemplo de um procedimento que chama uma função API: procedure HideForm(Handle: THandle); // Windows.ShowWindow(Handle, SW_HIDE); asm push SW_HIDE // push 0 // passa o segundo parâmetro push Handle // push eax // passa o primeiro parâmetro call Windows.ShowWindow // chama a API ShowWindow end; Se temos que chamar um método que usa a convenção Stdcall, devemos lembrar que o ponteiro Self é o primeiro parâmetro invisível, logo ele será passado por último na pilha. Se temos que escrever funções que usam a convenção Stdcall, não há nada de especial para nos preocuparmos. O compilador sempre criará uma pilha e referências aos nomes dos parâmetros serão convertidas em endereços relativos ao ponteiro base: function AddAndMultiply(i1, i2, i3: integer): integer; stdcall; asm // ==> push ebp; mov ebp, esp // Result := (i1 + i2) * i3; mov eax, i1 // mov eax, [ebp+8] add eax, i2 // add eax, [ebp+12] imul i3 // imul [ebp+16] end; // ==> pop ebp; ret 12 Este é um exemplo de chamada para a função: asm // a := AddAndMultiply(1, 2, 3); // o resultado seria 9 push 3 push 2 push 1 call AddAndMultiply mov a, eax end; Após a entrada na função, a pilha se pareceria com isto: | | +----------------+ | Old EBP | [EBP], [ESP] +----------------+ | Return Address | [EBP+4] +----------------+ | i1 = 1 | [EBP+8] +----------------+ | i2 = 2 | [EBP+12] +----------------+ | i3 = 3 | [EBP+16] +----------------+ | | Bibliotecas C/C++ e a convenção de chamada Cdecl ================================================ Algumas vezes precisamos acessar funções em arquivos objeto (.OBJ), bibliotecas estáticas (.LIB) ou bibliotecas dinâmicas (.DLL) escritas em C ou C++ e, muito freqüentemente, estas funções usam a convenção de chamada Cdecl. Ela é muito parecida com a convenção Stdcall, mas a pilha deve ser limpa por quem a chama, isto é, quem a chama deve invocar os parâmetros que ela inicia ou- ainda melhor- incrementar o ponteiro da pilha. function AddAndMultiply(i1, i2, i3: integer): integer; cdecl; asm // ==> push ebp; mov ebp, esp // Result := (i1 + i2) * i3; mov eax, i1 // mov eax, [ebp+8] add eax, i2 // add eax, [ebp+12] imul i3 // imul [ebp+16] end; // ==> pop ebp; ret Note-se no comentário da última linha que a função não move o ponteiro da pilha como ocorreu no exemplo anterior que usou a convenção Stdcall; logo, quem chamar esta função é que será o responsável por isso. Este é um exemplo de chamada para esta função: asm // a := AddAndMultiply(1, 2, 3); // seria 9 push 3 push 2 push 1 call AddAndMultiply add esp, 12 // limpa a pilha mov a, eax end; Note-se que se os parâmetros fossem do tipo Byte ao invés de Integer, moveríamos ainda o ponteiro da pilha de 12 bytes já que cada parâmetro usaria 32 bits (4 bytes) nos dois casos. A convenção de chamada Pascal ============================= Muitos programadores C/C++ preferem a convenção de chamada Pascal ao invés da Cdecl porque ela é mais compacta e também mais rápida já que a função chamada limpa a pilha na declaração RET, como ocorre na convenção Stdcall. A convenção Pascal é como a Stdcall, mas os parâmetros são passados da esquerda para a direita ao invés da direita para a esquerda, isto é, o primeiro parâmetro (o mais a esquerda) é passado primeiro e o último (o mais a direita) é passado por último: function AddAndMultiply(i1, i2, i3: integer): integer; pascal; asm // ==> push ebp; mov ebp, esp // Result := (i1 + i2) * i3; mov eax, i1 // mov eax, [ebp+16] add eax, i2 // add eax, [ebp+12] imul i3 // imul [ebp+8] end; // ==> pop ebp; ret 12 Note-se como os endereços dos parâmetros são traduzidos de modo diferente que nos exemplos anteriores. Este é um exemplo de chamada desta função: asm // a := AddAndMultiply(1, 2, 3); // seria 9 push 1 push 2 push 3 call AddAndMultiply mov a, eax end; Após a chamada da função, a pilha se pareceria com isto: | | +----------------+ | EBP | [EBP], [ESP] +----------------+ | Return Address | [EBP+4] +----------------+ | i3 = 3 | [EBP+8] +----------------+ | i2 = 2 | [EBP+12] +----------------+ | i1 = 1 | [EBP+16] +----------------+ | | ________________________________________________________________________ 6. Fóruns / Listas Para juntar-se a qualquer um de nossos fóruns de discussão, a melhor forma é assinar através da web, já que dessa forma você poderá acessar todas as funcionalidades disponíveis no site (como alterar suas opções de assinatura, visualizar mensagens passadas, baixar arquivos, etc.). Um ID Yahoo! é necessário para isso e você pode adquirir o seu de forma gratuita registrando-se como um usuário Yahoo! Mas se você não deseja registrar-se ou se não tem acesso completo à Internet, você pode fazer sua assinatura por e-mail (basta ter acesso a uma conta de e-mail). * Delphi: Participe da lista de discussão do Grupo Delphi-BR e faça parte da mais profissional lista Delphi do Brasil. Essa lista tem como objetivo a troca de informações entre os diversos programadores Delphi em lingua portuguesa. Aqui você encontrará grandes programadores brasileiros dando suas contribuições para a comunidade e mantendo uma via de comunicação entre todos os programadores Delphi brasileiros. http://br.groups.yahoo.com/group/delphi-br/ Assinatura: http://br.groups.yahoo.com/group/delphi-br/join delphi-br-subscribe@yahoogrupos.com.br * Kylix (inglês): Programação Kylix. http://groups.yahoo.com/group/KylixGroup/ Assinatura: http://groups.yahoo.com/group/KylixGroup/join KylixGroup-subscribe@yahoogroups.com * Componentes (inglês): Esse é um fórum para pesquisa/recomendação de componentes de software (componetes VCL e CLX, objetos ActiveX, DLLs, SOs, etc.), assim como utilitários, tutoriais, informações, etc. http://groups.yahoo.com/group/components/ Assinatura: http://groups.yahoo.com/group/components/join components-subscribe@yahoogroups.com * Desenvolvedores de Software (inglês): Esse é um fórum para discussões sobre o desenvolvimento de software e para a troca de experiências de trabalho em ambientes profissionais e comerciais. Esse não é um fórum sobre programação; os assuntos abordados são mais gerais e independentes de linguagem de programação. http://groups.yahoo.com/group/software-developers/ Assinatura: http://groups.yahoo.com/group/software-developers/join software-developers-subscribe@yahoogroups.com ________________________________________________________________________ 7. Delphi na Rede Por Dave Murray <irongut @ vodafone.net> Sites em português ================== * Comunidade Delphi de Rio Preto Portal com componentes, novidades, artigos, links e mais. http://www.delphirp.com.br/ * Planet Delphi Site brasileiro especializado em componentes para Delphi. Download grátis. http://www.fprass.hpg.ig.com.br/ * Delphi Company Site do Fernando Gonçalves dedicado ao mundo Delphi http://www.delphicompany.hpg.ig.com.br/ * IntereSite Tudo sobre Delphi http://www.ulbrajp.com.br/~tecnobyte/ * Advanced Developers Delphi, productos, novidades, consultoria... http://www.adev.com.br * Fórum Delphi-BR http://br.groups.yahoo.com/group/delphi-br/ * Fórum Delphi !! http://www.qualyinf.com.br/forum/delphi/delphi.html Componentes, Bibliotecas e Utilitários ====================================== Shareware/Comercial ------------------- * Greatis Form Designer v3.4 - by Greatis Software, Shareware ($49.95) It's a runtime form designer that allows you to move and resize any control on your form. You don't need to prepare your form to use Form Designer. Just drop TFormDesigner component onto any form, set Active property to True and enjoy! For Delphi 4-7 and BCB 3-6. http://www.greatis.com/formdes.htm Freeware -------- * ImageFileLib v1.00 - by Michael Vinther (with source) With this library, Delphi programs can read and write JPEG 2000, PNG, ICO, CUR and PCX images. RAS, PNM, PGM, PPM, HIPS images can be loaded but not created. Both lossy and lossless coding of JPEG 2000 images are supported. In this library also provides support for 24 bit and 256 color palette icons and cursors. http://www.logicnet.dk/lib/ * TBalloonControl v1.0 - by JWB Software (with source) The TBalloon component provides an easy interface to balloon-shaped tooltips which appear more and more in modern software. You can choose to attach a balloon-window to a control, but you can also place it anywhere on your desktop, just define the coordinates of the point. http://people.zeelandnet.nl/famboek/delphi/balloon.html * TMSNPopUp v5.0 - by JWB Software (with source) The TMsnPopUp component is created to mimic the behavior of the popup windows that can be seen in MSN/Windows Messenger from Microsoft. But it even gets better, because TMsnPopup is fully customizable, so you can give it your own look and feel. http://people.zeelandnet.nl/famboek/delphi/msnpopup.html * TXMLSerializer v2.0 - by JWB Software (with source) The TXMLSerializer component can save Delphi objects and components to disk in XML-format. Being an open format, XML has many advantages, it is a good way to save information in a readable form. You can even save complete forms as XML-files. http://people.zeelandnet.nl/famboek/delphi/xmlserializer.html * Delphi SmartCard Component v0.91 - by N Hüttisch (with source) Access any SmartCardReader which has drivers for the Microsoft SmartCard API (PC/SC) from Delphi. Easy-to-use routines to find the reader, to get informed if a card is inserted/removed and to send and receive data to / from the reader. http://www.nobbi.com/download.htm#delphi * WinTab Interface + Sample Component v1.0 - by Qr Li (with source) Delphi API translation for WinTab, the standard pointing device interface to support tablets. http://www.torry.net/vcl/system/otherhardware/wintab32.zip * WallSwap v1.1 - by Conspiracy Software (Delphi source on request) WallSwap, the automatic wallpaper changer for Windows. Give WallSwap a list of files or point it at an entire directory of pictures and it will automatically cycle your Windows desktop background through them. Features include: Support for bmp, gif, jpeg and PNG images; Center, Stretch or Tile your wallpaper; Use HTML web pages as your wallpaper; Change wallpaper every time or once daily; Compatible with Active Desktop. TopQualityFreeware.com Rating 5/5! http://www.winsite.com/bin/Info?6500000036556 * ClassExplorer Pro - by toolsfactory (with source) ClassExplorer Pro dramatically simplifies the development process by adding perfectly integrated code navigation, code creation and code documentation capabilities to your Delphi development environment. http://www.toolsfactory.com/download.shtml * deBold v2.2 - by Droopy Eyes Software (with source) These components make development with Bold for Delphi simpler. Bold is the MDA (Model Driven Architecture) product which was recently acquired by Borland and included with some versions of Delphi 7. These components are based on this framework and help the developer to perform automatic object validation, etc. http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=12 * DIB Controls v1.16 - by Droopy Eyes Software (with source) DIB Controls are a set of native Delphi VCL components based around a very fast DIB drawing engine (Device Independant Bitmap). The drawing engine utilises inline assembly language for optimum speed. This speed allows these features: Real-time zooming; Real-time rotation; Real- time alpha masking; 3 x 3 matrix filter (blur, sharpen, emboss, etc). http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=3 * FastStrings v2.6 - Droopy Eyes Software (with source) (DELPHI/KYLIX) A set of string routines for manipulating large strings at high speed. Includes Boyer-Moore searching algorithm, backwards string searching and a very high-speed alternative for StringReplace. http://www.droopyeyes.com/default.asp?mode=ShowProduct&ID=4 * Inno Setup v3.0.6 - by JR Software (with source) A free installer for Windows programs that rivals and surpasses many commercial installers in feature set and stability. Features include: Support for all 32-bit Windows versions; Creation of a single EXE or disk spanning; Standard wizard interface, including Win2k/XP style; Customizable setup types; Complete uninstall capabilities; Zip / bzip2 compression; Creation of shortcuts, registry and .INI entries; Silent install and uninstall. http://www.jrsoftware.org/isinfo.php * SQLyog v2.51 - by webyog SQLyog is an easy to use, compact and fast graphical tool to manage your MySQL database anywhere in the world. SQLyog was developed keep in mind the necessities of all who use MySQL as their preferred RDBMS. Whether you enjoy the control of handwritten SQL or prefer to work in a visual environment, SQLyog makes it easy for you get started and provides you with tools to enhance your MySQL experience. http://www.webyog.com/sqlyog/ Artigos, Dicas e Truques ======================== * Overview of the VCL for .NET - by J Kaster, E Churchill and D Thorpe This article provides an overview of the architecture, design, and intent of the VCL for .NET included with the Delphi for .NET preview. http://community.borland.com/article/0,1410,29460,00.html * Building + Running Delphi for .NET projects using DLite - by M. Binder The Delphi for .NET preview included with Delphi 7 gives us a peek at the .NET world from the Delphi point of view. This article shows how to use DLite to help you build and run your Delphi for .NET projects. http://community.borland.com/article/0,1410,29077,00.html * How To Use Scanlines - by Leonel Togniolli This article shows a fast way to manipulate bitmaps without using the canvas : the scanlines. http://community.borland.com/article/0,1410,29173,00.html * Using Web Services with the Delphi for .NET preview command-line compiler - by Bob Swart This article shows how you can use existing Web Services with the preview command-line compiler Delphi for .NET. http://community.borland.com/article/0,1410,29486,00.html * Get TreeView Node By Text - by Zarko Gajic How to locate (search and select) a TreeView node given by node text. http://delphi.about.com/library/weekly/aa010703a.htm * Dephi components to access MySQL - by Zarko Gajic Overview of VCL components allowing you to access a MySQL database from Delphi using standard data controls without using BDE/ADO/ODBC. Plus a few MYSQL related tools. http://delphi.about.com/cs/toppicks/tp/aatpmysql.htm * Exchanging Data over the Network - by Zarko Gajic Examine two Delphi components: TServerSocket and TClientSocket both designed to let you read and write information over TCP/IP - thus enabling you to write network-aware applications. http://delphi.about.com/library/weekly/aa112602a.htm * Conspiracy Theory: .NET IS Borland's Is it possible that the whole .NET framework is Borland's idea? http://delphi.about.com/library/weekly/aa112902a.htm * How to encode / decode Base64 string? http://www.swissdelphicenter.ch/en/showcode.php?id=1524 * How to get the Internet Explorer typed urls? http://www.swissdelphicenter.ch/en/showcode.php?id=1521 * How to use URL highlighting in TRichEdit? http://www.swissdelphicenter.ch/en/showcode.php?id=1505 * How to show the select directory dialog and specify initial directory? http://www.swissdelphicenter.ch/en/showcode.php?id=1509 * How to make a flickerless animation using CopyRect? http://www.swissdelphicenter.ch/en/showcode.php?id=1536 * How to zoom the view of a TWebBrowser? http://www.swissdelphicenter.ch/en/showcode.php?id=1537 * How to follow the mouse in TMemo to set the cursor position? http://www.swissdelphicenter.ch/en/showcode.php?id=1538 * How to show a indeterminate ProgressBar in Win XP with PBS_MARQUEE? http://www.swissdelphicenter.ch/en/showcode.php?id=1541 * How to install Kylix when error -10 popups up - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=206 * How to register Kylix - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=207 * How to get an screen shot of a control - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=208 * How to move components at runtime - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=209 * How to use function overloading - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=210 * How to enter a NULL value - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=211 * How to copy your own application - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=212 * How to change the database name - by m3Rlin www.delphifaq.net/modules.php?op=modload&name=FAQ&op=view&id=213 * Save a webpage with images - by Ken Wilcox Ever wanted to duplicate the functionality of your browser and save a web page with images to disk? This example that does just that and you can pass in a progress bar to show the status of the operation. http://www.delphi3000.com/articles/article_3464.asp * MS Exchange API via Collaboration Data Objects - by Mike Heydon This is a vast subject that is beyond the scope of this article to fully detail here. This library provides the basic building blocks for someone who wants to develop using CDO. http://www.delphi3000.com/articles/article_3467.asp * How to Build Aggregate/Composite Components in Delphi - by Mark Miller http://www.delphi3000.com/articles/article_3468.asp * Handling Winsock errors - by Herbert Poltnik http://www.delphi3000.com/articles/article_3469.asp * Getting a Mac Address - The JEDI way - by Michael Brooks How to get the Mac Address for the local Windows PC (and possibly other computers on the LAN) without writing/translating a lot of code or relying completely on NetBios support. http://www.delphi3000.com/articles/article_3470.asp * Add Link to MsgBox (Updated) - by Fu-Hun-Ru Kaje-Ja http://www.delphi3000.com/articles/article_3473.asp * Building Real-Life Web Services - by Marc Hoffmann How to build a 'real-world' Web-Service with mixed method calls, data-aware connections, user-authorisation and session support. http://www.delphi3000.com/articles/article_3474.asp * TDataSet => Excel (No OLE or EXCEL required) - by Mike Heydon This class will produce an Excel Spreadsheet from a TDataSet. No OLE or Excel Installation is needed to create the file. The problem with Excel OLE is that it tends to be rather Sloooow. This class uses standard Delphi I/O functions and is considerably faster than the OLE. http://www.delphi3000.com/articles/article_3475.asp * Bmp into StatusBar - by Rodrigo Poli http://www.delphi3000.com/articles/article_3476.asp * Introductory Principles of Indexed Searching - by Jim McKeeth Describe the principles of an Indexed search engine (like google). How this works when a lot of text information is compressed into an index - so that a search can be done within a very short time. http://www.delphi3000.com/articles/article_3479.asp * WebSnap II: Interacting with the User - by Eber Irigoyen This article shows one way to allow the user to enter some data and use that to query your database. http://www.delphi3000.com/articles/article_3481.asp * Distributed applications, the easy way (I) - by Eugene Mayevski There are many ways of transferring data from one process to another. All those methods have some advantages, but also some drawbacks... http://www.delphi3000.com/articles/article_3489.asp * GetDocumentation for Type Library - by Nik Ozniev How get the Help String for a Type Library. http://www.delphi3000.com/articles/article_3490.asp * Calls to Qt cause installation problems for components in Kylix BCB IDE - by Richard Winston If a component written in Delphi makes a call to Qt, installing it in the Kylix BCB IDE can be difficult. This article describes how to overcome this problem. http://www.delphi3000.com/articles/article_3491.asp * Getting an exe File Type - by Lutfi Baran http://www.delphi3000.com/articles/article_3496.asp * Call a Procedure in an MDI Child - by Moof Foof How do I call a procedure or function in an MDI child when Delphi keeps telling me that TForm is not compatible with my TChildForm? http://www.delphi3000.com/articles/article_3498.asp * Build a Table Tree from Records to Objects - by Max Kleiner How to show a database self join in a TreeView. http://www.delphi3000.com/articles/article_3499.asp * How to Prevent an Application Being Closed by User - Manfred Suesens http://www.delphi3000.com/articles/article_3501.asp * Balloon Tooltips - by Calin Marinescu http://www.delphi3000.com/articles/article_3504.asp Tutoriais ========= * Under Construction: Delphi, dbExpress And MySQL - by Bob Swart The BDE has had its day but some of the alternatives seem very costly (SQL Server at £1,612 for a 10-client standard version?). So this article looks at MySQL to see how easy it is to use with Delphi. Oh, and it's either free or cheap, depending on the licence you choose! http://www.thedelphimagazine.com/Samples/1540/1540.htm * DotNet Buzz Words Explained - by Alain "Lino" Tadros This article will explain the different buzz words in the DotNet world like CTS, CLS, VES, Managed Code, Managed Data, Unmanaged Code, Assemblies, Metadata, Manifest, Strong Names, etc.... http://community.borland.com/article/0,1410,29344,00.html * Write your own Reflector - by Alain "Lino" Tadros Want to write your own "ILDASM" or ".NET Reflector"? Start here by seeing how easy it is to get RTTI from .NET Assemblies. http://community.borland.com/article/0,1410,29423,00.html * Cloning ClientDatSet Cursors - by Cary Jensen When you clone a ClientDataSet cursor you create an additional pointer to a shared memory store and also an independent view of the data. This article shows you how to use this important capability. http://community.borland.com/article/0,1410,29416,00.html * Object Destructors and Finalizers in .NET Using C# and Delphi for .NET - by Brian Long This in-depth article looks at the role and usage of destructors (or equivalent) in the managed world of .NET. It examines in detail the areas of garbage collection, finalizers, the dispose pattern and language specifics, using both C# and Delphi for .NET. http://community.borland.com/article/0,1410,29365,00.html * Memory: from VCL via VCL for .NET to .NET - by Bob Swart How to migrate a VCL application (the game of Memory) to VCL for .NET and finally to WinForms on .NET, all using the Delphi for .NET Preview command-line compiler. http://community.borland.com/article/0,1410,29320,00.html * Hanging by a WebSnap Thread - by Nick Hodges Covers the basics of webmodule threading in both WebSnap and WebBroker as well as some strategies for dealing with the traps it can create. http://community.borland.com/article/0,1410,29300,00.html * Cleaning Your Delphi Code Errors - by Zarko Gajic A Beginner's Guide to Delphi Programming: Chapter 9. A discussion on Delphi design, run and compile time errors and how to prevent them. Also, take a look at some solutions to most common logic errors. http://delphi.about.com/library/weekly/aa121002a.htm * Send Binary Data in XML - by Brian Schaffner XML is generally thought of as a method for describing data using text. For example, elements are given text names, and element contents are usually text-based. There are times, however, when you'll want to put data other than text into your XML documents. http://builder.com.com/article.jhtml?id=u00220021127sch01.htm * Build and Customize Modular XML to Simplify XML Documents - E. Tittel Developers have been working with objects + modules for some time but now XHTML 1.1 introduces this concept to the XML world. Find out more about this important advancement and how to put it to use in your XML documents. http://builder.com.com/article.jhtml?id=u00320021210edt01.htm * Pass Parameters to XSL Templates Programmatically - Brian Schaffner Imagine you have a list of items in an XML document that you display to a user on a Web page. Users will select which column they want to sort on and the order of the sort. Using XSL to convert your XML document to HTML might sound complicated but passing parameters to the XSL template that performs the conversion is easier than you think. http://builder.com.com/article.jhtml?id=u00220021212sch01.htm * Best Practices to Enhance Your SQL Server Applications - Roy Hoobler Get the most out of your development efforts by familiarizing yourself with SQL Server. Follow these guidelines to build better applications. http://builder.com.com/article.jhtml?id=u00320021212RCH01.htm * Heavyweight vs. Lightweight Methodologies - by Jason P. Charvat In software development "lightweight" methodologies are gaining ground on more traditional "heavyweight" methodologies. Both have advantages and disadvantages and which one you choose depends on your needs. This article examines some key differences between them. http://builder.com.com/article.jhtml?id=u00420021016vat01.htm * Find + Dissect Errors with SQL Server's Bug Hunter - by Tony Patton Debugging is a necessary evil of software development and tools are available to make the process less painful. Microsoft provides the SQL Server Debug Interface to streamline SQL development. http://builder.com.com/article.jhtml?id=u00320021212ton01.htm Outros Links ============ * Delphi 6 Update: official run-time patch is available official patch that fixes some variant and a deadlock issue for Delphi 6's run-time package. http://community.borland.com/article/0,1410,29361,00.html * Borland Logo Stuff Buy Borland T-shirts, golfballs and other essential stuff. http://www.borlandstyle.com * Updated Delphi for .NET preview available for download Registered users of Delphi 7 can now download an update to the Delphi for .NET preview. http://community.borland.com/article/0,1410,29302,00.html * Quake2.exe Converted to Delphi - by Q2D The Quake II to Delphi Conversion Team is proud to announce that an important milestone has been reached: Quake2.exe has been fully converted to Delphi from the original C sources. All known conversion bugs have been corrected and the Delphi-compiled binary is able to run flawlessly using the original DLLs supplied with Quake II 3.20. Conversion of the game DLLs has almost been completed and we are now focusing on fixing conversion bugs in the source. We seeking any help we can get, visit the project's webpage at: http://www.sulaco.co.za/quake2/ ________________________________________________________________________ VOCÊ PODE NOS AJUDAR Nós precisamos de sua ajuda para manter esse boletim ativo e cada vez maior. Você pode ajudar indicando o boletim a seus amigos e colegas: http://www.latiumsoftware.com/br/pascal/index.php Você também pode votar para nós em um ou todos esses rankings para dar maior visibilidade a nosso site e assim aumentar o número de assinantes do boletim: http://www.sandbrooksoftware.com/cgi-bin/TopSite2/rankem.cgi?id=latium http://news.optimax.com/delphi/links/links.exe/click?id=70C517ECAE6E http://www.programmingpages.com/?r=latiumsoftwarecomenpascal http://www.top219.org/cgi-bin/vote.cgi?delphi&83 http://top100borland.com/in.php?who=20 http://top200.jazarsoft.com/delphi/rank.php3?id=latium http://213.65.224.200/cgi-bin/toplist.cgi/hits?Id=80 São alguns segundos para você que REALMENTE significam muito para nós. Não esqueça que também precisamos de artigos para os boletins e que existe um prêmio para um dos autores em cada número (em inglês). Todos os artigos serão considerados mas nós estamos particularmente interessados em artigos sobre Kylix já que existe pouco material disponível online. * Envie seu artigo em inglês para pascal-newsletter-owner@yahoogroups.com * Envie seu artigo em português para boletim-pascal-owner@yahoogrupos.com.br ________________________________________________________________________ Se você não recebeu o código fonte completo dos exemplos neste número, você pode obtê-los em http://www.latiumsoftware.com/br/pascal/p0042.zip ________________________________________________________________________ Esse boletim é fornecido "COMO ESTÁ" sem garantias de qualquer tipo. Seu uso implica na aceitação dos termos de licença e isenção de garantia que podem ser lidos em http://www.latiumsoftware.com/br/pascal/index.php Os artigos são propriedade e copyright de seus respectivos autores e foram reproduzidos aqui com sua permissão. Você pode redistribuir esse boletim desde que na sua íntegra (incluindo notas de propriedade e copyright), sem alterações e de forma gratuita. ________________________________________________________________________ Página do grupo:.....: http://br.groups.yahoo.com/group/boletim-pascal/ Assinar..............: boletim-pascal-subscribe@yahoogrupos.com.br Cancelar assinatura..: boletim-pascal-unsubscribe@yahoogrupos.com.br Assinar/cancelar.....: http://groups.yahoo.com/group/boletim-pascal/join Problemas com sua assinatura? boletim-pascal-owner@yahoogrupos.com.br ________________________________________________________________________ Boletim Pascal http://www.latiumsoftware.com/br/pascal/index.php Copyright (c) 2003 por Ernesto De Spirito. Todos os direitos reservados. ________________________________________________________________________ |
Os exemplos do código fonte desta edição estão disponíveis para download.
![]() |
Erros? Omissões? Comentários? Por favor contate-nos!






