Boletim Pascal #34
Os exemplos do código fonte desta edição estão disponíveis para download.
![]() |
![]() |
Boletim Pascal #34 - 20-ABR-2002 ÍNDICE 1. ALGUMAS PALAVRAS DOS EDITORES 2. NOTÍCIAS QUENTES - Borland TeamSource DSP Disponível 3. APLICATIVOS SEM VCL (I) 4. ASSEMBLER NO DELPHI 5. TTRAYCOMPONENT 6. IMPEÇA O WINDOWS DE EXIBIR MENSAGENS DE ERRO CRÍTICO 7. EXIBINDO O DÍALOGO "ABRIR PASTA" (II) 8. FÓRUMS 9. DELPHI NA REDE - Componentes, Bibliotecas e Utilidades . Shareware/Comercial . Freeware - Artigos, Dicas e Truques . Kylix - Tutoriais ________________________________________________________________________ 1. ALGUMAS PALAVRAS DOS EDITORES Editorial da Versão em Português ================================ Olá Pessoal, Gostaria de tomar um pouco desse espaço para me apresentar. Me chamo Demian e sou o editor da versão em português do Pascal Newsletter que, em português, passará a chamar-se Boletim Pascal. Nas edições em língua portuguesa, estarei apresentando a vocês a tradução dos artigos originais da versão em inglês. Mas não será apenas isso!!! A versão em português trará, eventualmente, artigos originalmente escritos em português, além de outros recursos desenvolvidos no nosso idioma nativo como dicas, truques e até mesmo programas completos. Por isso, convido a todos os interessados a entrarem em contato comigo para discutirmos possibilidades. Aproveito a oportunidade para chamá-los a visitar nossa página na web: * Boletim Pascal http://www.latiumsoftware.com/br/pascal/index.php E lembrem-se: vocês são os maiores responsáveis pelo sucesso de nosso boletim! 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 ============================= Olá Pessoal, Gostaria de agradecer aos autores dos artigos incluídos neste número e gostaria de conceder a licença do Greatis Print Suite, um conjunto de componentes para impressão e visualização fornecido pela Greatis Software, como prêmio a José Manuel Rodríguez (JMR). Conheça mais sobre o produto no site: http://www.greatis.com/printsuite.htm No próximo número, um de nossos colaboradores será premiado com uma licença do SMImport, um conjunto integrado de componentes para conversão entre os mais populares formatos de dados, fornecido pela Scalabium: http://www.scalabium.com/smi/index.htm Graças a Demian Lessa, a edição em Português do bloetim é agora uma realidade: * Boletim Pascal http://www.latiumsoftware.com/br/pascal/index.php Se você deseja receber o Boletim Pascal, você pode assinar através da web (é preciso ter um Yahoo! ID - você pode registrar-se para receber um de forma gratuita se não tiver um) ou, mais facilmente, através de email: http://br.groups.yahoo.com/group/boletim-pascal/join boletim-pascal-subscribe@yahoogrupos.com.br Agora aos artigos! Charl Linssen pascal-newsletter-owner@yahoogroups.com editor da versão em inglês __________________ Colaborou neste número: Dave Murray. ________________________________________________________________________ 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-6 and C++ Builder 3-5. http://www.jfactivesoft.com/ ________________________________________________________________________ 2. NOTÍCIAS QUENTES Borland TeamSource DSP Disponível ================================= Borland TeamSource DSP is a collaborative development platform for distributed teams. In plain English, if you need to coordinate the work of your software development staff thru the Internet, then TeamSource DSP might be the solution you are looking for. TeamSource DSP is not software... well it involves software, but basically it's a service (a web services solution hosted on a Borland's server, to be precise), and it is charged as a subscription on a per user and per month basis. To learn more about Borland TeamSource DSP and take the tour, visit TeamSource DSP's main page at http://www.borland.com/teamsource/ ________________________________________________________________________ Greatis Print Suite Pro - An extremely convenient set of VCL components which provides advanced print and preview features into Delphi and C++ Builder applications. Forget BeginDoc, EndDoc, NewPage and other low- level printing procedures, just draw your print job and Print Suite will handle the rest! >>>>>>>> http://www.greatis.com/printsuite.htm <<<<<<<< ________________________________________________________________________ 3. APLICATIVOS SEM VCL (I) Por José Manuel Rodríguez (JMR) Copyright: JMR, Madrid 1997/1999/2002 A VCL do Delphi nos permite, em poucos minutos, fazer coisas que, em outros ambientes levaria horas e horas. Entretanto, isso vem a um preço, que é a carga que a VCL deixa no produto final. Cada vez que utilizamos um novo componente, boa parte do código das unidades da VCL que direta ou indiretamente suportam o componente, incluindo classes ancestrais e classes associadas, são ligadas em nosso executável ou DLL (SmartLinking garante que apenas o código referenciado é ligado e não todo o código das unidades; de qualquer forma, é bastante código). Claro, isso acontece somente na primeira vez que utilizamos o novo componente. Os componentes desse tipo ou de tipos relacionados que forem acrescentados mais tarde produzem incrementos muito menores (boa parte dos ancestrais comuns já foram incluídos no código), mas no começo, ou quando incluímos certos componentes, nós acabamos com acréscimos brutais no tamanho. Por exemplo, a utilização de um simples TButton produz um súbito incremento da ordem de 150-200K no tamanho do código; daí em diante, cada controle padrão (paleta Standard) que acrescentamos gera um acréscimo de apenas 1 ou 2K no tamanho total do código; se, no exemplo, acrescentarmos um TListView, o tamanho volta a crescer bastante mas, novamente, a adição de outros controles comuns (common controls) produzirá incrementos insignificantes no tamanho do PE (portable executable) final. A utilização de pacotes (packages) aborda, de certa forma, esse problema mas, no final das contas, o tamanho do programa mais o suporte de tempo de execução (os pacotes de runtime) acaba sendo maior que o programa ligado da forma convencional. Considerando que, para a maioria dos projetos, recusar-se a utilizar a versatilidade e as facilidades da VCL pode ser considerado insanidade, para projetos menores como servidores, utilitários e similares, DLLs e aplicativos de console, o uso da VCL é totalmente supérfluo. De fato, muitas vezes não utilizamos a VCL mas, inadvertidamente, acabamos fazendo referências a ela, causando a inclusão de parte de seu código no produto final. Normalmente, as referências à VCL não percebidas vêm de algum aspecto visual do programa, como a interação com o usuário (exibição ou recuperação de dados do usuário). Bem, as rotinas da unidade APIDlgs apresentadas aqui pretendem resolver esse problema, oferecendo caixas de diálogo para entrada e saída que não utilizam a VCL, mas apenas recursos comuns do Windows e a API do Windows. A unidade não faz interface com a VCL de modo que você pode usá-la sem problemas em aplicativos baseados na VCL. Nos exemplos que acompanham a unidade você verá um programa que utiliza a VCL (withVCL.dpr) ocupando 178K e o mesmo programa utilizando apenas a APIDlgs (withoutVCL.dpr) ocupando apenas 42K (veja você mesmo)! De qualquer forma, em aplicativos convencionais, não é viável ou desejável trabalhar sem a VCL; contudo, você verá que as funções incluídas aqui são mais versáteis que suas análogas da VCL (MessageDlg/InputDlg) de modo que, mesmo que você use a VCL, você pode ainda assim querer utilizar a APIDlgs. Descrição ========= A unidade contém duas famílias de funções distintas. A primeira conta com as funções APIMsgShow, APIInput e suas irmãs descafeinadas QuickShow e QuickInput e utiliza recursos comuns do Windows, criados com o editor de recursos; a segunda conta com as funções APIMsgBox e CriticalMsg e utiliza uma função interna do Windows (a mesma usada pela bem conhecida MessageBox) e, portanto, utilizam recursos contidos nas bibliotecas Windows. Logo abaixo, a sintaxe das funções: function APIShowMsg(hParent: THandle; const cTitle, cText: String; Buttons: TAPIDlgBtns; DefaultBtn: TAPIDlgBtn; hIcon: THandle; HelpCtx: Integer): TAPIDlgBtn; function QuickShow(cTitle, cText: String; Buttons: TAPIDlgBtns): TAPIDlgBtn; function APIInput(hParent: THandle; const cTitle, cText: String; hIcon: THandle; HelpCtx: Integer): String; function QuickInput(cTitle, cText: String): String; ------- function APIMsgBox(hParent: THandle; const cTitle, cText: String; WinFlags: LongInt; HelpCtx: Integer): LongInt; procedure CriticalMsg(const Title, Text: String); Devido a limitação de tempo, estou omitindo as explicações na esperança de que as declarações sejam claras o suficiente e que, através de uma rápida inspeção do código fonte seja suficiente para a compreensão dos parâmetros e valores de retorno. Comentários =========== a) A unidade foi projetada para 32 bits. Não foi testada para 16 bits mas, exceto por APIMsgBox, que é baseada na API Win32, não há razão para que não funcionem também no Delphi 1 e no Windows 3.1x. b) A unidade foi testada, ainda que não de forma exaustiva. Nenhum bug foi encontrado até o momento mas eu não posso garantir que a unidade esteja livre deles. c) Todo o código é de minha autoria mas eu gostaria de agradecer as dicas, colaborações e sugestões de alguns colegas programadores, em especial Nicolás Aragón (nico@nicoaragon.com). A teoria por trás desse trabalho pode ser encontradas em livros e artigos (PC Magazine USA) sobre o Windows 32 bits por Charles Petzold e Delphi por Neil J. Rubenking. d) Essa unidade pode ser utilizada gratuitamente em programas compilados sem quaisquer restrições mas, se você utilizá-la, eu agradeceria se você mencionasse o autor nos créditos do programa. Se for distribuída na forma de código fonte, todo o pacote deve ser distribuído gratuitamente, com todos os arquivos na íntegra, inclusive as notas de copyright. A primeira parte desse artigo inclui a unidade APIDlgs e alguns programas de exemplo. Na segunda (e última) parte, eu apresentarei a unidade APIApp que permitirá o desenvolvimento de aplicativos (sem o uso da VCL) de forma mais flexível. Quaisquer sugestões, correções ou críticas (construtivas, claro) serão bem-vindas. José Manuel Rodríguez <jmr@clubdelphi.com> ________________________________________________________________________ SMImport component suite 1.46 - Components for data loading from Text, CSV, HTML, XML, MS Excel (without OLE), MS Access (without the BDE), Lotus 1-2-3, QuattroPro and Paradox/DBF. Available for Delphi 3-6 and CBuilder 3-6. Price $35. >>> http://www.scalabium.com/smi/index.htm <<< ________________________________________________________________________ 4. ASSEMBLER NO DELPHI Por Max Kleiner <max@kleiner.com> Nós sempre achamos que o OP (Object Pascal) produzisse código rápido e eficiente e que, com os ambientes RAD do Delphi e do Kylix, a utilização de assembler torna-se questionável. Esse artigo é quase como um resumo do excelente paper "Learning Assembler with Delphi" de Ian Hodger em: http://www.delphi3000.com/articles/article 2245.asp Era desejo de meus alunos fazê-lo mais curto e mencionar algumas coisas sobre depuração. Anexado ao boletim, você encontrará um exemplo impressionante de assembler num Shell DOS que mostra um efeito gráfico de fogo na tela. Ao longo de nosso trabalho com o OP nós encontramos apenas cinco momentos em que achamos adequado o uso de código de baixo nível: 1. Percorrer e processar grandes quantidades de dados. Claro, ficam excluídas dessa situação os casos onde uma linguagem de consulta com um otimizador pode ser empregada, mas nem sempre numa automação ou num ambiente de micro-controlador. 2. Por razões científicas, de forma a fornecer simulações de alta performance ou simplesmente para treinamento com as etapas CALL, Compiler-Assembler-Linker-Loader (Compilação-Montagem-Ligação-Carga). 3. Para programação de controladores, para desenvolver ou testar periféricos como dispositivos COM, por exemplo, na detecção de portas COM livres (detectadas pelo Windows...), e chamar algumas funções não permitidas pelo Windows, por exemplo, para detectar uma porta COM se o mouse está conectado. Utiliza uma chamada DPMI no assembler. 4. Rotinas para exibição de alta velocidade; aqui, a preferência é por rotinas rápidas e fáceis que vêm com o OP, não chamadas estranhas a partir de cabeçalhos C++, funções externas de biblioteca ou ainda exigências de hardware confusas do DirectX. 5. Algoritmos rápidos e fortes de criptografia como codificadores, hashes ou checksums, de forma que o código principal da rotina seja escrito em assembler altamente otimizado. Afirmar que a escrita de código de máquina é uma tarefa amigável seria pouco; quanto à depuração de uma linguagem assembler, digamos que seja apenas uma forma fácil de lembrar quais operações estão disponíveis no código de máquina. A tarefa de gerar o código de máquina é do assembler; assim, o Turbo Assembler da Borland está embutido no Delphi. Vamos praticar: Se olharmos para a adição do inteiro 15 ao registrador eax, a instrução assembler correspondente é add eax,15 // a := a + 15 De forma análoga, subtrair de eax o valor de ebx sub eax,ebx // a := a - b Para armazenar um valor para um outro dia, podemos movê-lo para outro registrador mov eax,ecx // a := c ou ainda melhor, salvar o valor num endereço de memória mov [1733],eax // armazene o valor de eax no endereço 1733 e, claro, recuperar o valor novamente mov eax,[1733] Isso significa que o maior valor que pode ser armazenado num registrador por exemplo, eax, é 2 elevado à 32 menos 1 ou exatamente 4294967295. Tenha em mente que os valores que você está movendo; a operação mov [1733],eax afeta não somente o endereço de memória 1733 mas 1734, 1735 e 1736 também, porque eax tem 32 bits, ou 4 bytes! O próximo passo é o exemplo: step := step + 1; nós escreveríamos algo como: mov eax, step add eax, 1 mov step, eax ou simplesmente: inc step Agora estamos prontos para nosso primeiro código assembler, mas esqueçamos por hora a natureza simples desse exemplo. Considere as seguintes linhas de código OP: function BigSum(A, B: integer): integer; begin result := A+B; end; O OP oferece a construção asm...end como uma forma de introduzir código assembler no nosso código. Assim, a função acima pode ser escrita como: function BigSum(A, B: integer): integer; begin asm mov eax,A add eax,B mov result,eax end; end; Isso funciona, mas há um porém. Não há ganho em velocidade e nós acabamos por perder a legibilidade do nosso código. O fato é que todo nosso projeto de classes é, no final das contas, "quebrado" por um assembler. Você também pode escrever rotinas inteiramente através de assembler inline, sem incluir um bloco begin...end, como mostrado no exemplo abaixo: function LongMul(X, Y: Integer): Longint; asm mov eax, X imul Y end; O compilador realiza várias otimizações nessas rotinas de forma que nenhum código é gerado para copiar parâmetros em variáveis locais. Isso afeta todos os parâmetros string passados por valor e outros parâmetros cujo tamanho não seja 1, 2 ou 4 bytes. Dentro da rotina, eles devem ser tratados como se fossem parâmetros passados por referência (var). Se formos produzir código realmente útil, em algum ponto teremos que implementar rotinas mais complexas como, por exemplo, para exibir uma saída baseada nos valores de duas variáveis. Imagine um mapa em três dimensões onde as coordenadas [X,Y] estão associadas a uma altura H. Quanto marcamos o ponto [X,Y] na tela, precisamos atribuir-lhe uma impressão de profundidade. Isso pode ser feito através de cores de diferentes intensidades, azul para posições abaixo do nível do mar e verde para posições acima. O que se precisa é de uma função que converta uma altura H na profundidade de cor para um nível de mar arbitrário. Depurando Código ---------------- Para finalizar este artigo, vamos falar um pouco sobre depuração. É muito fácil configurar watches, quebras (breaks), e percorrer um programa OP linha a linha. Isso é igualmente verdadeiro quando utilizamos assembler. Tudo que precisamos é acrescentar os registros gerais de 32 bits eax, ebx, ecx e edx à lista de watch e ver o efeito de cada linha. Numa janela do DOS, você pode digitar "debug" e então "u" para desmontar. O assembler do permite que você escreva código assembler Intel dentro de programas OP. Ele implementa uma grande subconjunto da sintaxe suportada pelo Turbo Assembler e pelo Microsoft Macro Assembler, incluindo todos os opcodes 8086/8087 e 80386/80387 e todos (exceto alguns) dos operadores de expressão do Turbo Assembler. Funções assembler retornam seus valores da seguinte forma: - Valores ordinais são retornados em AL (valores de 8-bits) - AX (valores de 16-bits) ou EAX (valores de 32-bits) - Valores reais são retornados em ST(0), na pilha de registros do coprocessador - Ponteiros, incluindo strings longas, são retornados em EAX - Strings curtas e todos os tipos variantes são retornados na variável temporária temp. para a qual @result aponta Espero que você sinta um pouco mais a velocidade do Delphi e meus agradecimentos a Ian por seus fundamentos. ________________________________________________________________________ Join our Delphi forum for intermediate-level Delphi programmers at Yahoo! Groups >>>>> http://groups.yahoo.com/group/delphi-en <<<<< ________________________________________________________________________ 5. TTRAYCOMPONENT Stewart Moss <stewartm@idcorpholdings.com> apresenta suas modificações do TTrayComponent para fazer o código "Exibir na Barra de Tarefas" funcionar no Windows 2000/NT. O TTrayComponent foi originalmente escrito por Alexander Rodigin, baseado no componente Stealth, por Janus N. Tøndering e o TTrayIcon, por Pete Ness. O componente está no arquivo TrayComp.pas. ________________________________________________________________________ 6. IMPEÇA O WINDOWS DE EXIBIR MENSAGENS DE ERRO CRÍTICO Por Zarko Gajic http://delphi.about.com Quando realizamos certas funções, é necessário que nossos programas assumam total controle sobre as mensagens de erro. Por exemplo, se o nosso programa deseja verificar "silenciosamente" se o floppy drive tem um disco, você pode não querer que o Windows exiba uma mensagem de erro crítico se o drive estiver vazio. Você pode controlar quais as mensagens o Windows exibe utilizando a chamada de API "SetErrorMode()" da seguinte forma: var wOldErrorMode: Word; begin // informe ao Windows para ignorar erros // críticos e salvar o modo de erro atual wOldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS); try // código que pode gerar o erro vai aqui... finally // voltar ao modo de erro anterior SetErrorMode(wOldErrorMode); end; end; ________________________________________________________________________ 7. EXIBINDO O DÍALOGO "ABRIR PASTA" (II) Por Ernesto De Spirito <edspirito @ latiumsoftware.com> No último número, eu publiquei código para exibir o diálogo padrão de "Abrir Pasta" e, desde então, tive bastante retorno. Por isso, resolvi escrever essa segunda parte, abordando alguns pontos levantados pelos leitores. SelectDirectory =============== Várias pessoas me lembraram que a função SelectDirectory que vem em FileCtrl faz isso. Bem, isso não é exatamente verdade... Uma das duas versões sobrecarregadas de SelectDirectory permite que você defina a raiz, mas não o diretório selecionado: var Directory: string; begin Directory := 'C:\Delphi\'; if SelectDirectory('Select folder', '', Directory) then ShowMessage(Directory); end; A outra versão de SelectDirectory permite que você selecione o diretório, mas não a pasta base (raiz), apesar de permitir algumas configurações interessantes (permitir a criação de pastas, permitir que o usuário digite o nome da pasta ou ainda, oferecer o id de contexto para o help), mas essa versão da função não utiliza o diálogo padrão do Windows de "Abrir Pasta": var Directory: string; begin Directory := 'C:\Delphi\'; if SelectDirectory(Directory, [], 0) then ShowMessage(Directory); end; Liberando PIDLs =============== No código, utilizao o GlobalFreePtr para liberar a memória alocada para a PIDL. É uma forma rápida e suja de fazer isso, mas não é segura. PIDLs devem ser liberados através de chamadas a IMalloc.Free. Uma forma fácil de substituir GlobalFreePtr pode ser utilizando a função a seguir: uses shlobj, ActiveX; procedure IMallocFree(Ptr: Pointer); var pMalloc: IMalloc; begin if Succeeded(SHGetMalloc(pMalloc)) then pMalloc.Free(Ptr); end; Pasta base como string ====================== Alguns leitores solicitaram que, ao invés da CSIDL de uma pasta especial, o parâmetro da pasta base pudesse ser qualquer diretório passado como uma string de forma que, eu fiz algumas mudanças no código para ter os valroes de TBrowseInfo.pidlRoot baseados nesse parâmetro (agora chamado de RootFolder, uma WideString): : function BrowseForFolder(Title: string; RootFolder: WideString = ''; InitialFolder: string = ''): string; var : IDesktopFolder: IShellFolder; Eaten, Attributes: LongWord; begin with BrowseInfo do begin : pidlRoot := nil; if RootFolder <> '' then begin SHGetDesktopFolder(IDesktopFolder); IDesktopFolder.ParseDisplayName(Application.Handle, nil, PWideChar(RootFolder), Eaten, pidlRoot, Attributes); end; : end; : end; ________________________________________________________________________ 8. FÓRUMS Delphi (em Português) ===================== http://br.groups.yahoo.com/group/delphi-br/ Se você quer juntar-se ao grupo, a melhor forma é assinar a partir da web, uma vez que pode acessar as funcionalidades especiais disponíveis no site web (um ID Yahoo! é necessário; você pode obter um gratuitamente registrando-se como um usuário Yahoo!) mas, se você não quer registrar-se ou se não possui acesso Internet completo, você também pode assinar por email: http://br.groups.yahoo.com/group/delphi-br/join delphi-br-subscribe@yahoogrupos.com.br Delphi (em Inglês) ================== Se você sabe bastante Delphi mas está longe de ser um guru, esse fórum é para você. Esse é o único fórum para programadores Delphi em nível intermediário na Web (hackers Delphi também são bem-vindos :-)). O fórum conta atualmente com mais de 610 membros e, em fevereiro último, teve um tráfego razoável, com 250 mensagens: http://groups.yahoo.com/group/delphi-en/ Assinatura: http://groups.yahoo.com/group/delphi-en/join delphi-en-subscribe@yahoogroups.com ________________________________________________________________________ 9. DELPHI NA REDE Por Dave Murray Componentes, Bibliotecas e Utilitários ====================================== Shareware/Comercial -------------------- * Database Pro v1.14 - by IMG Software Database Pro includes eleven components and give the most simple and fast way to filter or find values in the database. You will get: 1) The simplest way to assign conditions of filtering / data retrieval 2) Support BDE, MIDAS, ADO, InterBase, KADao and any alternative Database Pro is currently available in 18 languages. http://www.imgsoft.com * RichView Package - by TRICHVIEW.COM. Shareware ($139) RichView is a suite of native Delphi/C Builder components for editing formatted documents with images, tables and hypertext links. Customizable attributes of text and paragraphs, Unicode, bi-directed text, HTML export, RTF, printing, data-aware versions and more... http://www.trichview.com/ * SMImport Suite v1.46 - by Scalabium, Mike Shkolnik SMImport suite is a components for data loading from Text, CSV, HTML, XML, MS Excel (without OLE), MS Access, Lotus 1-2-3, QuattroPro and Paradox/DBF. Available for Delphi 3-6 and CBuilder 3-6, price: $35. http://www.scalabium.com (mshkolnik@scalabium.com) Freeware -------- * dbExpress InterBase 6.5 driver for Delphi 6 available - by J Kaster http://community.borland.com/article/0,1410,28508,00.html Artigos, Dicas e Truques ======================== * Bring RAD to your Web app development with WebSnap - by GetPublished WebSnap enables Delphi to build the scriptable business objects, database driven web pages, and back-end servers that are integral to a successful, dynamic web site. http://community.borland.com/article/0,1410,28567,00.html * Simple scripting with NetCLX extension components - by John Kaster C++ Builder 6, Delphi 6 and Kylix all have new RTTI functions that make simple scripting much easier to implement. John K shares some producer components that show how. http://community.borland.com/article/0,1410,28551,00.html * From XML to Object: Part II - by Keith Wood Wraps up this series on the XML Data Binding Wizard with sample applications that demonstrate how to read and display XML documents and generate new ones. www.delphimag.com/features/2002/04/di200204kw_f/di200204kw_f.asp * A Smart Combo Box, etc - by Bruno Sonnino How to create a combo box that remembers the user's selection or entry, and offers it as the default the next time around and tips for RadioGroups and What's This? help. www.delphimag.com/features/2002/04/di200204bs_f/di200204bs_f.asp * Taming the Beast from Redmond - by Dave Ball A step-by-step explanation of how to deploy ISAPI DLLs within an MTS or COM+ memory-protected development environment, by configuring IIS settings within the MMC. www.delphimag.com/features/2002/04/di200204db_f/di200204db_f.asp * Take Action - by Bill Todd If you want your menus and toolbars to have the look and feel of Office 2000, the ActionManager and ActionBars in Delphi 6 may be just the ticket. www.delphimag.com/features/2002/04/di200204bt_f/di200204bt_f.asp * How to get an MP3's ID3-Tag? http://www.swissdelphicenter.ch/en/showcode.php?id=121 * How to load Rft Text from a resource file into a TRichEdit? http://www.swissdelphicenter.ch/en/showcode.php?id=1049 * How to refresh the icon cache? http://www.swissdelphicenter.ch/en/showcode.php?id=1054 * How to enable the Return key in a TWebbrowser? http://www.swissdelphicenter.ch/en/showcode.php?id=1055 * How to open local files in a TWebbrowser and start links directly? http://www.swissdelphicenter.ch/en/showcode.php?id=1057 * How to program a peak level meter? - by Steve Schafer http://www.swissdelphicenter.ch/torry/showcode.php?id=1086 * How to show the source code of a webpage in a Memo? - by Screaminator http://www.swissdelphicenter.ch/torry/showcode.php?id=1085 * How to perform a binary seach on a TListview? - by P Below http://www.swissdelphicenter.ch/torry/showcode.php?id=1078 * Add current page of a TWebbrowser to your favorites - by Screaminator http://www.swissdelphicenter.ch/torry/showcode.php?id=1094 * How to connect to an ftp server + download a file? - by Thomas Stutz http://www.swissdelphicenter.ch/torry/showcode.php?id=1095 * How to check if a given folder is empty - by Christian Cristofori http://www.delphi3000.com/articles/article_3095.asp * Component for saving User Settings (using Tools API) - D Wischnewski Writing a Component, a Component Editor and a Property Editors. http://www.delphi3000.com/articles/article_3096.asp * A Simple Notepad with Delphi 6 - by S S B Magesh Puvananthiran http://www.delphi3000.com/articles/article_3098.asp * Implementation of the State Design Pattern - by Jochen Fromm http://www.delphi3000.com/articles/article_3099.asp * Find full path of registered Applications - by Andreas Schmidt http://www.delphi3000.com/articles/article_3101.asp * Exporting Syntax Highlighted text to HTML - by Danilo Vieira http://www.delphi3000.com/articles/article_3103.asp * Converting HTML colour names and codes to TColor - by D Wischnewski http://www.delphi3000.com/articles/article_3104.asp * Writing all controls of given component to TXMLDocument - by N Ozniev http://www.delphi3000.com/articles/article_3106.asp * Sending email in console mode - by Arman Rad http://www.delphi3000.com/articles/article_3107.asp * Creating High Performance Middleware Apps with Indy - by Romeo Lefter Indy Step by Step part 4. http://www.delphi3000.com/articles/article_3108.asp * Move or resize a TControl object graphically - by Bertrand Goetzmann Graphically move or resize a TControl object by using another object that has all the necessary code. http://www.delphi3000.com/articles/article_3109.asp * How to get the long path and file name? - by Maarten de Haan How to get the long path and file name from a DOS name. http://www.delphi3000.com/articles/article_3110.asp * Viewing Targa Bitmap File Format in Delphi (256-colors) - by h4ry p http://www.delphi3000.com/articles/article_3113.asp * Easiest way to draw a transparent image - by h4ry p http://www.delphi3000.com/articles/article_3115.asp * Un-hiding Properties - by Romeo Lefter Unhiding some usefull properties for VCL controls. http://www.delphi3000.com/articles/article_3116.asp * PAS 2 HTML converter - by Eber Irigoyen Sourcecode to HTML converter for web pages with highlighted syntax. http://www.delphi3000.com/articles/article_3117.asp * Grab the PC Serial Number & BIOS info using WMI calls - by Doug Good Windows Management Instrumentation Calls in Delphi. http://www.delphi3000.com/articles/article_3118.asp * Windows detection routines - by Ronald Buster Here is how to find out the Windows versions for all versions. http://www.delphi3000.com/articles/article_3119.asp * Easy logger - by Eber Irigoyen http://www.delphi3000.com/articles/article_3121.asp * Placing icons in DBGrid - by Fahad Aljarbou http://www.delphi3000.com/articles/article_3122.asp * Extract Icons from .exe, .dll, .lnk - by Prashant Gulati http://www.delphi3000.com/articles/article_3126.asp * Syntax Highlighted Source Code Export to HTML or RTF - by Jim McKeeth Export many different source code files into HTML or FTP with Syntax Highlighting and end user customization http://www.delphi3000.com/articles/article_3128.asp * Web Page to Image File - by Jim McKeeth How to get the URL from IE, open it with PBear's THTMLViewer and save it as a image file. http://www.delphi3000.com/articles/article_3129.asp * A simple class to implement compound files - by David Bolton How do I store multiple files within one compound file? http://www.delphi3000.com/articles/article_3130.asp * Improving your Object classes reliability - by David Bolton How to reference count the easy way. http://www.delphi3000.com/articles/article_3132.asp * How to send HTML messages with attachments (using Indy) - by N Cross Using IdMessage to send HTML formatted emails with attachments. http://www.delphi3000.com/articles/article_3133.asp * How to parse a wave file? - by Liran Shahar Parsing a wave file to access each of its chunks. http://www.delphi3000.com/articles/article_3134.asp * SignalDisplay component - by Liran Shahar Ever wanted to display audio from a microphone or see wave file samples like CoolEdit does? http://www.delphi3000.com/articles/article_3135.asp * How to get keys, like up,down,left, right? - by Etienne Nijboer http://www.delphi3000.com/articles/article_3136.asp * Determine If a File has One of Several File Extensions - by John Long http://www.delphi3000.com/articles/article_3137.asp * Changing IE Proxy Settings - by Shannon Wynter How do I set proxy settings in IE without having to restart? http://www.delphi3000.com/articles/article_3138.asp * How do we implement the Choice Pattern - by Max Kleiner Working with Interfaces. http://www.delphi3000.com/articles/article_3141.asp * How to make a Window with RAW API - by Simone Di Cicco http://www.delphi3000.com/articles/article_3142.asp * From XML to Object: Part I - by Keith Wood The Delphi 6 XML Data Binding Wizard. www.delphimag.com/features/2002/03/di200203kw_f/di200203kw_f.asp * Differential Equations - by Alexander Gofen Implement the Taylor center, a powerful numeric and expression- processing application with extensive visual features, in Delphi. www.delphimag.com/features/2002/03/di200203ag_f/di200203ag_f.asp * Hot Spots: Part II - by Victor Hornback Build a custom component, showing how to register a custom property editor, stream non-published data, and more. www.delphimag.com/features/2002/03/di200203vh_f/di200203vh_f.asp * Spreadsheet Data via ADO, ODBC, or Automation - by Bill Todd A detailed explanation and example projects for accessing MS Excel spreadsheet data via ADO, ODBC, or automation. www.delphimag.com/features/2002/03/di200203bt_f/di200203bt_f.asp * Bug in StringReplace (Handling Null characters) - by Stewart Moss Workaround for a bug in StringReplace function when used on a string which contains NULL (#0) characters (not null terminated). http://www.delphi3000.com/articles/article_3090.asp * Making a "recent files" menu - by Dan Strandberg How to make a simple "recent files" menu/list in your application. http://www.delphi3000.com/articles/article_3091.asp * Yet another "recent file" menu - by Magnus Flysjö http://www.delphi3000.com/articles/article_3093.asp * RGB and HSV conversions - by William Egge Explains HSV and RGB colour values and includes source for converting between the two. http://www.delphi3000.com/articles/article_3094.asp * Quiz: Delphi ADO Programming - by Zarko Gajic Who Wants to be a Delphi ADO Database Programming Guru - trivia game. One copy of a great Delphi book will be given away in this "competition". Closing date is 31st May and a winner will be picked randomly on 1st June. http://delphi.about.com/library/weekly/aa030502a.htm * Spell Checking with MS Word - by Zarko Gajic Why buy or write spell checking components when you can use MS Word? Add spell checking + thesaurus capabilities to your Delphi app using the MS Word Object Library. http://delphi.about.com/library/weekly/aa032701a.htm * Creating PDF Documents, the free way - by Romeo Lefter How to create easy and fast PDF Documents. http://www.delphi3000.com/articles/article_3076.asp * Implementation of the Memento Design Pattern - by Jochen Fromm How do you implement the MEMENTO Design Pattern in Delphi ? A Memento is an object that stores a snapshot of the internal state of another object - the memento's originator. http://www.delphi3000.com/articles/article_3077.asp * Reducing Source Code Complexity in your application - William Egge Using a MessageCenter to link your application systems together. Implementation of an observer pattern except that it uses Delphi's built in message dispatching and also maintains the relationships. http://www.delphi3000.com/articles/article_3079.asp * Creating a simple HTTP Server How to create a simple HTTP server using TIdHTTPServer from Indy and the TPageProducer for simple scripting capabilities. http://www.delphi3000.com/articles/article_3081.asp * Read/write summary information of an Office document - by B Goetzmann How read/write summary information of an Office document? http://www.delphi3000.com/articles/article_3082.asp * How to create disabled bitmap - by Mike Shkolnik How can I create a disabled bitmap from original? http://www.delphi3000.com/articles/article_3085.asp * Convert Tab to Space - Yilmaz Kaygisiz How Can i Change TAB Char To Space in my string? http://www.delphi3000.com/articles/article_3086.asp * String or Number? Undocumented Effects of Val(...) - by D Wischnewski Interesting phenomenon where obvious string is incorrectly converted into a number by Delphi functions Val, IntToStr + InToStrDef. http://www.delphi3000.com/articles/article_3087.asp * Lost your MainForm? - by Eber Irigoyen Has it ever happened to you that the MainForm that you want is not listed in Delphi's Projects|Options|General? http://www.delphi3000.com/articles/article_3088.asp Kylix ----- * Simple scripting with NetCLX extension components - by John Kaster C++ Builder 6, Delphi 6 and Kylix all have new RTTI functions that make simple scripting much easier to implement. John K shares some producer components that show how. http://community.borland.com/article/0,1410,28551,00.html * How to catch kernel-signals in Kylix? http://www.swissdelphicenter.ch/en/showcode.php?id=1059 * How to use RCDATA resources in Kylix? http://www.swissdelphicenter.ch/en/showcode.php?id=1060 * How to clone a process in Linux? http://www.swissdelphicenter.ch/en/showcode.php?id=1061 Tutoriais ========= * Cup of Coffee for Dolphins Part I - by John Kaster Java for Delphi programmers. Describes basic Java instructions in comparison with Delphi. http://community.borland.com/article/0,1410,28481,00.html ________________________________________________________________________ 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/p0034.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) 2002 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!






