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.softpile.com/Development/Libraries/Review_24756_index.html
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-2006 & 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://top100borland.com/in.php?who=20
________________________________________________________________________
5. Assembler nativo em Delphi (VI) - Chamando procedimentos externos
Por Ernesto De Spirito <eds2008 @ 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://tech.groups.yahoo.com/group/components/
Assinatura:
http://tech.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://tech.groups.yahoo.com/group/software-developers/
Assinatura:
http://tech.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://www.torry.net/authorsmore.php?id=3415
* 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://www.torry.net/authorsmore.php?id=3415
* 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://www.torry.net/authorsmore.php?id=3415
* 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/en/
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/od/networking/l/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://articles.techrepublic.com.com/5100-10878_11-1050681.html
* 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://articles.techrepublic.com.com/5100-10878_11-1050428.html
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.programmingpages.com/?r=latiumsoftwarecomenpascal
http://top100borland.com/in.php?who=20
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.
________________________________________________________________________
|