<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4573215013672394359</id><updated>2011-11-27T15:53:07.993-08:00</updated><category term='Delphi2009'/><category term='Join'/><category term='RAD Studio 2007'/><category term='POO'/><category term='StringList'/><category term='SQL Server'/><category term='Actions'/><category term='AJAX'/><category term='UML'/><category term='Datasnap'/><category term='Blackfish SQL'/><category term='Tiburon'/><category term='Funcões'/><category term='RN&apos;s'/><category term='IDE'/><category term='DBGrid'/><category term='API'/><category term='Strings'/><category term='ASP.NET'/><category term='TypeLibrary'/><category term='CodeGear'/><category term='Embarcadero'/><category term='DBExpress'/><category term='Framework'/><category term='TextFile'/><category term='Delimitados'/><category term='Borcon'/><category term='Delphi'/><category term='ECO'/><category term='Lookup'/><category term='DUG'/><category term='ExtractStrings'/><category term='Firebird'/><category term='Herança Visual'/><category term='Arquivos'/><category term='Datas'/><title type='text'>Delphi for all</title><subtitle type='html'>A idéia de criar este blog é poder compartilhar meus conhecimentos, e principalmente aprender com os amigos que me prestigiam, com suas dúvidas, críticas e sugestões. Porque o Delphi é para todos!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-8781926702379164102</id><published>2008-10-13T12:27:00.000-07:00</published><updated>2008-10-13T12:51:09.236-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='DUG'/><title type='text'>DUG-SP - Delphi Users Group São Paulo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_D8L6PM_y9G4/SPOh9XKm56I/AAAAAAAAAJ8/4-OXPfwXZVQ/s1600-h/Logo_150.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_D8L6PM_y9G4/SPOh9XKm56I/AAAAAAAAAJ8/4-OXPfwXZVQ/s400/Logo_150.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5256723265634101154" /&gt;&lt;/a&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse;   font-family:arial;font-size:13px;"&gt;&lt;div class="Ih2E3d" style="color: rgb(80, 0, 80); "&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Salve Galera!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;É com muita alegria que estamos começando as operações do DUG-SP (&lt;a href="http://www.dug-sp.com/"&gt;http://www.dug-sp.com&lt;/a&gt;).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Temos uma lista na internet também .&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://br.groups.yahoo.com/group/DUGSP"&gt; http://br.groups.yahoo.com/group/DUGSP&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Como estamos começando, estamos fechando as parcerias para as reuniões &lt;/div&gt;&lt;div&gt; que a principio serão bimestrais com um evento de hands-on também, &lt;/div&gt;&lt;div&gt; esses eventos serão definidos mas sem uma obrigação periódica.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; A agenda será publicada com antecedência no próprio site (Que é feito em Delphi).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Ainda existem funcionalidades que não implementamos e o layout como &lt;/div&gt;&lt;div&gt; era de se esperar é aquele...feito por programadores..risos.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Mas começamos as operações e isso que importa agora..se formos esperar &lt;/div&gt;&lt;div&gt; estar tudo 100% não começaríamos nunca.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Na lista tem uma enquete sobre o melhor dia para a reunião bimestral. &lt;/div&gt;&lt;div&gt; O evento de hands on será sempre aos sábados de 09:00 as 18:00.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;a href="http://br.groups.yahoo.com/group/DUGSP"&gt;http://br.groups.yahoo.com/group/DUGSP/polls &lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Vamos sempre fazer pesquisa sobre o assunto a ser abordado nas &lt;/div&gt;&lt;div&gt; reuniões bimestrais e tentaremos sempre definir uma pauta anual e &lt;/div&gt;&lt;div&gt; contaremos com todos os participantes para estarem compartilhando &lt;/div&gt;&lt;div&gt; conhecimento em nossas reuniões. E periodicamente tentaremos marcar um &lt;/div&gt;&lt;div&gt; "Botequim do programador" e tentar alcançar cidades ao redor da &lt;/div&gt;&lt;div&gt; capital também. Mas vamos tentar, o certo é que as reuniões estarão &lt;/div&gt;&lt;div&gt; acontecendo na capital.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Estaremos publicando todas as informações operacionais do DUG na lista e &lt;/div&gt;&lt;div&gt; nos site. A agenda de eventos do DUG estará somente no site (&lt;a href="http://www.dug-sp.com/"&gt;http://www.dug-sp.com&lt;/a&gt;). &lt;/div&gt;&lt;div&gt; No site teremos mais funcionalidades a medida que fizermos manutenção e &lt;/div&gt;&lt;div&gt; formos evoluindo a engine dele.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; Abraços!!!&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-8781926702379164102?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/8781926702379164102/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=8781926702379164102&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8781926702379164102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8781926702379164102'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/10/o-delphi-user-group-so-paulo-est-no-ar.html' title='DUG-SP - Delphi Users Group São Paulo'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D8L6PM_y9G4/SPOh9XKm56I/AAAAAAAAAJ8/4-OXPfwXZVQ/s72-c/Logo_150.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-5822213739871893903</id><published>2008-09-11T13:07:00.000-07:00</published><updated>2008-09-12T05:27:07.594-07:00</updated><title type='text'>Simular a nova propriedade HintText do Delphi2009</title><content type='html'>Olá Pessoal,&lt;br /&gt;&lt;br /&gt;Fiquei muito entusiasmado com os novos recursos e componentes da VCL, e um deles que é de muita utilidade é a nova propriedade HintText presente no TEdit, ela permite que você defina um texto padrão a ser exibido no Edit quando a propriedade text não tiver nenhum valor.&lt;br /&gt;&lt;br /&gt;Bom, como eu sei que nem todos podem migrar imediatamente e desfrutar desse novo recurso, resolvi demonstrar como é possível simular o HintText utilizando qualquer versão do Delphi.&lt;br /&gt;&lt;br /&gt;Veja o exemplo:&lt;br /&gt;&lt;style type="text/css"&gt; &lt;!--     .default {color: #000000; background: #EEEEEE;}     .comment {color: #008000; background: #EEEEEE;}     .precompiler {color: #008000; background: #EEEEEE; font-weight: bold;}     .string {color: #CC0000; background: #EEEEEE;}     .number {color: #000099; background: #EEEEEE;}     .assembler {color: #CC0000; background: #EEEEEE; font-weight: bold;}     .symbol {color: #000000; background: #EEEEEE; font-weight: bold;}     .reserved {color: #000099; background: #EEEEEE; font-weight: bold;}     .border {border: 1px solid Silver; background: #EEEEEE; border-bottom: 1px solid Gray; border-right: 1px solid Gray;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;table class="border" cellpadding="10" width="100%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="default"&gt;&lt;span class="reserved"&gt;unit&lt;/span&gt; uFormPadrao&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;uses&lt;/span&gt;&lt;br /&gt;  Windows&lt;span class="symbol"&gt;,&lt;/span&gt; Messages&lt;span class="symbol"&gt;,&lt;/span&gt; SysUtils&lt;span class="symbol"&gt;,&lt;/span&gt; Variants&lt;span class="symbol"&gt;,&lt;/span&gt; Classes&lt;span class="symbol"&gt;,&lt;/span&gt; Graphics&lt;span class="symbol"&gt;,&lt;/span&gt; Controls&lt;span class="symbol"&gt;,&lt;/span&gt; Forms&lt;span class="symbol"&gt;,&lt;/span&gt;&lt;br /&gt;  Dialogs&lt;span class="symbol"&gt;,&lt;/span&gt; StdCtrls&lt;span class="symbol"&gt;,&lt;/span&gt; XPMan&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;type&lt;/span&gt;&lt;br /&gt;  TFormPadrao &lt;span class="symbol"&gt;=&lt;/span&gt; &lt;span class="reserved"&gt;class&lt;/span&gt;&lt;span class="symbol"&gt;(&lt;/span&gt;TForm&lt;span class="symbol"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;procedure&lt;/span&gt; FormCreate&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;private&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;procedure&lt;/span&gt; TextHintOnEnter&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;procedure&lt;/span&gt; TextHintOnExit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class="comment"&gt;{ Private declarations }&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;public&lt;/span&gt;&lt;br /&gt;    &lt;span class="comment"&gt;{ Public declarations }&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;var&lt;/span&gt;&lt;br /&gt;  FormPadrao&lt;span class="symbol"&gt;:&lt;/span&gt; TFormPadrao&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;implementation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="precompiler"&gt;{$R *.dfm}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;Const&lt;/span&gt;&lt;br /&gt;  DefaultColor&lt;span class="symbol"&gt;:&lt;/span&gt; TColor &lt;span class="symbol"&gt;=&lt;/span&gt; clBlack&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;procedure&lt;/span&gt; TFormPadrao&lt;span class="symbol"&gt;.&lt;/span&gt;FormCreate&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;var&lt;/span&gt;&lt;br /&gt;  i&lt;span class="symbol"&gt;:&lt;/span&gt; Integer&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; ComponentCount &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;if&lt;/span&gt; Components&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="reserved"&gt;is&lt;/span&gt; TEdit &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;      TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Components&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]).&lt;/span&gt;OnEnter  &lt;span class="symbol"&gt;:=&lt;/span&gt; TextHintOnEnter&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;      TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Components&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]).&lt;/span&gt;OnExit  &lt;span class="symbol"&gt;:=&lt;/span&gt; TextHintOnExit&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;      TextHintOnExit&lt;span class="symbol"&gt;(&lt;/span&gt;TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Components&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]));&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;procedure&lt;/span&gt; TFormPadrao&lt;span class="symbol"&gt;.&lt;/span&gt;TextHintOnEnter&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;if&lt;/span&gt; Sender &lt;span class="reserved"&gt;is&lt;/span&gt; TEdit &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;if&lt;/span&gt; TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Text &lt;span class="symbol"&gt;=&lt;/span&gt; TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Hint &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;      TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Text &lt;span class="symbol"&gt;:=&lt;/span&gt; EmptyStr&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;    TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Font&lt;span class="symbol"&gt;.&lt;/span&gt;Color &lt;span class="symbol"&gt;:=&lt;/span&gt; DefaultColor&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;procedure&lt;/span&gt; TFormPadrao&lt;span class="symbol"&gt;.&lt;/span&gt;TextHintOnExit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;:&lt;/span&gt; TObject&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;if&lt;/span&gt; Sender &lt;span class="reserved"&gt;is&lt;/span&gt; TEdit &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;if&lt;/span&gt; TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Text &lt;span class="symbol"&gt;=&lt;/span&gt; EmptyStr &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;      TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Text &lt;span class="symbol"&gt;:=&lt;/span&gt; TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Hint&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;      TEdit&lt;span class="symbol"&gt;(&lt;/span&gt;Sender&lt;span class="symbol"&gt;).&lt;/span&gt;Font&lt;span class="symbol"&gt;.&lt;/span&gt;Color &lt;span class="symbol"&gt;:=&lt;/span&gt; clGray&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;    &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;.&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Para que todos os forms tenham a funcionalidade você pode criar um form Padrao e utilizar a herança para fazer o trabalho para você.&lt;br /&gt;&lt;br /&gt;Veja o nosso &lt;a href="http://delphiforall.xpg.com.br/exemplos/ExemploTextHint.zip"&gt;exemplo&lt;/a&gt; funcionando: &lt;div&gt;&lt;/div&gt;&lt;a href="http://2.bp.blogspot.com/_D8L6PM_y9G4/SMl81mUwtII/AAAAAAAAAII/XDQwAd36cgI/s1600-h/Exemplo.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5244860501312189570" style="WIDTH: 432px; CURSOR: hand; HEIGHT: 168px" height="199" alt="" src="http://2.bp.blogspot.com/_D8L6PM_y9G4/SMl81mUwtII/AAAAAAAAAII/XDQwAd36cgI/s400/Exemplo.jpg" width="419" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Bom a única observação é que na hora de utilizar esse valor (seja para gravar no banco ou apenas exibir ao usuário) você deve verificar se o text é igual ao hint, se estiver igual significa que Text está vazio. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;É isso ai! um grande abraço a todos.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-5822213739871893903?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/5822213739871893903/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=5822213739871893903&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5822213739871893903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5822213739871893903'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/09/simular-nova-propriedade-hinttext-do.html' title='Simular a nova propriedade HintText do Delphi2009'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D8L6PM_y9G4/SMl81mUwtII/AAAAAAAAAII/XDQwAd36cgI/s72-c/Exemplo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7559297321037967720</id><published>2008-09-10T18:49:00.000-07:00</published><updated>2008-09-10T18:59:38.399-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi2009'/><title type='text'>Delphi Tour 2009</title><content type='html'>     Pessoal, hoje tive o prazer de participar do Delphi Tour 2009. E posso afirmar que a nova versão está repleta de grandes novidades. Dentre elas, as que mais me chamaram a atenção foram:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Build Configuration&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Generics&lt;/li&gt;&lt;li&gt;Métodos Anonimos&lt;/li&gt;&lt;li&gt;Novos DataSnap (Esse em especial está um show)  &lt;/li&gt;&lt;/ul&gt;   Além é claro de 100% de suporte a UNICODE e novos componentes da VCL (destaque para o Ribbon Controls).      &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;   Já está disponível para &lt;a href="http://cc.codegear.com/item/25876"&gt;donwload&lt;/a&gt; a versão trial, então vale apenas baixar e conferir pessoalmentes todas essas novidades.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vamos lá pessoal. Delphi 2009 na cabeça!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7559297321037967720?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7559297321037967720/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7559297321037967720&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7559297321037967720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7559297321037967720'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/09/delphi-2009-tour.html' title='Delphi Tour 2009'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-8260609653785387007</id><published>2008-09-02T13:30:00.000-07:00</published><updated>2008-09-30T17:34:51.211-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Funcões'/><title type='text'>Algorítimo para validação de CNH</title><content type='html'>Olá comunidade,&lt;br /&gt;&lt;br /&gt;Hoje resolvi disponibilizar um algoritmo para a validação de CNH, essa função já contempla os dois modelos de CNH. Aproveitem!&lt;br /&gt;&lt;style type="text/css"&gt; &lt;!--     .default {color: #000000; background: #EEEEEE;}     .comment {color: #008000; background: #EEEEEE;}     .precompiler {color: #008000; background: #EEEEEE; font-weight: bold;}     .string {color: #CC0000; background: #EEEEEE;}     .number {color: #000099; background: #EEEEEE;}     .assembler {color: #CC0000; background: #EEEEEE; font-weight: bold;}     .symbol {color: #000000; background: #EEEEEE; font-weight: bold;}     .reserved {color: #000099; background: #EEEEEE; font-weight: bold;}     .border {border: 1px solid Silver; background: #EEEEEE; border-bottom: 1px solid Gray; border-right: 1px solid Gray;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="border" align="center" cellpadding="10" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="default"&gt;&lt;span class="reserved"&gt;function&lt;/span&gt; ValidaCNH&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;:&lt;/span&gt; &lt;span class="reserved"&gt;string&lt;/span&gt;&lt;span class="symbol"&gt;):&lt;/span&gt; Boolean&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;function&lt;/span&gt; valida_new_cnh&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;:&lt;/span&gt; &lt;span class="reserved"&gt;String&lt;/span&gt;&lt;span class="symbol"&gt;):&lt;/span&gt; Boolean&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;var&lt;/span&gt;&lt;br /&gt;Soma&lt;span class="symbol"&gt;,&lt;/span&gt; Conta&lt;span class="symbol"&gt;,&lt;/span&gt; Dv&lt;span class="symbol"&gt;,&lt;/span&gt; Digito&lt;span class="symbol"&gt;,&lt;/span&gt; i&lt;span class="symbol"&gt;:&lt;/span&gt; Integer&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;CnhN&lt;span class="symbol"&gt;:&lt;/span&gt; &lt;span class="reserved"&gt;String&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;NumerosIguais&lt;span class="symbol"&gt;:&lt;/span&gt; Boolean&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;Result &lt;span class="symbol"&gt;:=&lt;/span&gt; False&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;NumerosIguais &lt;span class="symbol"&gt;:=&lt;/span&gt; True&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CnhN &lt;span class="symbol"&gt;:=&lt;/span&gt; FormatFloat&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;'00000000000'&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt; StrToFloat&lt;span class="symbol"&gt;(&lt;/span&gt;trim&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;)));&lt;/span&gt;&lt;br /&gt;Soma &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;{Validando se todos o números são iguais}&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; length&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;if&lt;/span&gt; CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="symbol"&gt;&lt;&gt;&lt;/span&gt; CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;    NumerosIguais &lt;span class="symbol"&gt;:=&lt;/span&gt; False&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; NumerosIguais &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  Exit&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; length&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;  Soma &lt;span class="symbol"&gt;:=&lt;/span&gt; Soma &lt;span class="symbol"&gt;+&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;StrtoInt&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;])&lt;/span&gt; &lt;span class="symbol"&gt;*&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;i &lt;span class="symbol"&gt;+&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Conta &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;Soma &lt;span class="reserved"&gt;div&lt;/span&gt; &lt;span class="number"&gt;11&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;*&lt;/span&gt; &lt;span class="number"&gt;11&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;Soma &lt;span class="symbol"&gt;-&lt;/span&gt; Conta&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;&lt;&lt;/span&gt; &lt;span class="number"&gt;2&lt;/span&gt; &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  Dv &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;else&lt;/span&gt;&lt;br /&gt;  Dv &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;11&lt;/span&gt; &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;Soma &lt;span class="symbol"&gt;-&lt;/span&gt; Conta&lt;span class="symbol"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Digito &lt;span class="symbol"&gt;:=&lt;/span&gt; StrToInt&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;&lt;span class="number"&gt;10&lt;/span&gt;&lt;span class="symbol"&gt;]);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; Digito &lt;span class="symbol"&gt;=&lt;/span&gt; Dv &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  Result &lt;span class="symbol"&gt;:=&lt;/span&gt; True&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;function&lt;/span&gt; valida_old_cnh&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;:&lt;/span&gt; &lt;span class="reserved"&gt;String&lt;/span&gt;&lt;span class="symbol"&gt;):&lt;/span&gt; Boolean&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;var&lt;/span&gt;&lt;br /&gt;Soma&lt;span class="symbol"&gt;,&lt;/span&gt; Conta&lt;span class="symbol"&gt;,&lt;/span&gt; Dv&lt;span class="symbol"&gt;,&lt;/span&gt; Digito&lt;span class="symbol"&gt;,&lt;/span&gt; i&lt;span class="symbol"&gt;:&lt;/span&gt; Integer&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;CnhN&lt;span class="symbol"&gt;:&lt;/span&gt; &lt;span class="reserved"&gt;String&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;NumerosIguais&lt;span class="symbol"&gt;:&lt;/span&gt; Boolean&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;Result &lt;span class="symbol"&gt;:=&lt;/span&gt; False&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;NumerosIguais &lt;span class="symbol"&gt;:=&lt;/span&gt; True&lt;span class="symbol"&gt;;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;CnhN &lt;span class="symbol"&gt;:=&lt;/span&gt; FormatFloat&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;'000000000'&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt; StrToFloat&lt;span class="symbol"&gt;(&lt;/span&gt;trim&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;)));&lt;/span&gt;&lt;br /&gt;Soma &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="comment"&gt;{Validando se todos o números são iguais}&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; length&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;  &lt;span class="reserved"&gt;if&lt;/span&gt; CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="symbol"&gt;&lt;&gt;&lt;/span&gt; CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;    NumerosIguais &lt;span class="symbol"&gt;:=&lt;/span&gt; False&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; NumerosIguais &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  Exit&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; length&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;-&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;  Soma &lt;span class="symbol"&gt;:=&lt;/span&gt; Soma &lt;span class="symbol"&gt;+&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;StrtoInt&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;])&lt;/span&gt; &lt;span class="symbol"&gt;*&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;i &lt;span class="symbol"&gt;+&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Digito &lt;span class="symbol"&gt;:=&lt;/span&gt; StrToInt&lt;span class="symbol"&gt;(&lt;/span&gt;CnhN&lt;span class="symbol"&gt;[&lt;/span&gt;&lt;span class="number"&gt;9&lt;/span&gt;&lt;span class="symbol"&gt;]);&lt;/span&gt;&lt;br /&gt;Conta &lt;span class="symbol"&gt;:=&lt;/span&gt; Soma &lt;span class="reserved"&gt;mod&lt;/span&gt; &lt;span class="number"&gt;11&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; Conta &lt;span class="symbol"&gt;=&lt;/span&gt; &lt;span class="number"&gt;10&lt;/span&gt; &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  Conta &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="reserved"&gt;if&lt;/span&gt; Digito &lt;span class="symbol"&gt;=&lt;/span&gt; Conta &lt;span class="reserved"&gt;then&lt;/span&gt;&lt;br /&gt;  result &lt;span class="symbol"&gt;:=&lt;/span&gt; True&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;result &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="symbol"&gt;(&lt;/span&gt;valida_new_cnh&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="reserved"&gt;or&lt;/span&gt; valida_old_cnh&lt;span class="symbol"&gt;(&lt;/span&gt;cnh&lt;span class="symbol"&gt;))&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bom eu testei com algumas CNH's e ela funcionou na boa, se tiverem problema me avisem.&lt;br /&gt;&lt;br /&gt;Abraço a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-8260609653785387007?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/8260609653785387007/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=8260609653785387007&amp;isPopup=true' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8260609653785387007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8260609653785387007'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/09/algortimo-para-validao-de-cnh.html' title='Algorítimo para validação de CNH'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-3845392950857448794</id><published>2008-08-29T07:57:00.001-07:00</published><updated>2008-09-02T20:45:56.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tiburon'/><category scheme='http://www.blogger.com/atom/ns#' term='Delphi2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Datasnap'/><title type='text'>Delphi Tour 2009</title><content type='html'>&lt;a href="http://latam.codegear.com/br/delphitour/"&gt;&lt;img id="BLOGGER_PHOTO_ID_5239954085310172434" style="WIDTH: 423px; CURSOR: hand; HEIGHT: 178px" height="223" alt="" src="http://2.bp.blogspot.com/_D8L6PM_y9G4/SLgOemZFDRI/AAAAAAAAAHg/ZV-sUwaJjNs/s400/headerdelphitour2009_761.jpg" width="462" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pessoal, o momento está chegando, dia 10 de setembro de 2008  em São Paulo é o dia em que vamos conhecer a próxima geração das melhores ferramentas de desenvolvimento do planeta!.&lt;br /&gt;&lt;br /&gt;Já tenho acomanhado alguma novidades e posso garantir que essa versão está repleta de novidades.&lt;br /&gt;&lt;br /&gt;Eu já fiz aminha inscrição, não vou perder isso por nada nesse mundo. Vejo vocês lá!&lt;br /&gt;&lt;br /&gt;Abraço a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-3845392950857448794?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/3845392950857448794/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=3845392950857448794&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3845392950857448794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3845392950857448794'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/08/delphi-tour-2009.html' title='Delphi Tour 2009'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D8L6PM_y9G4/SLgOemZFDRI/AAAAAAAAAHg/ZV-sUwaJjNs/s72-c/headerdelphitour2009_761.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-5850405744107083811</id><published>2008-08-28T12:16:00.000-07:00</published><updated>2008-09-09T14:41:51.585-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TextFile'/><category scheme='http://www.blogger.com/atom/ns#' term='Arquivos'/><category scheme='http://www.blogger.com/atom/ns#' term='StringList'/><category scheme='http://www.blogger.com/atom/ns#' term='Delimitados'/><title type='text'>Importar um arquivo delimitado de forma prática</title><content type='html'>Pessoal tenho recebido alguns pedidos para demostrar como importar de forma prática um arquivo delimitado.&lt;br /&gt;Então resolvi publicar aqui uma forma de se trabalhar na importação desse tipo de arquivo de forma simples e rápida.&lt;br /&gt;Obviamente essa não é a única forma e talvez nem seja a melhor, mas é aquela que me atende nos meus projetos,&lt;br /&gt;portanto quem tiver algum outro meio que julgue prático fique a vontade para deixar o comentário. Primeiro quero explicar o que será feito, depois codificamos. Imagine um arquivo delimitado por ";" (ponto-e-virgula)&lt;br /&gt;&lt;br /&gt;0001;CRISTIANO MARTINS ALVES;28;MASCULINO&lt;br /&gt;0002;ALESSANDRA AMARAL;37;FEMININO&lt;br /&gt;&lt;br /&gt;Vemos nesse exemplo que podemos obter Linhas e Colunas, então a ideia é: Primeiro extraimos e linha e depois, extraimos as colunas dessa linha.&lt;br /&gt;Podemos então utilizar 2 TStringLists para nos ajudar nessa tarefa, um chamado de linhas e outro de colunas. Depois percorremos o StringList de linhas e&lt;br /&gt;extraimos as colunas, "jogando" no outro StringList. Ou Seja o que esta em linha assim:&lt;br /&gt;&lt;br /&gt;0001;CRISTIANO MARTINS ALVES;28;MASCULINO&lt;br /&gt;vai parar em coluna assim:&lt;br /&gt;CRISTIANO MARTINS ALVES&lt;br /&gt;28&lt;br /&gt;MASCULINO&lt;br /&gt;&lt;br /&gt;Dessa forma fica fácil manipular essa dados no LtringList, veja o código&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt; &lt;!--     .default {color: #000000; background: #EEEEEE;}     .comment {color: #008000; background: #EEEEEE;}     .precompiler {color: #008000; background: #EEEEEE; font-weight: bold;}     .string {color: #CC0000; background: #EEEEEE;}     .number {color: #000099; background: #EEEEEE;}     .assembler {color: #CC0000; background: #EEEEEE; font-weight: bold;}     .symbol {color: #000000; background: #EEEEEE; font-weight: bold;}     .reserved {color: #000099; background: #EEEEEE; font-weight: bold;}     .border {border: 1px solid Silver; background: #EEEEEE; border-bottom: 1px solid Gray; border-right: 1px solid Gray;} --&gt; &lt;/style&gt;&lt;br /&gt;&lt;table class="border" cellpadding="10" width="100%" align="center"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre class="default"&gt;&lt;span class="reserved"&gt;var&lt;/span&gt;&lt;br /&gt; Linhas&lt;span class="symbol"&gt;,&lt;/span&gt; Colunas&lt;span class="symbol"&gt;:&lt;/span&gt;TStringList&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt; i&lt;span class="symbol"&gt;,&lt;/span&gt;j&lt;span class="symbol"&gt;:&lt;/span&gt;integer&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt; Linhas &lt;span class="symbol"&gt;:=&lt;/span&gt; TStringList&lt;span class="symbol"&gt;.&lt;/span&gt;Create&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt; Colunas &lt;span class="symbol"&gt;:=&lt;/span&gt; TStringList&lt;span class="symbol"&gt;.&lt;/span&gt;Create&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="reserved"&gt;try&lt;/span&gt;&lt;br /&gt;   Linhas&lt;span class="symbol"&gt;.&lt;/span&gt;LoadFromFile&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;'C:\MeuArquivo.txt'&lt;/span&gt;&lt;span class="symbol"&gt;);&lt;/span&gt; &lt;span class="comment"&gt;//Carregando arquivo&lt;/span&gt;&lt;br /&gt;   &lt;span class="reserved"&gt;for&lt;/span&gt; i &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; Pred&lt;span class="symbol"&gt;(&lt;/span&gt;Linhas&lt;span class="symbol"&gt;.&lt;/span&gt;Count&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;   &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;     &lt;span class="comment"&gt;{Transformando os dados das colunas em Linhas}&lt;/span&gt;&lt;br /&gt;     Colunas&lt;span class="symbol"&gt;.&lt;/span&gt;text &lt;span class="symbol"&gt;:=&lt;/span&gt; StringReplace&lt;span class="symbol"&gt;(&lt;/span&gt;Linhas&lt;span class="symbol"&gt;.&lt;/span&gt;Strings&lt;span class="symbol"&gt;[&lt;/span&gt;i&lt;span class="symbol"&gt;],&lt;/span&gt;&lt;span class="string"&gt;';'&lt;/span&gt;&lt;span class="symbol"&gt;,&lt;/span&gt;&lt;span class="string"&gt;#13&lt;/span&gt;&lt;span class="symbol"&gt;,[&lt;/span&gt;rfReplaceAll&lt;span class="symbol"&gt;]);&lt;/span&gt;&lt;br /&gt;     &lt;span class="reserved"&gt;for&lt;/span&gt; j &lt;span class="symbol"&gt;:=&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt; &lt;span class="reserved"&gt;to&lt;/span&gt; Pred&lt;span class="symbol"&gt;(&lt;/span&gt;Colunas&lt;span class="symbol"&gt;.&lt;/span&gt;Count&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="reserved"&gt;do&lt;/span&gt;&lt;br /&gt;     &lt;span class="reserved"&gt;begin&lt;/span&gt;&lt;br /&gt;       &lt;span class="comment"&gt;{ Aqui você faz alguma coisa como colocar num Edit&lt;/span&gt;&lt;br /&gt;&lt;span class="comment"&gt;         No Meu caso aqui para exemplificar vou apenas mostrar num ShowMessage}&lt;/span&gt;&lt;br /&gt;       ShowMessage&lt;span class="symbol"&gt;(&lt;/span&gt;&lt;span class="string"&gt;'Valor "'&lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;Colunas&lt;span class="symbol"&gt;.&lt;/span&gt;Strings&lt;span class="symbol"&gt;[&lt;/span&gt;j&lt;span class="symbol"&gt;]&lt;/span&gt; &lt;span class="symbol"&gt;+&lt;/span&gt; &lt;span class="string"&gt;'" da Linha '&lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;IntTostr&lt;span class="symbol"&gt;(&lt;/span&gt;i&lt;span class="symbol"&gt;+&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;)&lt;/span&gt; &lt;span class="symbol"&gt;+&lt;/span&gt;&lt;br /&gt;         &lt;span class="string"&gt;' Coluna '&lt;/span&gt;&lt;span class="symbol"&gt;+&lt;/span&gt;IntToStr&lt;span class="symbol"&gt;(&lt;/span&gt;j&lt;span class="symbol"&gt;+&lt;/span&gt;&lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="symbol"&gt;));&lt;/span&gt;&lt;br /&gt;     &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;   &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="reserved"&gt;finally&lt;/span&gt;&lt;br /&gt;   Linhas&lt;span class="symbol"&gt;.&lt;/span&gt;Free&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt;   Colunas&lt;span class="symbol"&gt;.&lt;/span&gt;Free&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;br /&gt; &lt;span class="reserved"&gt;end&lt;/span&gt;&lt;span class="symbol"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;É isso ai pessoal!. A única observação importante, é que se o arquivo for muito grande, coisa de mais de 150.000 linhas, vale apenas ler direto do disco (com TextFile) ao invez de colocar num StringList. Mas nesse código mudaria apenas o primeiro StringList.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-5850405744107083811?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/5850405744107083811/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=5850405744107083811&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5850405744107083811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5850405744107083811'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/08/importar-um-arquivo-delimitado-de-forma.html' title='Importar um arquivo delimitado de forma prática'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-4291605510196991322</id><published>2008-08-27T16:17:00.000-07:00</published><updated>2008-08-27T16:25:45.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi2009'/><category scheme='http://www.blogger.com/atom/ns#' term='Datasnap'/><title type='text'></title><content type='html'>A CodeGear anunciou no último dia 25 o &lt;a href="http://www.codegear.com/products/delphi/win32"&gt;Delphi 2009&lt;/a&gt;. Eu estou muito empolgado com esse lançamento, são muitas novidades principalmente com relação a VCL que traz novos componentes com um visual perfeito para quem gosta do Windows Vista e o DataSnap que está recheado de novos recusrsos, atendendo ai a pedidos de todos nós.&lt;br /&gt;&lt;br /&gt;Agora é só aguardar a liberação da versão trial que deve sair em breve.&lt;br /&gt;&lt;br /&gt;Segue um ScreenShot para dar uma água na boca da galera.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.codegear.com/article/38562/images/38562/Delphi2009ScreenShot.JPG"&gt;&lt;img style="cursor: pointer; width: 619px; height: 464px;" src="http://www.codegear.com/article/38562/images/38562/Delphi2009ScreenShot.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-4291605510196991322?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/4291605510196991322/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=4291605510196991322&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4291605510196991322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4291605510196991322'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/08/codegear-anunciou-no-ltimo-dia-25-o.html' title=''/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-3068082246946293116</id><published>2008-07-26T06:18:00.000-07:00</published><updated>2008-12-10T17:50:48.930-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tiburon'/><title type='text'>Preview Tiburón</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_D8L6PM_y9G4/SIskiFYMLSI/AAAAAAAAAFg/e_fnZkvDvEc/s1600-h/2bfbdw45rln005r1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_D8L6PM_y9G4/SIskiFYMLSI/AAAAAAAAAFg/e_fnZkvDvEc/s400/2bfbdw45rln005r1.png" alt="" id="BLOGGER_PHOTO_ID_5227311960471383330" border="0" /&gt;&lt;/a&gt;No próximo dia primeiro às 11h (horário de Brasília), a CodeGear/Embarcadero fará um evento on-line para apresentar um preview do Tiburón (Delphi) e C++ Builder.  Vale apena conferir, segue alguns tópicos do que será bordado no preview:&lt;br /&gt;&lt;br /&gt;- Novos componentes da VCL&lt;br /&gt;- Novos recursos da linguagem&lt;br /&gt;- Novo DataSnap&lt;br /&gt;&lt;br /&gt;As inscrições podem ser feitas pelo site: &lt;a href="http://latam.codegear.com/br/tiburonpreview." target="_blank"&gt;http://latam.codegear.com/br/&lt;wbr&gt;tiburonpreview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vamor participar galera!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-3068082246946293116?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/3068082246946293116/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=3068082246946293116&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3068082246946293116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3068082246946293116'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/07/preview-tiburn.html' title='Preview Tiburón'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_D8L6PM_y9G4/SIskiFYMLSI/AAAAAAAAAFg/e_fnZkvDvEc/s72-c/2bfbdw45rln005r1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7239447456047387533</id><published>2008-05-18T10:24:00.000-07:00</published><updated>2008-05-18T11:37:14.516-07:00</updated><title type='text'>Bate papo com CEO da CodeGear Jim Douglas e CEO da Embarcadero Wayne Williams</title><content type='html'>Olá pessoal, venho trazer boas notícias, depois de uma semana de muita especulação acerca do nosso futuro (comunidade delphi), será promovido no próximo dia 22, um bate papo com Jim Douglas e  Wayne Williams Ceo's da CodeGear e Embarcadero, e os membros da comunidade CodeGear.&lt;br /&gt;Essa é a hora de tirarmos todas as nossas dúvidas, portanto não percam tempo! façam a pré-inscrição no link &lt;a href="http://borland.interwise.com/borland/iSeminar/RN1890/"&gt;http://borland.interwise.com/borland/iSeminar/RN1890/&lt;/a&gt;  e  mandem suas perguntas.&lt;br /&gt;&lt;br /&gt;As perguntas podem ser feitas (em inglês) antecipadamente envindo para o e-mail do David I davidi@codegear.com com o assunto "Question for the CEOs community chat"&lt;br /&gt;&lt;br /&gt;É isso pessoal, vamos participar!&lt;br /&gt;&lt;br /&gt;Abraço a todos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7239447456047387533?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7239447456047387533/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7239447456047387533&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7239447456047387533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7239447456047387533'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/05/bate-papo-com-ceo-da-codegear-jim.html' title='Bate papo com CEO da CodeGear Jim Douglas e CEO da Embarcadero Wayne Williams'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-1481018436192977171</id><published>2008-05-07T18:17:00.000-07:00</published><updated>2008-05-07T18:38:21.192-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='Embarcadero'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGear'/><title type='text'>Embarcadero Technologies®  Compra Code Gear</title><content type='html'>Olá amigos,&lt;br /&gt;&lt;br /&gt;        Nesta quarta feira, dia 07 de maio de 2008, li uma notícia que a principio me deixou preocupado, a noticia da conta de que a Embarcadero tecnologies estava acertanto a compra de ativos com a Borland Software Corporation para adquirir sua divisão CodeGear. Imediatamente entrei em contato com o meu amigo Bruno Lichot (CodeGear Product Evangelist), que imediatamente me posicionou dos fatos.&lt;br /&gt;       Logo, o que no inicio era uma preocupação, virou motivo de festa. Com essa "mudança", a Embarcadero passa a ser o maior fornecedor independentes de plataforma para o design, o que torna a nossa IDE mais sólida do que nunca.&lt;br /&gt;&lt;br /&gt;Veja a &lt;span&gt;&lt;a href="http://info.borland.com.br/codegear/david"&gt;&lt;span style="color: rgb(165, 42, 42);"&gt;carta de David I à Comunidade de Desenvolvedores CodeGear&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-1481018436192977171?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/1481018436192977171/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=1481018436192977171&amp;isPopup=true' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/1481018436192977171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/1481018436192977171'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/05/embarcadero-technologies-compra-code.html' title='Embarcadero Technologies®  Compra Code Gear'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-6396345370984888224</id><published>2008-03-19T18:20:00.000-07:00</published><updated>2008-03-19T18:34:49.935-07:00</updated><title type='text'>Aprendendo com os Mestres</title><content type='html'>Pessoal essa semana encontrei um material muito bom, que é o materia do CodeRage II realizado em novembro de 2007, este que é um evento parecido com o que tivemos aqui (&lt;a href="http://delphiforall.blogspot.com/2007/12/codegear-delphi-day-em-portugus.html"&gt;Delphi Day OnLine&lt;/a&gt;), tem um material de primeira linha só com feras como Marco Cantu, Nick Rodges e Cia, os vídeos, claro, estão todos em inglês mas vejo isso como uma oportunidade para praticarmos! rsrs&lt;br /&gt;&lt;br /&gt;Ai segue o Link e espero que todos disfrutem dessa dica!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://video.codegear.com/CodeRageIIArchives/"&gt;http://video.codegear.com/CodeRageIIArchives/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Abraço a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-6396345370984888224?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/6396345370984888224/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=6396345370984888224&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/6396345370984888224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/6396345370984888224'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/03/aprendendo-com-os-mestres.html' title='Aprendendo com os Mestres'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-3188552452317146695</id><published>2008-01-20T16:50:00.001-08:00</published><updated>2008-01-21T07:38:54.224-08:00</updated><title type='text'>Mini Cidade Delphi Brasil</title><content type='html'>Pessoal, essa semana eu criei a mini cidade Delphi Brasil, a ideia de criar essa mini-cidade é ver o quanto a comunidade delphi no Brasil é grande, quanto mais pessoas clicarem no link mais a cidade crescerá, e isso nos dará um "dimensão" do tamanho da comunidade. Lá existe uma espécie de mural! deixem um recado pra comunidade lá!, vamos mostrar como a comunidade é grande!&lt;br /&gt;Veja como está a cidade hoje:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://delphiforall.xpg.com.br/imagens/Cidade.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px;" src="http://delphiforall.xpg.com.br/imagens/Cidade.JPG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphibrasil.myminicity.com/"&gt;http://delphibrasil.myminicity.com/&lt;/a&gt; - Entrar na Cidade&lt;br /&gt;&lt;a href="http://delphibrasil.myminicity.com/ind"&gt;http://delphibrasil.myminicity.com/ind&lt;/a&gt; - Criar uma Indústria&lt;br /&gt;&lt;br /&gt;Vamos fazer a cidade crescer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-3188552452317146695?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/3188552452317146695/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=3188552452317146695&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3188552452317146695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3188552452317146695'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/01/mini-cidade-delphi-brasil.html' title='Mini Cidade Delphi Brasil'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-6448747015499971461</id><published>2008-01-15T07:14:00.000-08:00</published><updated>2008-01-15T18:05:06.402-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RN&apos;s'/><category scheme='http://www.blogger.com/atom/ns#' term='TypeLibrary'/><category scheme='http://www.blogger.com/atom/ns#' term='Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Datasnap'/><category scheme='http://www.blogger.com/atom/ns#' term='Borcon'/><title type='text'>DataSnap Dinâmico</title><content type='html'>&lt;a href="http://www.activedelphi.com.br/imagens/revista/revista_peq47.gif"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://www.activedelphi.com.br/imagens/revista/revista_peq47.gif" border="0" /&gt;&lt;/a&gt; &lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.activedelphi.com.br/imagens/revista/revista_peq47.gif"&gt;&lt;/a&gt;Pessoal, gostaria de dar destaque para um artigo que saiu na edição 47 da Active Delphi, esse que é uma espécie de "repescagem" para queles que não tiveram a oportunidade de ir na Borcon 2007. É o artigo do nosso amigo Marcos Barreto (mrbar2000 da lista NDDV).&lt;br /&gt;O cara conseguiu revolucionar o que já era uma revolução, que é o desenvolvimento n-tier, mas de forma dinâmica. Confesso que no inicio imaginei que seria mais dispendioso, e que perderia o desenvolvimento RAD, mas quando vi a implementação das classes, percebi que é muito simples tanto a implementação quanto a manutenção.&lt;br /&gt;&lt;br /&gt;Veja quais são as vantagens dessa técnica:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Não precisamos mais ficar nos aborrecendo com tanta Query e Provider espalhados pelo RDM.&lt;/li&gt;&lt;li&gt;Não é necessário se preocupar mais com a trabalheira dana em criar RDM's filhos e ter que configurar a TypeLibrary para que os SharedConnections enxerguem os RDM's filhos. (essa é melhor de todas rsrs, pelomenos pra nós)&lt;/li&gt;&lt;li&gt;Consumo de memória reduzido em 90% ou mais.&lt;/li&gt;&lt;li&gt;Facilidade na migração dos componentes de acesso a dados (já que é tudo dinâmico).&lt;/li&gt;&lt;li&gt;Facilidade em mudar a técnologia de acesso.&lt;/li&gt;&lt;li&gt;RN's (Regras de negócio) bem encapsuladas.&lt;/li&gt;&lt;li&gt;Facilidade de modulariação do Servidor de Aplicação&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Além do artigo, uma ótima dica também, é baixar o material da Borcon que pode ser encontrado no link &lt;a href="http://cc.codegear.com/Item/25225"&gt;http://cc.codegear.com/Item/25225&lt;/a&gt;&lt;/p&gt;Parabéns Marcos!&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-6448747015499971461?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/6448747015499971461/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=6448747015499971461&amp;isPopup=true' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/6448747015499971461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/6448747015499971461'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/01/datasnap-dinmico.html' title='DataSnap Dinâmico'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-145876599729428532</id><published>2008-01-02T02:19:00.000-08:00</published><updated>2008-01-02T10:14:17.401-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lookup'/><category scheme='http://www.blogger.com/atom/ns#' term='DBGrid'/><category scheme='http://www.blogger.com/atom/ns#' term='Join'/><title type='text'>Evitando Lookup's</title><content type='html'>Olá pessoal, para aqueles que utilizam campos lookup's para exibir num DBGrid a descrição de uma chave estrangeira, resolvi postar aqui um exemplo utilizando uma técnica que visa evitar esse tipo de campo, melhorando e muito na performance da sua aplicação. Vale a pena dar uma conferida.&lt;br /&gt;&lt;br /&gt;Trata-se de uma tela de pedidos/vendas, onde o usuário insere os produtos utilizando o próprio DBGrid,  recuperando a descrição do produto utilizando um JOIN entre as tabelas, a parti dai, basta adicionar os fields e alterar todas as ProviderFlags do TField do campo "externo" para false, para que ele não entre na montagem do updade.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphiforall.xpg.com.br/exemplos/EvitandoLookup.zip"&gt;Clique aqui para baixar o exemplo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-145876599729428532?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/145876599729428532/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=145876599729428532&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/145876599729428532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/145876599729428532'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2008/01/evitando-lookups.html' title='Evitando Lookup&apos;s'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-3354364722567484916</id><published>2007-12-14T09:51:00.000-08:00</published><updated>2007-12-14T10:10:07.580-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBExpress'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ECO'/><category scheme='http://www.blogger.com/atom/ns#' term='Blackfish SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='RAD Studio 2007'/><title type='text'>Delphi Day onLine  – Palestras disponíveis</title><content type='html'>No último dia 7 aconteceu o &lt;span style="font-weight: bold;"&gt;CodeGear Delphi Day em Português&lt;/span&gt;, um dia inteiro de palestras, onde foram abordados os seguintes temas:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://dn.codegear.com/article/images/37460/02000001.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 218px; height: 182px;" src="http://dn.codegear.com/article/images/37460/02000001.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;As principais razões para migrar de Delphi 7 para RAD Studio 2007 &lt;/b&gt;(&lt;/span&gt;Andreano Lanusse)&lt;/li&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;Generics em RAD Studio 2007 &lt;/b&gt;(&lt;/span&gt;Manoel Edésio)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Utilizando dbExpress 4 Framework &lt;/b&gt;(Bruno Lichot)&lt;b&gt; &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;Blackfish SQL sem limites para stored procedures e triggers em Delphi &lt;/b&gt;(&lt;/span&gt;Leonel Togniolli&lt;span id="ArticleLabel"&gt;)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;Desenvolvendo Aplicações WEB com ASP.NET, AJAX e RAD Studio 2007 &lt;/b&gt;(&lt;/span&gt;Andreano Lanusse &lt;span id="ArticleLabel"&gt;)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;Melhorando a qualidade de suas aplicações em Delphi &lt;/b&gt;(&lt;/span&gt;Ricardo Barbieri)&lt;/li&gt;&lt;li&gt;&lt;span id="ArticleLabel"&gt;&lt;b&gt;ECO IV e RAD Studio 2007 &lt;/b&gt;(&lt;/span&gt;Adilson Jr.&lt;span id="ArticleLabel"&gt;)&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;    Quem não teve oportunidade (assim como eu (-;)  pode baixar as palestras no link &lt;a href="http://dn.codegear.com/article/37460"&gt;http://dn.codegear.com/article/37460&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bom proveito a todos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-3354364722567484916?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/3354364722567484916/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=3354364722567484916&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3354364722567484916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/3354364722567484916'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/12/codegear-delphi-day-em-portugus.html' title='Delphi Day onLine  – Palestras disponíveis'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7201517732114520479</id><published>2007-12-13T09:14:00.000-08:00</published><updated>2007-12-13T09:30:25.779-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Herança Visual'/><category scheme='http://www.blogger.com/atom/ns#' term='Firebird'/><category scheme='http://www.blogger.com/atom/ns#' term='Actions'/><title type='text'>Exemplo para iniciantes</title><content type='html'>Pessoal, coloquei disponível para download um exemplo simples para inciante, onde abordei técnicas como Herança Visual, Actions, Pesquisa Incremental, etc. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphiforall.xpg.com.br/exemplos/CadAluno.zip"&gt;Clique Aqui para fazer o Download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Não deixem de comentar o exemplo.&lt;br /&gt;&lt;br /&gt;Abraço a todos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7201517732114520479?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7201517732114520479/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7201517732114520479&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7201517732114520479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7201517732114520479'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/12/exemplo-para-iniciantes.html' title='Exemplo para iniciantes'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7569697864118433112</id><published>2007-11-24T03:20:00.000-08:00</published><updated>2007-11-24T03:26:47.683-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Borcon'/><title type='text'>Cobertura da Borland Conference Revolutions</title><content type='html'>Pessoal a cobertura completa do que aconteceu na Borcon 2007 pode ser vista no link &lt;a href="http://info.borland.com.br/borcon07/cobertura_borcon.html"&gt;http://info.borland.com.br/borcon07/cobertura_borcon.html&lt;/a&gt;, lá você pode baixar o material das palestras, visualizar a fotos além de depoimentos de quem participou. Boa leitura!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7569697864118433112?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7569697864118433112/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7569697864118433112&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7569697864118433112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7569697864118433112'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/cobertura-da-borland-conference.html' title='Cobertura da Borland Conference Revolutions'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-4403988104508895359</id><published>2007-11-20T05:12:00.001-08:00</published><updated>2007-12-13T09:28:56.595-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Funcões'/><category scheme='http://www.blogger.com/atom/ns#' term='Datas'/><title type='text'>Função para retornar os dias úteis</title><content type='html'>Pessoal, a medida em que eu tiver tempo (-:, vou postar aqui funções que considero interessantes para o nosso dia-a-dia. A primeira que vou postar aqui é uma para contar os dias úteis em um intervalo de datas. Temos várias funções desse tipo na interne, mas eu achava os algoritimos muito complicados, então resolvi fazer a minha. Chegei a publicar ela no ActiveNews da ActiveDelphi, pra que não viu ai está.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;b&gt;function&lt;/b&gt; Dias_Uteis&lt;b&gt;(&lt;/b&gt;DataI&lt;b&gt;,&lt;/b&gt; DataF&lt;b&gt;:&lt;/b&gt;TDateTime&lt;b&gt;)&lt;/b&gt;&lt;b&gt;:&lt;/b&gt;Integer&lt;b&gt;;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;var&lt;/b&gt;&lt;br /&gt; contador&lt;b&gt;:&lt;/b&gt;Integer&lt;b&gt;;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt;&lt;br /&gt; &lt;b&gt;if&lt;/b&gt; DataI &lt;b&gt;&gt;&lt;/b&gt; DataF &lt;b&gt;then&lt;/b&gt;&lt;br /&gt; &lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;   result  &lt;b&gt;:&lt;/b&gt;&lt;b&gt;=&lt;/b&gt; &lt;span style="color:#e00000;"&gt;0&lt;/span&gt;&lt;b&gt;;&lt;/b&gt;&lt;br /&gt;   exit&lt;br /&gt; &lt;b&gt;end&lt;/b&gt;&lt;b&gt;;&lt;/b&gt;&lt;br /&gt; Contador &lt;b&gt;:&lt;/b&gt;&lt;b&gt;=&lt;/b&gt; &lt;span style="color:#e00000;"&gt;0&lt;/span&gt;&lt;b&gt;;&lt;/b&gt;&lt;br /&gt; &lt;b&gt;while&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;DataI &lt;b&gt;&lt;&lt;/b&gt;= DataF&lt;b&gt;)&lt;/b&gt; &lt;b&gt;do&lt;/b&gt;&lt;br /&gt; &lt;b&gt;begin&lt;/b&gt;&lt;br /&gt;   &lt;b&gt;if&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;&lt;b&gt;(&lt;/b&gt;DayOfWeek&lt;b&gt;(&lt;/b&gt;DataI&lt;b&gt;)&lt;/b&gt; &lt;b&gt;&lt;&lt;/b&gt;&lt;b&gt;&gt;&lt;/b&gt; &lt;span style="color:#e00000;"&gt;1&lt;/span&gt;&lt;b&gt;)&lt;/b&gt; &lt;b&gt;and&lt;/b&gt; &lt;b&gt;(&lt;/b&gt;DayOfWeek&lt;b&gt;(&lt;/b&gt;DataI&lt;b&gt;)&lt;/b&gt; &lt;span style="font-family:mon;"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&gt;&lt;/b&gt; &lt;span style="color:#e00000;"&gt;7&lt;/span&gt;&lt;b&gt;)&lt;/b&gt;&lt;b&gt;)&lt;/b&gt; &lt;b&gt;then&lt;/b&gt;&lt;br /&gt;     Inc&lt;b&gt;(&lt;/b&gt;Contador&lt;b&gt;)&lt;/b&gt;&lt;b&gt;;&lt;/b&gt;&lt;br /&gt;   DataI &lt;b&gt;:&lt;/b&gt;&lt;b&gt;=&lt;/b&gt; DataI &lt;b&gt;+&lt;/b&gt; &lt;span style="color:#e00000;"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt; &lt;b&gt;end&lt;/b&gt;&lt;b&gt;;&lt;/b&gt;&lt;br /&gt; result &lt;b&gt;:&lt;/b&gt;&lt;b&gt;=&lt;/b&gt; Contador&lt;b&gt;;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;b&gt;;&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;São apenas dois argumentos, Data Inicial e Data Final, a idéia é fazer um looping enquanto a data inicial for menor que a data final, a partir dai vamos incrementando a data inicial e verificamos se é um sábado ou domingo com a função DayOfWeek, se não for, contamos 1 dia. Simples não?&lt;br /&gt;&lt;br /&gt;Depois vamos melhorar essa função permitindo que ele suporte feriados. Até lá!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-4403988104508895359?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/4403988104508895359/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=4403988104508895359&amp;isPopup=true' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4403988104508895359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4403988104508895359'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/funo-para-retornar-os-dias-teis.html' title='Função para retornar os dias úteis'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-8218659037473686246</id><published>2007-11-19T06:44:00.000-08:00</published><updated>2007-11-19T11:09:43.942-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeGear'/><category scheme='http://www.blogger.com/atom/ns#' term='Borcon'/><title type='text'>Developer Conference (BorCon 2007) - Apresentações disponíveis para download</title><content type='html'>Para aqueles que estavam ansiosos, já está disponível para download, todo o material da Borcon. Como eu não perco tempo, já estou desfrutando de toda essa massa de conhecimento!.&lt;br /&gt;Aproveitem!  &lt;a href="http://dn.codegear.com/br/article/37375"&gt;http://dn.codegear.com/br/article/37375&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-8218659037473686246?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/8218659037473686246/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=8218659037473686246&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8218659037473686246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/8218659037473686246'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/material-da-borcon.html' title='Developer Conference (BorCon 2007) - Apresentações disponíveis para download'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7010711877590818383</id><published>2007-11-09T04:38:00.000-08:00</published><updated>2007-11-09T07:17:07.143-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Strings'/><title type='text'>StringOfChar, replicando caracteres.</title><content type='html'>Pessoal, essa é mais um funçãozinha muito interssante e muitos não conhecem. A sua utilidade é replicar um determinando caracter e sua sintaxe é muito simples, contendo apenas dois argumentos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;function&lt;/strong&gt; StringOfChar(ch: AnsiChar; Count: Integer): AnsiString; &lt;strong&gt;overload&lt;/strong&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;ch&lt;/strong&gt; - Caracter a ser replicado.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Count&lt;/strong&gt; - Número de ocorrências&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Exemplo:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;strong&gt;procedure&lt;/strong&gt; TForm1.Button1Click(Sender:TObject);&lt;br /&gt;begin&lt;br /&gt;ShowMessage(StringOfChar('*',20)+#13+'Atenção ocorreu um erro'+#13+StringOfChar('*',20));&lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Abraços, e até a próxima!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7010711877590818383?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7010711877590818383/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7010711877590818383&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7010711877590818383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7010711877590818383'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/stringofchar-replicando-caracteres.html' title='StringOfChar, replicando caracteres.'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-134894376297848905</id><published>2007-11-08T15:36:00.000-08:00</published><updated>2008-12-10T17:50:49.263-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='POO'/><title type='text'>Polimorfismo não é bicho de sete cabeças!</title><content type='html'>É interessante como a POO em geral é um paradigma para muitos. Depois de muitos anos já se falando sobre o assunto, muitos ainda a tratam como um "TABÚ".&lt;br /&gt;Normalmente, aqueles que "nasceram" na programação estruturada tem uma dificuldade maior para entender o conceito (ou filosofia, como alguns gostam de chamar).&lt;br /&gt;&lt;br /&gt;Mas o fato é que não existe nenhum mistério, e posso garantir que os benefícios são muitos. E das possibilidades apresentadas pela POO, sem dúvida a que mais me fascina é o POLIMORFISMO.&lt;br /&gt;&lt;br /&gt;A descrição mais usada para ele é a possibilidade que determinado objeto tem para assumir comportamentos diferentes dependendo da necessidade.&lt;br /&gt;&lt;br /&gt;Eu vou exemplificar aqui os benefícios e ao mesmo tempo mostrar que não existe nenhum bicho de sete cabeças no polimorfismo.&lt;br /&gt;&lt;br /&gt;Abra um novo projeto no delphi, salve com o nome de Polimorfismo.dpr, o form com o nome de uFrmMain.&lt;br /&gt;&lt;br /&gt;Vamos incluir uma nova unit para criar a nossa classe. Para isso vá em File/New/Unit salve com o nome de uCalculadora e implemente a unit como a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;b style="FONT-FAMILY: courier new"&gt;unit&lt;/b&gt;&lt;span style="font-family:courier new;"&gt; uCalculadora;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;interface&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;uses&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; SysUtils;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;type&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TCalculadora = &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Calcular (ValueA, ValueB:Real): Real; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;virtual&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;abstract&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TMultiplicar = &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(TCalculadora)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Calcular (ValueA, ValueB:Real): Real; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TSomar = &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(TCalculadora)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Calcular (ValueA, ValueB:Real): Real; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TSubtrair = &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(TCalculadora)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Calcular (ValueA, ValueB:Real): Real; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;TDividir = &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(TCalculadora)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;public&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Calcular (ValueA, ValueB:Real): Real; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;implementation&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:green;"&gt;&lt;i&gt;{ TMultiplicar }&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="TEXT-DECORATION: none;font-family:courier new;" &gt;TMultiplicar.Calcular&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(ValueA, ValueB: Real): Real;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Result := ValueA * ValueB;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:green;"&gt;&lt;i&gt;{ TSomar }&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="TEXT-DECORATION: none;font-family:courier new;" &gt;TSomar.Calcular&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(ValueA, ValueB: Real): Real;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Result := ValueA + ValueB;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:green;"&gt;&lt;i&gt;{ TSubtrair }&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="TEXT-DECORATION: none;font-family:courier new;" &gt;TSubtrair.Calcular&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(ValueA, ValueB: Real): Real;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Result := ValueA - ValueB;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:green;"&gt;&lt;i&gt;{ TDividir }&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;function&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="TEXT-DECORATION: none;font-family:courier new;" &gt;TDividir.Calcular&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;(ValueA, ValueB: Real): Real;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Result := ValueA / ValueB;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;except&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;on&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; E: Exception &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;do&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Pos(&lt;/span&gt;&lt;span style="font-family:courier new;color:blue;"&gt;'BY ZERO'&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;, UpperCase(E.&lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;Message&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;)) &amp;gt; &lt;/span&gt;&lt;span style="font-family:courier new;color:red;"&gt;0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;then&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;Raise&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; Exception.Create(&lt;/span&gt;&lt;span style="font-family:courier new;color:blue;"&gt;'Não é permitido divisão por zero.'&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Primeiro criamos uma classe com o nome de TCalculadora com um método chamado &lt;span style="FONT-WEIGHT: bold"&gt;Calcular&lt;/span&gt;&lt;span style="font-size:0;"&gt;,&lt;/span&gt;&lt;span style="FONT-WEIGHT: bold"&gt; &lt;/span&gt;observe a que definimos o método com o tipo &lt;span style="FONT-WEIGHT: bold"&gt;virtual &lt;/span&gt;e com a diretiva &lt;span style="FONT-WEIGHT: bold"&gt;abstract &lt;/span&gt;indicando que o método não será implementado na classe em que foi declarado.&lt;br /&gt;&lt;br /&gt;Em seguida criamos 4 classes (TMultiplicar, TSomar, TSubtrair, TDividir) , todos elas descendem de TCalculadora e tem o método calcular (exatamente igual ao método da classe TCalculadora) com a diretiva &lt;span style="color:black;"&gt;&lt;b&gt;override&lt;/b&gt;&lt;/span&gt; (sebrecarga) garantindo que o método tenha apenas a implementação da classe descendente sobrepondo a implementação da classe base.&lt;br /&gt;&lt;br /&gt;Depois implementamos o método de cada classe conforme a operação. Agora vamos criar o exemplo de utilização dessas classes.&lt;br /&gt;&lt;br /&gt;No FrmMain coloque os seguintes componentes: 3 Edits; 1 Button e um RadioGroup.&lt;br /&gt;Adicione ao RadioGroup 3 itens (Somar, Multiplicar, Subtrair,Dividir), altere a propriedade ItemIndex para 0 (Zero).&lt;br /&gt;&lt;br /&gt;Posicione os componentes conforme a figura abaixo:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_D8L6PM_y9G4/RzOmKWzqntI/AAAAAAAAADc/8D6_fyz9lLU/s1600-h/Polimorfismo.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5130627097356312274" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_D8L6PM_y9G4/RzOmKWzqntI/AAAAAAAAADc/8D6_fyz9lLU/s400/Polimorfismo.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Implemente o botão calcular conforme a listagem abaixo:&lt;br /&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;procedure&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; TFrmMain.Button1Click(Sender: TObject);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;var&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Calculadora: TCalculadora;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;begin&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;case&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; RadioGroup1.ItemIndex &lt;/span&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;of&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:red;"&gt;0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;: Calculadora := TSomar.Create;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:red;"&gt;1&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;: Calculadora := TMultiplicar.Create;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:red;"&gt;2&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;: Calculadora := TSubtrair.Create;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:red;"&gt;3&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;: Calculadora := TDividir.Create;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Edit3.Text := FloatToStr(Calculadora.Calcular(StrToFloatDef(Edit1.text,&lt;/span&gt;&lt;span style="font-family:courier new;color:red;"&gt;0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;),StrToFloatDef(Edit2.text,&lt;/span&gt;&lt;span style="font-family:courier new;color:red;"&gt;0&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;)));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;color:black;"&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Criamos uma variável com o tipo da nossa classe base (TCalculadora) depois CRIAMOS com o tipo da classe descendente correspondente a operação que desejamos. Percebam que chamamos o método Calcula do nosso objeto sem nos preocupar com a implementação.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphiforall.xpg.com.br/exemplos/Polimorfismo.zip"&gt;Download do exemplo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;Como vocês podem ver não existem mistérios! não deixem de comentar esse post! até a próxima!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-134894376297848905?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/134894376297848905/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=134894376297848905&amp;isPopup=true' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/134894376297848905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/134894376297848905'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/polimorfismo-no-bicho-de-sete-cabeas.html' title='Polimorfismo não é bicho de sete cabeças!'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_D8L6PM_y9G4/RzOmKWzqntI/AAAAAAAAADc/8D6_fyz9lLU/s72-c/Polimorfismo.gif' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-4905903684273608449</id><published>2007-11-07T04:19:00.000-08:00</published><updated>2008-12-10T17:50:49.538-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Strings'/><category scheme='http://www.blogger.com/atom/ns#' term='StringList'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtractStrings'/><title type='text'>ExtractStrings: Você conhece?</title><content type='html'>Pessoal, resolvi começar a postar aqui, funções do delphi que normalmente quebram muitos galhos, e, por desconhece-las, acabamos "rebolando" pra criar algo "parecido". E não pensem que não estou falando de mim! :)&lt;br /&gt;&lt;br /&gt;Uma função muito interessante e que tem uma enorme utilidade é a função ExtracStrings. Essa função preenche uma lista (StringList), com substrings de uma string.&lt;br /&gt;&lt;br /&gt;Imagine que você precise ler um arquivo CSV (separado por ponto-e-vírgula). Dai você pergunta: "&lt;span style="font-style: italic;"&gt;Como vou separar as colunas?&lt;/span&gt;"; a primeira idéia é criar uma função para localizar (Pos) o primeiro ponto-e-vírgula e extrair o fragmento da string (Copy),  e assim sucessivamente, atire a primeira pedra que nunca fez assim!&lt;br /&gt;&lt;br /&gt;Pois é! Perdemos nosso precioso tempo reinventando a roda.&lt;br /&gt;&lt;br /&gt;Veja a sintaxe da função ExtractString:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;function &lt;/span&gt;ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar; Strings: TStrings): Integer;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Separator &lt;/span&gt;- É um array onde você pode definir vários separadores&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;WhiteSpace &lt;/span&gt;- É um Array onde você define os caracteres que devem ser Ignorados quando ocorrerem no inicio da String.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Content &lt;/span&gt;- É a String de onde se deseja extrais as substrings&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;    A Função retorna o número de Substrings extraídas.&lt;br /&gt;&lt;br /&gt;Veja um pequeno exemplo de utilização:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;procedure &lt;/span&gt;TForm1.Button1Click(Sender: TObject);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;const&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;SDados = 'Cristiano Martins Alves;   28 Anos; Casado; São Paulo; SP';&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Lista: TStringList;&lt;br /&gt;iRetorno:Integer;  &lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;begin&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;Lista := TStringList.Create;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;try&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;iRetorno := &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;ExtractStrings([';'],[' '],PChar(sDados),Lista);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;    &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;if &lt;/span&gt;iRetorno &gt; 0 &lt;span style="font-weight: bold;"&gt;then&lt;/span&gt;&lt;br /&gt;ShowMessage(Lista.Text);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;finally&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;FreeAndNil(Lista);&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;  &lt;span style="font-weight: bold;"&gt;&lt;br /&gt;end&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;br /&gt;end&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Veja o resultado:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_D8L6PM_y9G4/RzG5HcYHmJI/AAAAAAAAADI/9cgAV39TYK8/s1600-h/imagem.bmp"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://4.bp.blogspot.com/_D8L6PM_y9G4/RzG5HcYHmJI/AAAAAAAAADI/9cgAV39TYK8/s400/imagem.bmp" alt="" id="BLOGGER_PHOTO_ID_5130084988079282322" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Repare que na nossa constante existe um espaço entre o nome e a idade, mas ele foi ignorado conforme definido no segundo parâmetro.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;É isso ai pessoal! Não deixem de comentar o blog!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-4905903684273608449?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/4905903684273608449/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=4905903684273608449&amp;isPopup=true' title='6 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4905903684273608449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/4905903684273608449'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/extractstrings-voc-conhece.html' title='ExtractStrings: Você conhece?'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_D8L6PM_y9G4/RzG5HcYHmJI/AAAAAAAAADI/9cgAV39TYK8/s72-c/imagem.bmp' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-7619479240019876673</id><published>2007-11-06T02:43:00.000-08:00</published><updated>2007-11-06T02:47:22.740-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBGrid'/><title type='text'>Controlar a exibição do ScrollBar do DBGrid</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:verdana;"&gt; Muitas vezes ficamos incomodados com aquele ScrollBar que teima em aparecer mesmo que o DBGrid tenha apenas 1 ou 2 linhas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Por causa desse incômodo que resolvi pesquisar até chegar a seguinte solução.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; Coloque no evento onDrawColumnCell do seu DBGrid&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;   &lt;span style="font-family: courier new; color: rgb(0, 0, 0);font-family:Courier New;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;procedure &lt;/span&gt;TForm2.DBGrid1DrawColumnCell(Sender: TObject;  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;if&lt;/span&gt; (TStringGrid(DBGrid1).RowCount-1) &lt;span style="font-weight: bold;"&gt;then &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0); font-family: courier new;font-size:85%;" &gt;//Se tiver menos de 10  linha  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    ShowScrollBar(DBGrid1.Handle,SB_VERT,False); &lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0); font-family: courier new;font-size:85%;" &gt;//Remove barra  Vertical&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-family: courier new; color: rgb(0, 0, 0);font-size:85%;" &gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-size:85%;" &gt;&lt;span style="font-family: courier new;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt; É claro que você deve melhorar a lógica, como por exemplo achar o número de  linhas (exibidos sem ScrollBar) dependo da altura do DBGrid.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://www.activedelphi.com.br/"&gt;ActiveDelphi&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-7619479240019876673?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/7619479240019876673/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=7619479240019876673&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7619479240019876673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/7619479240019876673'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/11/controlar-exibio-do-scrollbar-do-dbgrid.html' title='Controlar a exibição do ScrollBar do DBGrid'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-5839774232401970359</id><published>2007-10-20T08:18:00.000-07:00</published><updated>2007-10-20T09:01:37.314-07:00</updated><title type='text'>Como retornar múltiplos resultados numa função?</title><content type='html'>&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:arial;"&gt;Você já teve a necessidade de retornar múltiplos valores numa função? normalmente a primeira idéia é criar uma procedure com parâmetros passados por referência como abaixo:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;procedure &lt;/span&gt;GetCalculo(&lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;Valor1, Valor2:Double;&lt;span style="font-weight: bold;"&gt; var &lt;/span&gt;Soma&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;Media:Double);&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;br /&gt;&lt;/span&gt;  Soma := Valor1 + Valor2;&lt;br /&gt;Media := Soma / 2;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;//Testando&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;procedure &lt;/span&gt;TForm1.Button1Click(Sender: TObject);&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;var&lt;/span&gt;&lt;br /&gt;Soma, Media:Double;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt;&lt;br /&gt;GetCalculo(100,50,Soma,Media);&lt;br /&gt;ShowMessage('Soma: '+FloatToStr(Soma)+#13+'Media: '+FloatToStr(Media));&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;Isso funciona perfeitamente, mas veja que precisei declarar as funções que vou receber. Agora imagina se fosse 10 valores no retorno! além da procedure ficar imensa você ainda teria que declarar as variáveis que seriam passadas como referência. Uma técnica mais elegante de fazer isso é criar um  &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;record &lt;/span&gt;&lt;span style="font-family:arial;"&gt;e usar esse tipo na nossa função&lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;" &gt;. &lt;/span&gt;&lt;span style="font-family:arial;"&gt;Veja o exemplo acima alterado.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;//definindo o tipo &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;type&lt;/span&gt;&lt;br /&gt;TCalculo = &lt;span style="font-weight: bold;"&gt;record&lt;br /&gt;&lt;/span&gt;    Soma,&lt;br /&gt;Media:Double;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Form1 = Class(TForm)&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;implemetation&lt;br /&gt;&lt;br /&gt;function &lt;/span&gt;TForm1.GetCalculo(&lt;span style="font-weight: bold;"&gt;const &lt;/span&gt;Valor1, Valor2:Double):TCalculo;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 102, 0);font-family:courier new;font-size:85%;"  &gt;//Repare que o result agora pode receber vários resutados&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Result.Soma := Valor1 + Valor2;&lt;br /&gt;Result.Media := &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Result.&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Soma / 2;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="color: rgb(0, 102, 0);"&gt;//Testando&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt;procedure &lt;/span&gt;TForm1.Button1Click(Sender: TObject);&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;var&lt;/span&gt;&lt;br /&gt;Calculo: TCalculo;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt;&lt;br /&gt;Calculo := GetCalculo(100,50);&lt;br /&gt;ShowMessage('Soma: '+FloatToStr(Calculo.Soma)+#13+'Media: '+FloatToStr(Calculo.Media));&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt;;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt;Com eu falei, não existe muita diferença nessa  técnica com a  passagem por parâmetros se considerarmos o número de parâmetros, mas com certeza numa função que retorna vários resultados, a segunda opção tornará o seu código muito mais legível e elegante. Até a próxima.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-5839774232401970359?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/5839774232401970359/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=5839774232401970359&amp;isPopup=true' title='5 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5839774232401970359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/5839774232401970359'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/10/funo-que-retorna-multiplos-valores.html' title='Como retornar múltiplos resultados numa função?'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-713672489936172147</id><published>2007-10-20T05:41:00.001-07:00</published><updated>2007-10-20T06:08:44.126-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Função para validar CPF no SQL Server</title><content type='html'>&lt;span style="font-family:Courier New;font-size:85%;"&gt;/*&lt;br /&gt;  Cristiano Martins Alves&lt;br /&gt;  Para testar: SELECT DBO.CPF_VALIDO('16195473247')&lt;br /&gt;*/&lt;br /&gt;CREATE FUNCTION CPF_VALIDO(@CPF VARCHAR(11))&lt;br /&gt;RETURNS CHAR(1)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;  DECLARE @INDICE INT,&lt;br /&gt;          @SOMA INT,&lt;br /&gt;          @DIG1 INT,&lt;br /&gt;          @DIG2 INT,&lt;br /&gt;          @CPF_TEMP VARCHAR(11),&lt;br /&gt;          @DIGITOS_IGUAIS CHAR(1),&lt;br /&gt;          @RESULTADO CHAR(1)&lt;br /&gt;         &lt;br /&gt;  SET @RESULTADO = 'N'&lt;br /&gt;&lt;br /&gt;  /*&lt;br /&gt;      Verificando se os digitos são iguais&lt;br /&gt;      A Principio CPF com todos o números iguais são Inválidos&lt;br /&gt;      apesar de validar o Calculo do digito verificado&lt;br /&gt;      EX: O CPF 00000000000 é inválido, mas pelo calculo&lt;br /&gt;      Validaria&lt;br /&gt;  */&lt;br /&gt;&lt;br /&gt;  SET @CPF_TEMP = SUBSTRING(@CPF,1,1)&lt;br /&gt;&lt;br /&gt;  SET @INDICE = 1&lt;br /&gt;  SET @DIGITOS_IGUAIS = 'S'&lt;br /&gt;&lt;br /&gt;  WHILE (@INDICE &lt;= 11)&lt;br /&gt;  BEGIN&lt;br /&gt;    IF SUBSTRING(@CPF,@INDICE,1) &lt;&gt; @CPF_TEMP&lt;br /&gt;      SET @DIGITOS_IGUAIS = 'N'&lt;br /&gt;    SET @INDICE = @INDICE + 1&lt;br /&gt;  END;&lt;br /&gt;&lt;br /&gt;  --Caso os digitos não sejão todos iguais Começo o calculo do digitos&lt;br /&gt;  IF @DIGITOS_IGUAIS = 'N'&lt;br /&gt;  BEGIN&lt;br /&gt;    --Cálculo do 1º dígito&lt;br /&gt;    SET @SOMA = 0&lt;br /&gt;    SET @INDICE = 1&lt;br /&gt;    WHILE (@INDICE &lt;= 9)&lt;br /&gt;    BEGIN&lt;br /&gt;      SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (11 - @INDICE);&lt;br /&gt;      SET @INDICE = @INDICE + 1&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    SET @DIG1 = 11 - (@SOMA % 11)&lt;br /&gt;&lt;br /&gt;    IF @DIG1 &gt; 9&lt;br /&gt;      SET @DIG1 = 0;&lt;br /&gt;&lt;br /&gt;    -- Cálculo do 2º dígito }&lt;br /&gt;    SET @SOMA = 0&lt;br /&gt;    SET @INDICE = 1&lt;br /&gt;    WHILE (@INDICE &lt;= 10)&lt;br /&gt;    BEGIN&lt;br /&gt;      SET @Soma = @Soma + CONVERT(INT,SUBSTRING(@CPF,@INDICE,1)) * (12 - @INDICE);&lt;br /&gt;      SET @INDICE = @INDICE + 1&lt;br /&gt;    END&lt;br /&gt;&lt;br /&gt;    SET @DIG2 = 11 - (@SOMA % 11)&lt;br /&gt;&lt;br /&gt;    IF @DIG2 &gt; 9&lt;br /&gt;      SET @DIG2 = 0;&lt;br /&gt;&lt;br /&gt;    -- Validando&lt;br /&gt;    IF (@DIG1 = SUBSTRING(@CPF,LEN(@CPF)-1,1)) AND (@DIG2 = SUBSTRING(@CPF,LEN(@CPF),1))&lt;br /&gt;      SET @RESULTADO = 'S'&lt;br /&gt;    ELSE&lt;br /&gt;      SET @RESULTADO = 'N'&lt;br /&gt;  END&lt;br /&gt;  RETURN @RESULTADO&lt;br /&gt;END&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-713672489936172147?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/713672489936172147/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=713672489936172147&amp;isPopup=true' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/713672489936172147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/713672489936172147'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/10/funo-para-validar-cpf-no-sql-server.html' title='Função para validar CPF no SQL Server'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-2100929673482207922</id><published>2007-10-19T17:33:00.000-07:00</published><updated>2007-10-20T06:08:04.828-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><title type='text'>Dica: Permitir apenas uma instância da aplicação.</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;As vezes necessitamos limitar a abertura de apenas uma instância da nossa aplicação. O objetivo aqui é demonstrar como fazer isso:&lt;br /&gt;&lt;br /&gt;Abra o fonte do seu arquivo DPR e adicione na uses as seguintes units:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;uses &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  System, Windows, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  ... &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;E codifique como o exemplo abaixo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  Instancia: THandle;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Instancia&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;:= CreateMutex(nil, false, 'InstanciaIniciada');&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;if &lt;/span&gt;WaitForSingleObject(&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Instancia&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;, 0) = wait_Timeout &lt;span style="font-weight: bold;"&gt;then&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Application.MessageBox('Atenção o programa já está &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;aberto!.','Atenção',MB_ICONINFORMATION);;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;Exit;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;end&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-family:courier new;"&gt;Application.Initialize;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-family:courier new;"&gt;Application.CreateForm(TForm1, Form1);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt; &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-family:courier new;"&gt;Application.Run;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;end&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nesse exemplo criamos um objeto do tipo THandle chamado &lt;/span&gt;&lt;span style="font-weight: bold;font-family:arial;font-size:85%;"  &gt;instancia&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;, em seguida instanciamos o objeto com o nome da nossa janela (&lt;/span&gt;&lt;span style="font-style: italic;font-family:courier new;font-size:85%;"  &gt;InstanciaIniciada&lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-family:arial;"&gt;), a&lt;/span&gt; apartir dai verificamos se já existe uma &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;instância &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;rodando com &lt;/span&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;span style="font-weight: bold;"&gt; WaitForSingleObject&lt;/span&gt;, caso exista exibimos a mensagem para o usuários e fechamos a aplicação.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-2100929673482207922?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/2100929673482207922/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=2100929673482207922&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/2100929673482207922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/2100929673482207922'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/10/permitir-apenas-uma-instancia-da.html' title='Dica: Permitir apenas uma instância da aplicação.'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-530383544378997440</id><published>2007-10-19T09:24:00.000-07:00</published><updated>2007-10-20T05:38:36.608-07:00</updated><title type='text'>Dica: Utilizar formatos diferentes no FormatFloat</title><content type='html'>&lt;span style=";font-family:arial;font-size:85%;"  &gt;Muitas vezes temos a necessidade de formatos diferentes para números POSITIVOS e NEGATIVOS. O que pouca gente sabe é que o FormatFloat faz isso pra nós! Podemos passar no parâmetro format, uma string com os dois formatos separados por ; (ponto e vírgula) &lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;veja:&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:arial;font-size:85%;"  &gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;ShowMessage(FormatFloat('R$ 0.00,;"("R$ 0.00,")"',-1500)); &lt;span style="color: rgb(0, 102, 0);"&gt;//Número negativo entre parênteses&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;ShowMessage(FormatFloat('R$ 0.00,;R$ 0.00,-',-1500)); &lt;span style="color: rgb(0, 102, 0);"&gt;//Número negativo com sinal a direita&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;ShowMessage(FormatFloat('R$ 0.00,;R$ 0.00,-',1500)); &lt;span style="color: rgb(0, 102, 0);"&gt;//Número positivo&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-530383544378997440?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/530383544378997440/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=530383544378997440&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/530383544378997440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/530383544378997440'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/10/utilizar-formatos-diferentes-no.html' title='Dica: Utilizar formatos diferentes no FormatFloat'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4573215013672394359.post-2745827445604351048</id><published>2007-10-19T08:04:00.000-07:00</published><updated>2008-12-10T17:50:50.674-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='API'/><title type='text'>Dica: Form sem barra de títulos. Utilizando API</title><content type='html'>&lt;span style="font-family:arial;font-size:85%;"&gt;Muitas vezes precisamos de um form sem barra de títulos quando a idéia é apenas exibir uma informação ao usuário. Sabemos que se alterarmos a propriedade BorderStyle para none conseguimos esse efeito, no entanto o visual não é muito bom, o form fica com uma aparência FLAT e nem sempre é o que queremos (a menos que seja um Splash). &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Crie um novo projeto no delphi, coloque o Label e defina as seguintes propriedades:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Align: alClient&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Alingment: taCenter&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Layout: tlCenter&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Seu form deve se parecer com este&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5123072513871865442" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_D8L6PM_y9G4/RxjPTuPmZmI/AAAAAAAAAAM/H0VRAd9whe8/s320/imagem1.bmp" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:Arial;font-size:85%;"&gt;Deixe o form com o tamanho que desejar. E no evento onCreate coloque.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;span style="color:#000099;"&gt;&lt;strong&gt;procedure&lt;/strong&gt;&lt;/span&gt; TForm1.FormCreate(Sender: TObject);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;span style="color:#000066;"&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;&lt;span style="color:#006600;"&gt;{Removendo Barra de tírulos}&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;SetWindowLong(Handle,GWL_STYLE, GetWindowLong(Handle, GWL_STYLE ) &lt;span style="color:#000066;"&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/span&gt; &lt;strong&gt;&lt;span style="color:#000066;"&gt;not&lt;/span&gt;&lt;/strong&gt; WS_CAPTION);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;color:#000066;"&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;color:#000000;"&gt;Veja a diferença entre as duas técnicas&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="center"&gt;&lt;span style="font-family:arial;font-size:78%;"&gt;&lt;strong&gt;Utilizando a API&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;img id="BLOGGER_PHOTO_ID_5123073183886763634" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_D8L6PM_y9G4/RxjP6uPmZnI/AAAAAAAAAAU/irL6-ENMBk8/s320/imagem3.bmp" border="0" /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:arial;"&gt;&lt;strong&gt;Utilizando BorderStyle = bsNone&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;img id="BLOGGER_PHOTO_ID_5123073729347610242" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_D8L6PM_y9G4/RxjQaePmZoI/AAAAAAAAAAc/7s5zfldmQ38/s320/imagem4.bmp" border="0" /&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;Para mais informações sobre a API acesse: &lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms633591.aspx"&gt;&lt;span style="font-family:arial;font-size:85%;"&gt;http://msdn2.microsoft.com/en-us/library/ms633591.aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4573215013672394359-2745827445604351048?l=delphiforall.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphiforall.blogspot.com/feeds/2745827445604351048/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4573215013672394359&amp;postID=2745827445604351048&amp;isPopup=true' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/2745827445604351048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4573215013672394359/posts/default/2745827445604351048'/><link rel='alternate' type='text/html' href='http://delphiforall.blogspot.com/2007/10/dica-form-sem-barra-de-ttulos.html' title='Dica: Form sem barra de títulos. Utilizando API'/><author><name>Cristiano Martins Alves</name><uri>http://www.blogger.com/profile/14568396099477915663</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='28' height='32' src='http://1.bp.blogspot.com/_D8L6PM_y9G4/SLVp3M7Nw1I/AAAAAAAAAGA/dNrf667KJpU/S220/Foto_Cristiano.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_D8L6PM_y9G4/RxjPTuPmZmI/AAAAAAAAAAM/H0VRAd9whe8/s72-c/imagem1.bmp' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
