Boletim Pascal #37 - JULHO-15-2002
ÍNDICE
1. ALGUMAS PALAVRAS DOS EDITORES
2. O FUTURO DO BDE
3. NÃO DOCUMENTADO: DETECTAR SE UMA APLICAÇÃO ENCERROU
4. ASSEMBLER NATIVO EM DELPHI (II) - STRINGS ANSI
5. DIÁLOGO LOCALIZAR BANCO DE DADOS
6. FÓRUMS
7. DELPHI NA REDE
- Sites em português
- Componentes, Bibliotecas e Utilidades
. Shareware/Comercial
. Freeware
- Artigos, Dicas e Truques
. Kylix
- Tutoriais
- Outros Links
________________________________________________________________________
1. ALGUMAS PALAVRAS DOS EDITORES
Editorial da Versão em Português
================================
Nossa, pessoal, peço mil desculpas pela demora na tradução desse número.
Às vezes acabamos por superestimar nossa capacidade em lidar com várias
coisas ao mesmo tempo. Foi o que fiz. Mas espero poder recuperar parte
do prestígio perdido com o que venho preparando para os próximos
números. Por enquanto é meio que surpresa, mas no próximo número espero
poder adiantar algo para vocês.
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
=============================
Primeiramente, gostaríamos de agradecer a Thomas Stutz por contribuir
com um artigo muito interessante e estamos igualmente orgulhosos em
presenteá-lo com uma licença do SMImport, um suite de componentes de
conversão de dados de vários dos formatos populares, oferecido por
Scalabium: http://www.scalabium.com/smi/index.htm
Nós teremos dois prêmios para o próximo número:
* AnyShape Transpack v2.0 - por MindBlast Software (DELPHI + KYLIX)
Tired of boring, rectangular windows? Welcome to the exciting world of
transparent, weirdly shaped windows! An instant facelift for your GUI.
What took hours before can now be done in seconds without writing a
single line of code. Features: WYSIWYG editing, design-time preview,
automatic dragging, REAL stay-on-top forms, combine regions and
load/save regions from file. Cross-platform. Shareware, $30.00.
http://www.mindblastsoftware.com/?page=transpack&ref=PascalNL
* Developer Information Library (DIL) CD - por UK Borland User Group
Over 17,000 Tips, Tricks, FAQs and Technical Articles · Patches and
Updates for Borland Tools · Over 4000 Components & Tools · Over 4000
Bitmaps ready to use with another 20000 zipped · Over 350 ready to use
JavaScripts · Complete Set of Linux How-tos · and much much more...
http://www.richplum.co.uk/dil/index.asp
Nós gostaríamos de lembrar a nossos assinantes de língua portuguesa
e russa que nós já temos uma versão de nosso boletim na sua língua mãe:
* Boletim Pascal - Português
http://br.groups.yahoo.com/group/boletim-pascal/
Assinatura:
http://groups.yahoo.com/group/boletim-pascal/join
boletim-pascal-subscribe@yahoogrupos.com.br
* Pascal Newsletter - Edição Russa
http://groups.yahoo.com/group/pascal-newsletter-ru/
Assinatura:
http://groups.yahoo.com/group/pascal-newsletter-ru/join
pascal-newsletter-ru-subscribe@yahoogroups.com
Tudo bem, agora vamos para o boletim.
Saudações,
Charl Linssen e Ernesto De Spirito
pascal-newsletter-owner@yahoogroups.com
__________________
Colaboraram na edição desse 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. O FUTURO DO BDE
Por Ernesto De Spirito <eds2008 @ latiumsoftware.com>
Após o anúncio oficial da Borland a respeito do futuro do BDE, eu entrei
em contato (e fui contactado por) vários desenvolvedores Delphi que usam
atualmente o BDE, para saber de seus planos futuros a respeito do acesso
a dados.
Para bases de dados locais, o BDE continuará sendo usado, apesar de uma
minoria discreta ainda considerar mudar para uma alternativa a curto ou
curtíssimo prazo (na maioria, componentes de acesso a dados de
terceiros, assim como Interbase acessado por IBX ou dbExpress).
Para servidores de bancos de dados, o cenário muda radialmente. Entre
aqueles que ainda utilizam versões antigas do Delphi, muitos não têm
intenção de atualizar e, por isso, continuarão a utilizar o Delphi com
links SQL e BDE; a maioria restante está considerando o uso do
dbExpress, ADO e ADO.NET, apesar de muitos demonstrarem suas
preocupações sobre essas alternativas:
- dbExpress não é tão "universal" como os links SQL, o que significa
que vários drivers estão faltando para alguns dos bancos de dados
mais importantes, como o Microsoft SQL Server.
Sobre o dbExpress ser mais rápido que o BDE, isso não é verdade para
consultas menores pois o dbExpress não possui mecanismos de cache como
o BDE, e assim sendo, os metadados são trafegados a cada consulta. Eu
gostaria de creditar Vasilis Devletoglou por compartilhar suas
descobertas a respeito do funcionamento interno do dbExpress conosco.
Finalmente, quando alguém utiliza uma tecnologia por muitos anos, é
difícil, por vezes, não ser um tanto conservador e considerar novas
tecnologias como se fossem "beta". Nós todos sabemos que o dbExpress
chegou para ficar mas que muitos desenvolvedores ainda o percebem
como verde e em grande necessidade de mais desenvolvimento.
- ADO e ADO.Net não estão em conformidade com as expectativas dos
programadores Delphi em termos de performance e/ou funcionalidades;
também não podemos ignorar o fato de que a maioria dos programadores
irá preferir utilizar uma solução da Borland.
Em conclusão, os únicos felizes aqui parecem ser aqueles que já haviam
saído do BDE e mudado para uma alternativa há algum tempo... :-)
Eu adoraria ouvir o retorno de vocês a respeito desse artigo pois quanto
mais opiniões eu recebo, tanto melhor.
________________________________________________________________________
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
________________________________________________________________________
3. NÃO DOCUMENTADO: DETECTAR SE UMA APLICAÇÃO ENCERROU
Copyright (c) 2002 por Thomas Stutz
Email: tom@swissdelphicenter.ch
URL: http://www.swissdelphicenter.com/en/showcode.php?id=910
Em muitas situações, você pode querer detectar se uma aplicação foi
bloqueada. Por exemplo, ao automatizar o Word, você pode querer saber
se o Word parou de responder. Esse artigo descreve como detectar se
um aplicativo parou de responder utilizando algumas funções não
documentadas.
{
// Traduzido de C para Delphi por Thomas Stutz
// Publicado originalmente em www.SwissDelphiCenter.com
// Código Original:
// (c)1999 Ashot Oganesyan K, SmartLine, Inc
// mailto:ashot@aha.ru, http://www.protect-me.com
// http://www.codepile.com
O código não utiliza a função SendMessageTimout da API Win32 para
determinar se a aplicação está respondendo, mas chama funções não
documentadas de User32.dll.
--> Para Windows 95/98/ME chamamos a API IsHungThread()
A função IsHungThread recupera o estado (rodando ou sem resposta) de
uma thread especificada
IsHungThread(DWORD dwThreadId): // O identificador da thread da
BOOL; // janela principal da aplicação
--> Para NT/2000/XP a API IsHungAppWindow():
A função IsHungThread recupera o estado (rodando ou sem resposta) de
uma aplicação especificada
IsHungAppWindow(Wnd: HWND): // handle da janela principal da aplicação
BOOL;
Infelizmente, a Microsoft não oferece os símbolos de exportação dessas
funções em User32.lib; por isso, temos que aprender quais são de forma
dinâmica, utilizando GetModuleHandle e GetProcAddress:
}
// Para Win9x/ME
function IsAppResponding9x(dwThreadId: DWORD): Boolean;
type
TIsHungThread = function(dwThreadId: DWORD): BOOL; stdcall;
var
hUser32: THandle;
IsHungThread: TIsHungThread;
begin
Result := True;
hUser32 := GetModuleHandle('user32.dll');
if (hUser32 > 0) then
begin
@IsHungThread := GetProcAddress(hUser32, 'IsHungThread');
if Assigned(IsHungThread) then
begin
Result := not IsHungThread(dwThreadId);
end;
end;
end;
// Para Win NT/2000/XP
function IsAppRespondingNT(wnd: HWND): Boolean;
type
TIsHungAppWindow = function(wnd:hWnd): BOOL; stdcall;
var
hUser32: THandle;
IsHungAppWindow: TIsHungAppWindow;
begin
Result := True;
hUser32 := GetModuleHandle('user32.dll');
if (hUser32 > 0) then
begin
@IsHungAppWindow := GetProcAddress(hUser32, 'IsHungAppWindow');
if Assigned(IsHungAppWindow) then
begin
Result := not IsHungAppWindow(wnd);
end;
end;
end;
function IsAppResponding(Wnd: HWND): Boolean;
begin
if not IsWindow(Wnd) then
begin
ShowMessage('Handle de janela incorreto');
Exit;
end;
if Win32Platform = VER PLATFORM WIN32 NT then
Result := IsAppRespondingNT(wnd)
else
Result := IsAppResponding9X(GetWindowThreadProcessId(wnd,nil));
end;
// Examplo: Verificar se o Word está bloqueado/respondendo
procedure TForm1.Button3Click(Sender: TObject);
var
Res: DWORD;
h: HWND;
begin
// Find Word by classname
h := FindWindow(PChar('OpusApp'), nil);
if h <> 0 then
begin
if IsAppResponding(h) then
ShowMessage('O Word está respondendo')
else
ShowMessage('O Word não está respondendo');
end
else
ShowMessage('O Word não está aberto');
end;
________________________________________________________________________
Software Developers Forum. A place to discuss about software development
and to share experience in the work, professional or commercial
environments. http://tech.groups.yahoo.com/group/software-developers/
Subscription: software-developers-subscribe@yahoogroups.com
________________________________________________________________________
4. ASSEMBLER NATIVO EM DELPHI (II) - STRINGS ANSI
Por Ernesto De Spirito
Nesse capítulo iremos aprender algumas novas instruções assembler e o
básico da manipulação de strings ANSI, também chamadas de strings longas.
Novos opcodes
=============
Abaixo os opcodes introduzidos neste atrigo:
* JL (Jump if Lower, desvie se menor): A descrição mais adequada levaria
muito tempo para ser explicada, então vamos dizer que JL salta (desvia)
para o label especificado desde que na operação CMP (ou SUB) anterior
o primeiro operando seja menor que o segundo numa comparação com sinal:
// if signed(op1) < signed(op2) then goto @@label;
cmp op1, op2
jl @@label
JG (Jump if Greater, desvie se maior), JLE (Jump if Lower or Equal,
desvie se menor ou igual) e JGE (Jump if Greater or Equal, desvie se
maior ou igual) completa a família de desvios condicionais para
comparações com sinal.
* JA (Jump if Above, desvie se maior): salta (desvia) para o label
especificado desde que na operação CMP (ou SUB) anterior o primeiro
operando seja maior que o segundo numa comparação sem sinal:
// if unsigned(op1) > unsigned(op2) then goto @@label;
cmp op1, op2
ja @@label
JB (Jump if Below, desvie se menor), JBE (Jump if Below or Equal,
desvie se menor ou igual) e JAE (Jump if Above or Equal, desvie se
maior ou igual) completam a família de desvios condicionais para
comparações sem sinais.
* LOOP: Decrementa ECX e, se não for zero, desvia para o label indicado.
LOOP @@label é o equivalente mais curto e rápido de:
dec ecx // ECX := ECX - 1;
jnz @@label // if ECX <> 0 then goto @@label
Examplo:
xor eax, eax // EAX := EAX xor EAX; // EAX := 0;
mov ecx, 5 // ECX := 5;
@@label:
add eax, ecx // EAX := EAX + ECX; // Executado 5 vezes
loop @@label // Dec(ECX); if ECX <> 0 then goto @@label;
// EAX seria 15 (5+4+3+2+1)
Trabalhando com strings ANSI
============================
Uma variável string é representada por um ponteiro de 32 bits. Se a
string é vazia (''), então o ponteiro é nil (zero), caso contrário,
esse ponteiro aponta para o primeiro caractere dessa string. O tamanho
da string e a contagem de referência são dois inteiros em deslocamentos
negativos a partir do primeiro byte da string:
+-----------+
| s: string |-------------------+
+-----------+ |
V
--+-----------+-----------+-----------+---+---+---+---+---+---+---+--
| allocSiz | refCnt | length | H | e | l | l | o | ! | #0|
--+-----------+-----------+-----------+---+---+---+---+---+---+---+--
(longint) (longint) (longint)
\-----------------v-----------------/
StrRec record
const skew = sizeof(StrRec); // 12
Quando passamos uma string como um parâmetro para uma função, o que de
fato é passado é o ponteiro de 32 bits. Os valores string são um pouco
mais complicados de explicar. A rotina que chamou a rotina que retorna
a string deve passar- como último e invisível parâmetro da chamada, um
tipo PString-o endereço de uma variável string que receberá o resultado
da função.
d := Uppercase(s); // Internamente convertido para: Uppercase(s, @d);
Se o resultado da função é usado em uma expressão ao invés de ser
atribuído diretamente à variável, a rotina que chama deve utilizar uma
variável temporária incializada com nil (string vazia). O compilador faz
tudo isso automaticamente no nosso código Object Pascal mas, se temos
que fazer isso por conta própria se optarmos por escrever código
assembler que chame rotinas que retornam strings.
Para algumas tarefas, não podemos chamar as clássicas funções de string
diretamente. Por exemplo, a função Length não é o nome de uma função de
verdade,. É uma construção interna do próprio compilador e o compilador
gera o código para a função apropriada, dependendo do parâmetro ser uma
string ou um array dinâmico. Em assembler, ao invés de Lenght, teríamos
que usar a função LStrLen (declarada na unidade System) para obter o
tamanho da string.
Existem mais coisas que deveríamos saber a respeito das strings mas o
que temos já é suficiente para um primeiro exemplo.
Versão Assembler de Uppercase
=============================
Eis a declaração da função:
function AsmUpperCase(const s: string): string;
O parâmetro "s" será passado em EAX e o endereço de "Result" será
passado como o segundo parâmetro, ou seja, em EDX.
Basicamente a função deve fazer:
1) Obter o comprimento da string a converter
2) Alocar memória para a string convertida
3) Copiar os caracteres um a um, convertidos para maiúsculas
1) Obter o comprimento da string a converter
--------------------------------------------
Faremos isso através de uma chamada a System.@LStrLen. A função espera
a string em EAX (ela já está lá) e o resultado será colocado em EAX;
então, temos que salvar o valor de EAX (o parâmetro "s") em algum lugar
antes de chamar a função de modo que "s" não seja perdido. Podemos salvar
numa variável local "src". Já que funções são livres para utilizar os
registradores EAX, ECX e EDX, presumimos que o valor em EDX ("@Result")
poderia também ser destruído após uma chamada a System.@LStrLen, de modo
que é útil salvar esse valor numa variável local, por exemplo, "psrc".
O resultado da chamada a System.@LStrLen, deixado em EAX, servirá como
parâmetro da chamada a System.@LStrSetLength (para alocar memória para
o conteúdo da string de resultado), como contador dos bytes a copiar, de
modo que esse valor também deve ser salvo, por exemplo, na variável "n":
var
pdst: Pointer; // Endereço da string resultado
src: PChar; // String de origem
n: Integer; // Comprimento da string de origem
asm
// O endereço da string de resultado é passado em EDX.
// Salvamos esse valor na variável pdst:
mov pdst, edx // pdst := EDX;
// Salvamos EAX (s) na variável local (src)
mov src, eax // src := EAX;
// n := Length(s);
call System.@LStrLen // EAX := LStrLen(EAX);
mov n, eax // n := EAX;
2) Alocar memória para a string convertida
------------------------------------------
A alocação é realizada através de uma chamada a System.@LStrSetLength.
O procedimento espera dois parâmetros: o endereço da string (que
salvamos em "pdst") e o comprimento da string (que está em EAX).
// SetLength(pdst^, n); // Alocar a string de resultado
mov edx, eax // EDX := n; // Segundo parâmetro p/LStrSetLength
mov eax, pdst // EAX := pdst; // Primeiro parâmetro p/LStrSetLength
call System.@LStrSetLength // LStrSetLength(EAX, EDX);
3) Copiar os caracteres um a um, convertidos para maiúsculas
------------------------------------------------------------
Se o comprimento da string era zero, já terminamos:
// if n = 0 then exit;
mov ecx, n // ECX := n;
test ecx, ecx // Fazer and de ECX com ECX para definir flags
// (ECX inalterado)
jz @@end // Ir para @@end se o flag zero está marcado (ECX=0)
Não sendo esse o caso, devemos copiar os caracteres de uma string para
a outra, convertendo-os para maiúsculas conforme necessário. Nós vamos
utilizar ESI e EDX para apontar para os caracteres da string de origem
e destino respectivamente, AL para carregar os caracteres da string de
origem e realizar a mudança antes de armazená-los na string de destino e
ECX para controlar a instrução de LOOP que contará os caracteres. Já que
ESI é um registro que tem que ser preservado, devemos salvar seu valor
para restaurá-lo mais tarde. Decidi salvar ESI colocando-o na pilha.
push esi // Salve ESI na pilha
// Inicializar ESI e EDX
mov eax, pdst // EAX := pdst; // Endereço da string de resultado
mov esi, src // ESI := src; // String de origem
mov edx, [eax] // EDX := pdst^; // String de resultado
@@cycle:
mov al, [esi] // AL := ESI^;
// if Shortint(AL) < Shortint(Ord('a')) then goto @@nochange
cmp al, 'a'
jl @@nochange
// AL in ['a'..#127]
// if Byte(AL) > Byte(Ord('a')) then goto @@nochange
cmp al, 'z'
ja @@nochange
// AL in ['a'..'z']
sub al, 'a'-'A' // Dec(AL, Ord('a')-Ord('A'));
@@nochange:
mov [edx], al // EDX^ := AL;
inc esi // Inc(ESI);
inc edx // Inc(EDX);
loop @@cycle // Dec(ECX); if ECX <> 0 then goto cycle
pop esi // Restaurar ESI da pilha
@@end:
end;
________________________________________________________________________
5. DIÁLOGO LOCALIZAR BANCO DE DADOS
Por Ernesto De Spirito
Recentemente, fui solicitado a acrescentar um diálogo de localização a
todos os formulários de acesso a dados de um projeto. Assim, desenvolvi
uma unidade simples para Delphi 5 que exibe um diálogo não modal, exibido
sempre à frente, que permite os usuários especificarem um texto de busca
e se o texto deve ser localizado no início, no meio ou no fim do campo,
ou se a busca é para ser feita pelo texto exato. O diálogo tem botões
para localizar o primeiro, próximo, anterior e último resultados.
Para usar o diálogo, simplesmente acrescente um botão ao seu formulário,
inclua a unidade DbFindDlg na cláusula uses e escreva um código como o
código abaixo no evento OnClick do botão:
procedure TMain.btnSearchClick(Sender: TObject);
begin
ShowFindDialog(Self, Table1); // Qualquer descendente de TDataset
end;
Se você tem um DBGrid, você pode utilizar a versão sobrecarregada que
no combobox de campos exibe apenas os campos exibidos no grid:
procedure TMain.btnSearchClick(Sender: TObject);
begin
ShowFindDialog(Self, DbGrid1); // Qualquer descendente de TDbGrid
end;
O diálogo destrói a si próprio quando fechado ou quando o dono passado
(como primeiro parâmetro) é destruído.
O projeto não está completo e ainda precisa de melhorias (por exemplo,
no caso da versão com o grid, é presumido que todas as colunas do banco
de dados estão ligadas a campos) mas já pode ser utilizado em diversas
circunstâncias na forma atual, e por isso decidi compartilhá-lo. Todo o
código fonte está disponível, assim como um exemplo bem simples.
________________________________________________________________________
6. FÓRUMS
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 (em Português)
=====================
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
Delphi (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 700 membros e, em abril último, teve um
tráfego de pouco mais de 450 mensagens:
http://groups.yahoo.com/group/delphi-en
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://groups.yahoo.com/group/delphi-en/join
delphi-en-subscribe@yahoogroups.com
Componentes (em 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. O fórum é novo e tem cerca de
160 membros e tráfego muito baixo:
http://groups.yahoo.com/group/components
Conto com sua participação no fórum para nos ajudar a crescer. Você
pode assinar pela web ou, mais facilmente, por e-mail:
http://tech.groups.yahoo.com/group/components/join
components-subscribe@yahoogroups.com
Desenvolvedores de Software (em 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. O fórum é
novo e tem cerca de 160 membros e tráfego muito baixo:
http://groups.yahoo.com/group/software-developers
Conto com sua participação no fórum para nos ajudar a crescer. Você
pode assinar pela web ou, mais facilmente, por e-mail:
http://tech.groups.yahoo.com/group/software-developers/join
software-developers-subscribe@yahoogroups.com
________________________________________________________________________
7. DELPHI NA REDE
Por Dave Murray <irongut @ vodafone.net>
A referência do número passado ao DARTH C-to-Pascal header converter do
Projeto JEDI não tinha URL- isso foi corrigido abaixo. Desculpas! - DM
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
-------------------
* TSDBGridFooter v2.0 by Jovan Sedlan, Shareware ($74.50)
This component is a powerful tool that provides automatic calculations
for your DBGrid and displays that information in a customizable footer
under the grid. It is designed to work with TSDBGrid (also included)
although you can use it with any TCustomDBGrid descendant.
http://www.softpile.com/Development/Libraries/Review_24756_index.html footer.php
* The Logo Creator v2.5 - By Laughingbird Software
Do-it-yourself logo creation software. The Logo Creator is a fun and
easy to use software program made up of logo templates that you can
modify and customize. For Macintosh and Windows.
http://www.thelogocreator.com/
Freeware
--------
* DARTH: C-to-Pascal header converter - by JEDI, FREEWARE with source
Source compiles into a tool that parses C headers and generates Delphi
source for Windows API calls.
http://www.delphi-jedi.org/toolslibrary.html
* TColorButton v1.0 - by 940801, FREEWARE with source
This button drops down a colour select window, can be like Word 2000.
http://940801.cndev.net/
* TGHIPEdit - by gh boy, FREEWARE with source
An IP Address Editor Component.
http://www.delphipages.com/uploads/Edits Combos/IPEdit.zip
* THTMLLiteCLX - By Dave Baldwin, FREEWARE (DELPHI/KYLIX)
An HTML viewer component designed for hobbyists, students, or casual
users. Does not support Frames or the printing HTML documents. Image
capabilities include GIF, animated GIF, JPEG and bitmap.
http://www.pbear.com
* CPU package - release 2 revision 22 - By Thomas Schatzl
It is a small x86 CPU detection library. It should compile on Delphi
2-6 (tested 5 / 6 Personal) Win32 target, Freepascal 0.99.15+ (tested
1.0.6 / 1.1 Win32) for Win32 / OS/2 / GO32V2 / Linux targets (possibly
others) and VP 2.1b (Win32 target, possibly DOS/Linux). Possibly will
work with Kylix.
http://members.yline.com/~tom at work/index.html
Artigos, Dicas e Truques
========================
* Optimize DBImage fields and free disk space - by Zeriouh Abdelhafid
How to reduce the size of and optimize dbimage or graphic fields.
http://www.delphi3000.com/articles/article_3312.asp
* BorCon 2002 Nugget: Jake's Tuesday report - by John Jacobson
As posted on delphi.non-technical.
http://community.borland.com/article/0,1410,28837,00.html
* BorCon 2002 Nugget: Jake's Wednesday report - by John Jacobson
As posted on delphi.non-technical.
http://community.borland.com/article/0,1410,28839,00.html
* How to use TWebBrowser printing functions - by Merlin
http://www.delphifaq.net/modules.php?op=modload&name=FAQ&file=index
&myfaq=yes&id cat=12&categories=Internet/LAN
* How to get a list of network drives - by Merlin
http://www.delphifaq.net/modules.php?op=modload&name=FAQ&file=index
&myfaq=yes&id cat=12&categories=Internet/LAN
* How to duplicate a TTable? - by Merlin
http://www.delphifaq.net/modules.php?op=modload&name=FAQ&file=index
&myfaq=yes&id cat=13&categories=Databases
* How to convert TDateTime to a UNIX timestamp and vice versa - Merlin
http://www.delphifaq.net/modules.php?op=modload&name=FAQ&file=index
&myfaq=yes&id cat=13&categories=Databases
* How to access password protected Paradox databases without a password
http://www.delphifaq.net/modules.php?op=modload&name=FAQ&file=index
&myfaq=yes&id cat=13&categories=Databases
* How to get the empty memory? - by sümer cip
http://www.delphi3000.com/articles/article_3298.asp
* TCollection Performance Issues and Solutions - by Clever Components
http://www.delphi3000.com/articles/article_3301.asp
* Make TextOut with 3d-Effect or hollow Text - by Holger Voigt
http://www.delphi3000.com/articles/article_3303.asp
* How to save file in BLOB and read from BLOB - by Mike Shkolnik
http://www.delphi3000.com/articles/article_3304.asp
* Loading an exe in a memo field - by Teun Spaans
http://www.delphi3000.com/articles/article_3305.asp
* Simple 3D Labels (Lowered and Raised) - by Abdulaziz Jasser
http://www.delphi3000.com/articles/article_3307.asp
* Custom Exception Dialogs + writing to the NT Event Log - D Wischnewski
Knowing what goes wrong; when, where and why?.
http://www.delphi3000.com/articles/article_3308.asp
* SOAP raises the bar for CORBA
The dawn of the Web Services era promises to link disparate businesses
in a manner and on a scale reminiscent of Internet linked machines.
http://community.borland.com/article/0,1410,28737,00.html
* How to view a TDataSet in MS Excel?
http://www.swissdelphicenter.ch/en/showcode.php?id=998
* How to change the default project directory in Delphi?
http://www.swissdelphicenter.ch/en/showcode.php?id=1130
* How to use the AdjustTokenPrivileges function to enable a privilege?
http://www.swissdelphicenter.ch/en/showcode.php?id=1177
* How to insert a Smiley image into a TRxRichEdit?
http://www.swissdelphicenter.ch/en/showcode.php?id=1147
* How to to fade in/out a TImage?
http://www.swissdelphicenter.ch/en/showcode.php?id=1165
* How to format a MessageDlg?
http://www.swissdelphicenter.ch/en/showcode.php?id=1168
* How to create a registry entry in the autorun key?
http://www.swissdelphicenter.ch/en/showcode.php?id=1157
* How to start a program and wait for its termination?
http://www.swissdelphicenter.ch/en/showcode.php?id=93
* How to print a page in a TWebbrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=478
* How to create a GUID at runtime?
http://www.swissdelphicenter.ch/en/showcode.php?id=1172
* How to Copy, Delete, Cut in the TWebbrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1174
* How to Show the Properties Dialog in the TWebbrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1175
* How to Show Balloon Tips for the Tray Icon?
http://www.swissdelphicenter.ch/en/showcode.php?id=1164
* How to change the Borderstyle/ BorderColor of a TWebbrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1171
* How to extract a frame from a AVI file?
http://www.swissdelphicenter.ch/en/showcode.php?id=1180
* How to show the 'run' Dialog?
http://www.swissdelphicenter.ch/en/showcode.php?id=1181
* How to show shaded hints (XP)?
http://www.swissdelphicenter.ch/en/showcode.php?id=1182
* How to check, if a file is on a local drive?
http://www.swissdelphicenter.ch/en/showcode.php?id=1183
* How to regenerate all out-of-date indexes on a given table?
http://www.swissdelphicenter.ch/en/showcode.php?id=1184
* How to hide the scrollbars of TWebBrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1185
* How to scroll TWebBrowser with own buttons?
http://www.swissdelphicenter.ch/en/showcode.php?id=1186
* How to check if the copy command is active in a TWebBrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1187
* How to Replace images in a TWebBrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1188
* How to find and highlight text in TWebBrowser?
http://www.swissdelphicenter.ch/en/showcode.php?id=1189
* How to get the lighter or darker color of a TColor variable?
http://www.swissdelphicenter.ch/en/showcode.php?id=1194
* How to automatically dial/hangup the default Internet connection?
http://www.swissdelphicenter.ch/en/showcode.php?id=1198
* How to rotate a DIB image?
http://www.swissdelphicenter.ch/en/showcode.php?id=1199
* How to show the 'Choose Domain' dialog?
http://www.swissdelphicenter.ch/en/showcode.php?id=1200
* How to list the user privileges (NT)?
http://www.swissdelphicenter.ch/en/showcode.php?id=1201
* How to remove a Dll from memory?
http://www.swissdelphicenter.ch/en/showcode.php?id=1202
* How to detect whether the CPU supports MMX?
http://www.swissdelphicenter.ch/en/showcode.php?id=1203
* How to set the volume for the microphone/ mute it?
http://www.swissdelphicenter.ch/en/showcode.php?id=1204
* How to switch a console application to full screen?
http://www.swissdelphicenter.ch/en/showcode.php?id=1205
* How to hide the Minimize/Maximize buttons of a form?
http://www.swissdelphicenter.ch/en/showcode.php?id=1207
* How to show password characters in a InputBox?
http://www.swissdelphicenter.ch/en/showcode.php?id=1208
* How to save a Excel file as Text file?
http://www.swissdelphicenter.ch/en/showcode.php?id=1209
* How to determine if a number is prime, quickly (2)?
http://www.swissdelphicenter.ch/en/showcode.php?id=1210
* How to deactivate the (Windows) keys with a systemwide Hook?
http://www.swissdelphicenter.ch/en/showcode.php?id=1212
* How to get the first/last visible line of a TRichEdit?
http://www.swissdelphicenter.ch/en/showcode.php?id=1213
* How to return information about the current system?
http://www.swissdelphicenter.ch/en/showcode.php?id=1215
* How to determine if the window is a Unicode window?
http://www.swissdelphicenter.ch/en/showcode.php?id=1216
* Rotate an ellipse - by Holger Voigt
Ellipse with Beziercurves.
http://www.delphi3000.com/articles/article_3257.asp
* Auto Hide for Form - by Zswang Wangjihu
http://www.delphi3000.com/articles/article_3258.asp
* Retrieving folder size - by Christian Cristofori
This function tells you how many bytes a folder, with all subfolders
and files occupies on a HD, CD, floppy or whatever.
http://www.delphi3000.com/articles/article_3259.asp
* Use own buttons to scroll TWebBrowser - by Smokey Mc. Pot
http://www.delphi3000.com/articles/article_3262.asp
* Change the looks of a MessageDlg... - by Smokey Mc. Pot
http://www.delphi3000.com/articles/article_3263.asp
* WebBrowser load from stream - by Zswang Wangjihu
function ShowHtml(mWebBrowser:TWebBrowser;mStrings:TStrings):Boolean;
http://www.delphi3000.com/articles/article_3267.asp
* DataSet -> Strings -> DataSet - by Zswang Wangjihu
Functions: TexttToDataSet, DataSetToText.
http://www.delphi3000.com/articles/article_3269.asp
* Creating Matlab files - by Flurin Honegger
A library unit with basic building procedures.
http://www.delphi3000.com/articles/article_3271.asp
* An Iterative ASCII-Export - by Max Kleiner
Exports records to a delimited file.
http://www.delphi3000.com/articles/article_3272.asp
* The Fast and Best way to get a local IP Address - by Gerson Tomas
http://www.delphi3000.com/articles/article_3273.asp
* Print data from table in QReport - by Alper Sirvan
http://www.delphi3000.com/articles/article_3275.asp
* Design-Time Component About Box Dialog (Delpih 6) - by Mike Heydon
http://www.delphi3000.com/articles/article_3277.asp
* Pump data from any dB into Interbase/Firebird - by Clever Components
How to pump data from any ADO/BDE/ODBC and native Interbase/Firebird
databases into Interbase/Firebird databases.
http://www.delphi3000.com/articles/article_3278.asp
* When do we use Application (Owner), Self or NIL? - by Max Kleiner
Passing the right Owner to a component-constructor.
http://www.delphi3000.com/articles/article_3281.asp
* Make Application.ExeName work in DLLs - by Christian Cristofori
http://www.delphi3000.com/articles/article_3283.asp
* Create a DBExpress-Connection at Runtime - by Max Kleiner
http://www.delphi3000.com/articles/article_3286.asp
* High speed parser - by Yuriy Pisarev
This component is intended for mathematics and logical calculations.
http://www.delphi3000.com/articles/article_3287.asp
* How to find the senders email address (MS Outlook) - by Marc Georges
http://www.delphi3000.com/articles/article_3288.asp
* Determine the date of Easter for a given year - by Oliver Moenche
http://www.delphi3000.com/articles/article_3289.asp
* Using AdjustTokenPrivileges to enable a privilege (NT) - Thomas Stutz
http://www.delphi3000.com/articles/article_3291.asp
* Getting the associated Icon of any file - by Daniel Wischnewski
This article shows you how to extract the associated icon of any file.
Including files that use shell icon handlers such as Corel Draw files.
http://www.delphi3000.com/articles/article_3293.asp
* Child windows of a window (forms within a form) - by Tommy Andersen
http://www.delphi3000.com/articles/article_3294.asp
* First/Last changed File in Folder - by Holger Voigt
http://www.delphi3000.com/articles/article_3296.asp
Tutoriais
=========
* A Beginner's Guide to Delphi Programming - by Zarko Gajic
FREE online Delphi programing course for beginners, now up to Part 5:
Understanding the Delphi unit source.
http://delphi.about.com/library/weekly/aa061802a.htm
* Demystifying the syntax of regular expressions - by Shelley Doll
Regular expressions are often wrongly perceived as mystical unknowns
that only a true guru can understand. They're ugly to look at and if
you don't know the syntax they can seem like cryptic strings of
garbage you might get from a core dump. This article will help by
walking you though the most commonly used regular expressions.
http://articles.techrepublic.com.com/5100-10878_11-1050915.html
* SQL Basics I: Data Queries - by Shelley Doll
Need a quick overview of SQL? This article will get you started from
creating basic manipulation queries to altering the database to more
advanced query concepts.
http://builder.com.com/article.jhtml?id=u00320020531dol01.htm
* SQL Basics II: SELECT statement options - by Shelley Doll
Need a quick overview of SQL? This article picks up where the previous
one left off with some additional functions and clauses for use with
the basic SELECT data query.
http://articles.techrepublic.com.com/5100-10878_11-1044962.html
Outros Links
============
* C++Builder Developer Survey 2002 - by C++Builder Product Team
Survey to get feedback on current and desired features for future
releases of C++ products from Borland. Your answers will have a direct
impact on future product releases. Five prize winners will receive a
free Borland Professional software product of their choice.
http://infopoll.net/Live/surveys/s17964.htm
* Builder 7 Personal Download Now Available - by Tim Del Chiaro
Now you can download a free copy of new JBuilder 7 Personal including
a free development license for non-commercial use. JBuilder 7 Personal
is currently available in English for the Windows, Linux, Solaris and
Mac OSX platforms. Other language editions are coming soon.
http://community.borland.com/article/0,1410,28844,00.html
* Delphi 6 Updates for the RTL and Informix 9.2.1 - by John Kaster
Registered users can download two new updates for Delphi 6. Included
in the RTL pack is a SysUtils update that remedies a deadlock issue
that could appear when many Web modules were being used under heavy
load causing the Web application to stop responding.
http://community.borland.com/article/0,1410,28783,00.html
* Borland demonstrates .NET technology - by Anders Ohlsson
DevRel shows Delphi for .NET preview at VS Live in New York.
http://community.borland.com/article/0,1410,28788,00.html
* Merlin's Delphi Forge
Delphi news, faq, tips, downloads, classifieds and more.
http://www.delphifaq.net/
* Builder.com Readers' Choice Awards
The time has come! Make your voice heard, and vote for your favorite
development tool in the 2002 Builder.com Readers' Choice Awards. You
can vote for Borland in these categories: Best Java IDE, Best Java
Application Server, Best Windows Development Tool and Best Linux IDE.
http://clickthru.online.com/Click?q=06-fP6uI482uKMaF6Gma-TvR7xyY8ZR
________________________________________________________________________
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/p0037.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.
________________________________________________________________________
|