<?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-2178975238297259742</id><updated>2012-01-24T10:01:38.847-02:00</updated><category term='kbm'/><category term='postgresql'/><category term='open tools api'/><category term='sqlserveree'/><category term='CTI'/><category term='pgcon'/><category term='api do windows'/><category term='map'/><category term='ponteiros'/><category term='http'/><category term='IDE'/><category term='assembly'/><category term='firebird'/><category term='delphi'/><category term='indy'/><category term='bpl'/><category term='expressão regular'/><category term='windows'/><category term='tdd'/><category term='off topic'/><category term='rtti'/><category term='ti'/><category term='diretivas'/><category term='retro'/><category term='xmldoc'/><category term='zeos'/><category term='DLL'/><category term='documentação'/><category term='oop'/><category term='dbexpress'/><category term='decision cube'/><category term='thread'/><category term='oracle'/><category term='pascal'/><category term='dicionário'/><category term='diversos'/><category term='serviço do windows'/><category term='socket'/><category term='revistas'/><category term='scrum'/><category term='componentes'/><category term='cpl'/><category term='sql'/><category term='eventos'/><category term='exception'/><category term='apresentação'/><category term='linkoteca'/><category term='pragmático'/><category term='svn'/><title type='text'>Eu Gosto do Delphi</title><subtitle type='html'>Este blog tem o objetivo de compartilhar conhecimentos em Delphi.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default?start-index=101&amp;max-results=100'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>265</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-623512535609990828</id><published>2011-12-23T10:16:00.000-02:00</published><updated>2011-12-26T00:56:00.884-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Eu tenho um sonho</title><content type='html'>Olá. &lt;br /&gt;&lt;br /&gt;Mais um ano se encerra e mais um ano se inicia.&lt;br /&gt;&lt;br /&gt;Não podemos ficar indiferente a isto. Esta época do ano é meramente um marco. São dias como outro qualquer, mas representam o fim de uma época e a esperança que o próximo período será melhor. Natal e Ano Novo. As palavras em si encerram algo bom.&lt;br /&gt;&lt;br /&gt;Mas de nada adianta se não houver reflexão.&lt;br /&gt;&lt;br /&gt;E eu ando refletindo bastante e convido a você, amigo desconhecido, a fazer o mesmo.&lt;br /&gt;&lt;br /&gt;Refletir sobre o que fizemos de bom e de ruim. &lt;br /&gt;Pedir perdão e perdoar. E perdoar a si mesmo, como sabiamente me aconselha minha querida namorada, que mais do que isso, é minha amiga nas horas difíceis. Tamires, obrigado por entrar em minha vida.&lt;br /&gt;&lt;br /&gt;Valorizar o tempo com os seus filhos. Missão difícil para pais como eu, que por algum motivo não tem o privilégio de conviver diariamente com eles. Que os vêem em dias marcados. Júlio e Fernanda, meus melhores dias são aqueles em que vocês estão comigo, seja no Parque do Ibirapuera, seja assistindo o mesmo filminho pela enésima vez.&lt;br /&gt;&lt;br /&gt;Deus, obrigado por ter me dado dois filhos maravilhosos. &lt;br /&gt;&lt;br /&gt;Nossos pais merecem atenção também. Os meus não vivem juntos a muito tempo. Tenho algumas lembranças, umas boas outras ruins. &lt;br /&gt;Tento sempre ficar com as boas. Rezo sempre para que eles se perdoem e vivam plenamente suas vidas. O que eu puder fazer para ajudá-los, farei. &lt;br /&gt;Minha mãe foi uma guerreira e merece toda minha paciência e Deus, mais uma vez, me ajudará.&lt;br /&gt;Valdete e Joselito, que Deus conforte seus corações.&lt;br /&gt;&lt;br /&gt;Nossos irmãos não podem ser esquecidos. Tenho um bom irmão. Centrado. Admiro muito ele, espero que ele saiba disto. Manoel, você é o cara. Tenho mais dois irmãos por parte de pai que gostaria de ter tido mais contato. Jenny e Jony. &lt;br /&gt;&lt;br /&gt;Há muito mais pessoas. A mensagem que quero passar é esta. Pare e veja o que é e principalmente, quem é importante para você. E deixe isso claro para elas, com palavras e atitudes.&lt;br /&gt;&lt;br /&gt;Voltarei a postar no ano de 2012. Nosso Delphi está cheio de novidades e este blog será profissionalizado a fim de podermos crescer juntos. &lt;br /&gt;&lt;br /&gt;Quanto ao meu sonho?&lt;br /&gt;&lt;br /&gt;Que em 2012 nossos sonhos sejam verdades.&lt;br /&gt;&lt;br /&gt;Feliz Natal e Próspero Ano Novo a todos.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/sXmWAOIWg3w" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-623512535609990828?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/623512535609990828/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=623512535609990828' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/623512535609990828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/623512535609990828'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/12/eu-tenho-um-sonho.html' title='Eu tenho um sonho'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/sXmWAOIWg3w/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2212646921952100050</id><published>2011-11-29T11:56:00.001-02:00</published><updated>2011-11-29T12:08:48.561-02:00</updated><title type='text'>Delphi Conference 2011</title><content type='html'>Olá a todos.&lt;br /&gt;&lt;br /&gt;Primeiramente gostaria de me desculpar por tanto tempo sem postagens. Houveram mudanças muito importantes na minha vida profissional e infelizmente isso me impediu de postar com a frequência que eu gostaria.&lt;br /&gt;&lt;br /&gt;Este post tem um motivo especial que é o Delphi Conference 2011 que será amanhã, 30.11.2011, em São Paulo.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphiconference.com.br/"&gt;http://www.delphiconference.com.br/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Gostaria de convidá-lo a assistir a palestra Desmistificando as Expressões Regulares na Sala 1 às 17:30 que terei a honra de ministrar.&lt;br /&gt;&lt;br /&gt;É um assunto muito empolgante e a partir de hoje darei destaque ao assunto no meu blog, criando inclusive uma página específica para o tema: &lt;a href="http://eugostododelphi.blogspot.com/p/expressao-regular.html"&gt;http://eugostododelphi.blogspot.com/p/expressao-regular.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;É isto. Nos vemos amanhã.&lt;br /&gt;&lt;br /&gt;Forte abraço.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2212646921952100050?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2212646921952100050/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2212646921952100050' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2212646921952100050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2212646921952100050'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/11/delphi-conference-2011.html' title='Delphi Conference 2011'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-632362729283118983</id><published>2011-09-15T14:59:00.000-03:00</published><updated>2011-09-15T14:59:44.593-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Calendário de cursos na TDS</title><content type='html'>Olá. A &lt;a href="http://www.tdstecnologiasp.com.br/"&gt;TDS&lt;/a&gt; está divulgando seu calendário de fim de ano.&lt;br /&gt;&lt;br /&gt;Para verificar as turmas disponíveis acesse: &lt;a href="http://tdstecnologiasp.com.br/calendarios/tdscal-13092011190451.htm"&gt;http://tdstecnologiasp.com.br/calendarios/tdscal-13092011190451.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Forte abraço.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-632362729283118983?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/632362729283118983/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=632362729283118983' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/632362729283118983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/632362729283118983'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/09/calendario-de-cursos-na-tds.html' title='Calendário de cursos na TDS'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4473788289063134436</id><published>2011-08-10T11:13:00.000-03:00</published><updated>2011-08-10T11:13:28.595-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Object Pascal Style Guide</title><content type='html'>Sempre tenho dúvida se estou escrevendo meus códigos de uma forma correta.&lt;br /&gt;&lt;br /&gt;O link abaixo vai me ajudar:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://edn.embarcadero.com/article/10280"&gt;http://edn.embarcadero.com/article/10280&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Recebi pelo grupo de discussão do Yahoo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4473788289063134436?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4473788289063134436/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4473788289063134436' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4473788289063134436'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4473788289063134436'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/08/object-pascal-style-guide.html' title='Object Pascal Style Guide'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8696993274475621728</id><published>2011-07-29T00:28:00.002-03:00</published><updated>2011-07-29T00:28:59.865-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DLL'/><title type='text'>DLL</title><content type='html'>Estava navegando pelo rio abaixo...&lt;br /&gt;&lt;br /&gt;Ok ok.&lt;br /&gt;&lt;br /&gt;Só para compartilhar um material sobre criação de DLL. Achei este material bem didático:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=87"&gt;http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=87&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=103"&gt;http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=103&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=115"&gt;http://www.kanenberg.com/index2.php?option=com_content&amp;do_pdf=1&amp;id=115&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8696993274475621728?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8696993274475621728/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8696993274475621728' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8696993274475621728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8696993274475621728'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/07/dll.html' title='DLL'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3654855392930554600</id><published>2011-07-27T09:52:00.000-03:00</published><updated>2011-07-27T09:52:58.132-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rtti'/><title type='text'>Diminuindo o tamanho do seu executável</title><content type='html'>Olá. Recebi um link muito interessante sobre o tema.&lt;br /&gt;&lt;br /&gt;Não sei se você percebeu mas com a nova RTTI disponível desde o Delphi 2010 os executáveis gerados ficam muito grande.&lt;br /&gt;&lt;br /&gt;Se você não tira proveito da RTTI não precisa deste peso.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/b/2011/07/26/create-smaller-delphi-xe-executables-remove-rtti-pack-exe.htm?nl=1"&gt;http://delphi.about.com/b/2011/07/26/create-smaller-delphi-xe-executables-remove-rtti-pack-exe.htm?nl=1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O segredo está na diretiva de compilação &lt;b&gt;WEAKLINKRTTI&lt;/b&gt; que no estado "on" desliga a RTTI. :)&lt;br /&gt;&lt;br /&gt;Se estivermos nesta situação e precisarmos da RTTI receberemos a seguinte erro:&lt;br /&gt;&lt;br /&gt;---------------------------&lt;br /&gt;Debugger Exception Notification&lt;br /&gt;---------------------------&lt;br /&gt;Project Small.exe raised exception class EInsufficientRtti with message 'Insufficient RTTI available to support this operation'.&lt;br /&gt;---------------------------&lt;br /&gt;Break   Continue   Help   &lt;br /&gt;---------------------------&lt;br /&gt;&lt;br /&gt;Mais sobre o assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docwiki.embarcadero.com/RADStudio/en/WEAKLINKRTTI_directive_(Delphi)"&gt;http://docwiki.embarcadero.com/RADStudio/en/WEAKLINKRTTI_directive_(Delphi)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docwiki.embarcadero.com/RADStudio/en/RTTI_directive_(Delphi)"&gt;http://docwiki.embarcadero.com/RADStudio/en/RTTI_directive_(Delphi)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Veja um código simples:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;program Small;&lt;br /&gt;&lt;br /&gt;{$APPTYPE CONSOLE}&lt;br /&gt;&lt;br /&gt;//Pulo do gato!&lt;br /&gt;{$WEAKLINKRTTI ON}&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  SysUtils, Rtti;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;  //Aqui temos um controle mais fino&lt;br /&gt;  {$RTTI EXPLICIT METHODS([vcPublic])}&lt;br /&gt;  TMinhaClasse = class(TObject)&lt;br /&gt;  public&lt;br /&gt;    procedure Teste;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;{ TMinhaClasse }&lt;br /&gt;&lt;br /&gt;procedure TMinhaClasse.Teste;&lt;br /&gt;begin&lt;br /&gt;  Writeln('Ola mundo!');&lt;br /&gt;  Readln;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;LContext : TRttiContext;&lt;br /&gt;LType    : TRttiType;&lt;br /&gt;oTeste   : TMinhaClasse;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    oTeste := TMinhaClasse.Create;&lt;br /&gt;    LContext := TRttiContext.Create;&lt;br /&gt;    LType := LContext.GetType(TMinhaClasse);&lt;br /&gt;    LType.GetMethod('Teste').Invoke(oTeste,[]);&lt;br /&gt;    oTeste.Free;&lt;br /&gt;  except&lt;br /&gt;    on E: Exception do&lt;br /&gt;    begin&lt;br /&gt;      Writeln(E.ClassName, ': ', E.Message);&lt;br /&gt;      Readln;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3654855392930554600?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3654855392930554600/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3654855392930554600' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3654855392930554600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3654855392930554600'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/07/diminuindo-o-tamanho-do-seu-executavel.html' title='Diminuindo o tamanho do seu executável'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3199713334685714216</id><published>2011-07-15T14:03:00.000-03:00</published><updated>2011-07-15T14:03:28.176-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Parâmetros de execução do BDS e Extensões de Arquivo do RAD XE</title><content type='html'>Você encontra aqui: &lt;a href="http://docwiki.embarcadero.com/RADStudio/en/Command_Line_Switches_and_File_Extensions_Index"&gt;http://docwiki.embarcadero.com/RADStudio/en/Command_Line_Switches_and_File_Extensions_Index&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3199713334685714216?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3199713334685714216/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3199713334685714216' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3199713334685714216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3199713334685714216'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/07/parametros-de-execucao-do-bds-e.html' title='Parâmetros de execução do BDS e Extensões de Arquivo do RAD XE'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2773142522329999582</id><published>2011-07-15T03:11:00.003-03:00</published><updated>2011-07-15T04:46:07.031-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Turbo Pascal 1.0</title><content type='html'>Toda história tem um começo.&lt;br /&gt;&lt;br /&gt;E um dia me perguntei: "Onde começou a história do Delphi?" Isso me levou ao Turbo Pascal 1.0 .&lt;br /&gt;Veja este site que interessante: &lt;a href="http://www.emsps.com/OLDTOOLS/borpasv.htm"&gt;http://www.emsps.com/OLDTOOLS/borpasv.htm&lt;/a&gt; É isto ai! O cara vende softwares antigos!&lt;br /&gt;&lt;br /&gt;Dai pensei: "Por que não rodar o Turbo Pascal 1 na minha máquina"?&lt;br /&gt;&lt;br /&gt;Vamos ver no que deu?&lt;br /&gt;&lt;br /&gt;O primeiro desafio, óbvio, foi a instalação do software. Meu notebook é 64 bits com Windows 7. &lt;br /&gt;Considerei então que seria o caso de instalar uma máquina virtual para instalar o DOS.&lt;br /&gt;Instalei o VirtualBox: &lt;a href="http://www.virtualbox.org/"&gt;http://www.virtualbox.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O próximo desafio foi instalar o DOS. Um bom tutorial eu encontrei em: &lt;a href="http://www.youtube.com/watch?v=8C_XQ86bXE0&amp;feature=related"&gt;http://www.youtube.com/watch?v=8C_XQ86bXE0&amp;feature=related&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E as imagens dos disquetes do DOS eu encontrei aqui: &lt;a href="http://www.mediafire.com/?8x1ewss0yvt"&gt;http://www.mediafire.com/?8x1ewss0yvt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por fim o instalador do Turbo Pascal. Olhe este artigo: &lt;a href="http://edn.embarcadero.com/article/20693"&gt;http://edn.embarcadero.com/article/20693&lt;/a&gt;&lt;br /&gt;Não poderia ter sido melhor.&lt;br /&gt;&lt;br /&gt;Para conseguir gerar uma imagem de disquete dos arquivo baixados e usar na máquina virtual, usei o WinImage 8.50, baixado de &lt;a href="http://www.winimage.com/"&gt;http://www.winimage.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Eis o resultado de pouco mais de três horas de esforços:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-VDhgMC5BjIE/Th_Vm1DiyyI/AAAAAAAAGz0/wuXKBv9wjkQ/s1600/turbo_pascal_1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="258" width="400" src="http://3.bp.blogspot.com/-VDhgMC5BjIE/Th_Vm1DiyyI/AAAAAAAAGz0/wuXKBv9wjkQ/s400/turbo_pascal_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bom, tentei usar o editor mas confesso que não consegui. Dai roubei. Fiz um arquivo a parte, abri e compilei. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-OD-ItzoPCRA/Th_nZ1el25I/AAAAAAAAGz8/MOEJSAdqzcw/s1600/program.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="128" width="400" src="http://2.bp.blogspot.com/-OD-ItzoPCRA/Th_nZ1el25I/AAAAAAAAGz8/MOEJSAdqzcw/s400/program.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-fASo-tvbAlU/Th_nd8wvyMI/AAAAAAAAG0E/g62FtRx0w1c/s1600/run.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="257" width="400" src="http://4.bp.blogspot.com/-fASo-tvbAlU/Th_nd8wvyMI/AAAAAAAAG0E/g62FtRx0w1c/s400/run.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Bacana né?&lt;br /&gt;&lt;br /&gt;Com um pouco mais de esforço, gerei um arquivo .COM (wowwwww):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-fEztSwJJapk/Th_qubic5XI/AAAAAAAAG0M/iVodCxu0dvc/s1600/com.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="144" width="314" src="http://3.bp.blogspot.com/-fEztSwJJapk/Th_qubic5XI/AAAAAAAAG0M/iVodCxu0dvc/s400/com.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ggyRuXrvdKg/Th_ra3nhjNI/AAAAAAAAG0U/TGf9KCADhn4/s1600/digite.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="138" width="330" src="http://2.bp.blogspot.com/-ggyRuXrvdKg/Th_ra3nhjNI/AAAAAAAAG0U/TGf9KCADhn4/s400/digite.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para terminar, os manuais em PDF: &lt;a href="http://electrickery.xs4all.nl/comp/tp30/doc/index.html"&gt;http://electrickery.xs4all.nl/comp/tp30/doc/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2773142522329999582?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2773142522329999582/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2773142522329999582' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2773142522329999582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2773142522329999582'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/07/turbo-pascal-10.html' title='Turbo Pascal 1.0'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-VDhgMC5BjIE/Th_Vm1DiyyI/AAAAAAAAGz0/wuXKBv9wjkQ/s72-c/turbo_pascal_1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4192605413323970862</id><published>2011-07-14T00:18:00.000-03:00</published><updated>2011-07-14T00:18:15.925-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Pascal Básico</title><content type='html'>Olá. Segue a apresentação que usei para resumir os elementos básicos do Object Pascal para a turma para qual estou ministrando curso de Delphi na TDS.&lt;br /&gt;&lt;br /&gt;Talvez lhe seja útil.&lt;br /&gt;&lt;br /&gt;Talvez não.&lt;br /&gt;&lt;br /&gt;&lt;div class="prezi-player"&gt;&lt;style type="text/css" media="screen"&gt;.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id="prezi_rnppactiolt7" name="prezi_rnppactiolt7" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"&gt;&lt;param name="movie" value="http://prezi.com/bin/preziloader.swf"/&gt;&lt;param name="allowfullscreen" value="true"/&gt;&lt;param name="allowscriptaccess" value="always"/&gt;&lt;param name="bgcolor" value="#ffffff"/&gt;&lt;param name="flashvars" value="prezi_id=rnppactiolt7&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"/&gt;&lt;embed id="preziEmbed_rnppactiolt7" name="preziEmbed_rnppactiolt7" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=rnppactiolt7&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="prezi-player-links"&gt;&lt;p&gt;&lt;a title="                                                        Demonstração dos elementos básicos para se trabalhar com o Object Pascal                                                    " href="http://prezi.com/rnppactiolt7/pascal-elementos-basicos/"&gt;Pascal - Elementos básicos&lt;/a&gt; on &lt;a href="http://prezi.com"&gt;Prezi&lt;/a&gt;&lt;/p&gt;&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/2178975238297259742-4192605413323970862?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4192605413323970862/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4192605413323970862' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4192605413323970862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4192605413323970862'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/07/pascal-basico.html' title='Pascal Básico'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2489065705530199461</id><published>2011-06-29T11:58:00.002-03:00</published><updated>2011-06-30T10:03:36.036-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pragmático'/><title type='text'>"Nós que quebramos pedras sempre devemos ter catedrais em mente"</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VRQ39SqmrM4/Tgs68vOJdGI/AAAAAAAAGzc/wxdaJ2qk2qk/s1600/8577807002Gr.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" width="280" src="http://1.bp.blogspot.com/-VRQ39SqmrM4/Tgs68vOJdGI/AAAAAAAAGzc/wxdaJ2qk2qk/s400/8577807002Gr.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Olá! &lt;br /&gt;&lt;br /&gt;Estou lendo um livro sensacional chamado "O Programador Pragmático", de Andrew Hunt e David Thomas. Recomendo fortemente a leitura.&lt;br /&gt;&lt;br /&gt;A fim de estimular a leitura vou publicar no blog as dicas que eles dão ao longo do livro - sendo meus os comentários, tentando trazer para a nosso contexto Delphi. Não vou, por exemplo, sugerir que você estude Smaltalk :)&lt;br /&gt;&lt;br /&gt;Visite: &lt;a href="www.pragmaticprogrammer.com"&gt;pragmaticprogrammer.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As primeiras 10 dicas são do primeiro capítulo: "Uma Filosofia Pragmática".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 1: "Preocupe-se com o seu trabalho"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Basicamente nos enxorta a fazer bem feito. Acredite: fazer mal feito dá o mesmo trabalho que fazer bem feito. Não, isso não é verdade.&lt;br /&gt;Fazer mal feito lhe dará muito mais trabalho depois. Ou a uma outra pessoa.&lt;br /&gt;Então? Por que não fazer bem feito de primeira?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 2: "Reflita sobre o seu trabalho"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Pense, reflita! Analise, critique! Não ligue o piloto automático. Será que você poderia estar fazendo esta tarefa de uma forma melhor?&lt;br /&gt;Sempre pode ser melhor. Sempre.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 3: "Forneça opções, não dê desculpas esfarrapadas"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ninguêm gosta de má notícias. Somos desenvolvedores. Devemos sempre fazer parte da solução, e não parte do problema.&lt;br /&gt;Se algo não pode ser feito da maneira proposta como deveria ser feito então?&lt;br /&gt;Como você agiria se o atendente da padaria simplesmente lhe dissese que não há pães quentinhos naquele momento e desse de ombros? &lt;br /&gt;Não seria legal ele oferecer um petisco enquanto você espera 10 minutos pela próxima fornada?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 4: "Não tolere janelas quebradas"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Isso é um fato. Uma praça permanecerá limpa até que um infeliz jogue a primeira bituca de cigarro. Dai a degradação ocorrerá em uma velocidade surpreendente.&lt;br /&gt;Portanto, para que o seu código não degrade, mantenha sempre as coisas em ordens. Identenção, comentários, refatoração... Isso ajudará com que o seu código não degrade.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 5: "Seja um catalisador da mudança"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Não seja o dono da verdade. Nem um chato evangelista... Dê exemplos práticos sobre as melhores práticas. &lt;br /&gt;Todos tentarão seguir o seu exemplo e certamente agregarão outras boas práticas. Mas alguém tem que começar. Que tal você?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 6: "Lembre-se do cenário em larga escala"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Perceba o que esta acontecendo ao seu redor. A mudança é uma constante! Será que você está preparado para as mudanças? E seu código?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 7: "Torne a qualidade parte dos requisitos"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Se você for abrir mão da qualidade melhor não abrir o Delphi hoje.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 8: "Invista regularmente em sua carteira de investimentos"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Qual o seu capital? Seu conhecimento! Seja você bem sucedido &lt;br /&gt;financeiramente ou nem tanto assim o seu capital é o conhecimento.&lt;br /&gt;Assim como nas finanças há investimentos de alto risco e investimentos seguros.&lt;br /&gt;Faça uma boa carteira de investimento: podemos aprender uma linguagem nova, como ruby e investir em uma certificação em SQL Server.&lt;br /&gt;Amplie este cenário e perceba o mundo de oportunidades que pode se descortinar à nossa frente.&lt;br /&gt;Reciclagem, na nossa área, é uma regra.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 9: "Analise criticamente o que você lê e ouve"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Não serei eu a lhe explicar para que existe o marketing. O fato é que quem decide se isso ou aquilo é bom ou ruim é você de acordo com o seu contexto &lt;br /&gt;e suas necessidades! Não a Info-Exame. &lt;br /&gt;Você deve até mesmo decidir se este paragráfo é uma grande besteira. Talvez uma parte seja.&lt;br /&gt;Enfim: você decide.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dica 10: "É o que você diz e a maneira como diz"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Você, como programador, tem um mundo só seu, onde você é o Rei. Mas a verdade é que somos mais um na multidão.&lt;br /&gt;E se comunicar com os outros é uma arte. Quem sou eu para ensinar como se comunicar? Eu precisaria aprender primeiro.&lt;br /&gt;Mas devemos concordar que isto é uma necessidade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2489065705530199461?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2489065705530199461/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2489065705530199461' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2489065705530199461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2489065705530199461'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/06/nos-que-quebramos-pedras-sempre-devemos.html' title='&quot;Nós que quebramos pedras sempre devemos ter catedrais em mente&quot;'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VRQ39SqmrM4/Tgs68vOJdGI/AAAAAAAAGzc/wxdaJ2qk2qk/s72-c/8577807002Gr.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1004882539901927784</id><published>2011-06-07T13:07:00.000-03:00</published><updated>2011-06-07T13:07:00.561-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><title type='text'>Pré-visualizador do seu código fonte.</title><content type='html'>Olá. Eu sou meio avesso a ficar instalando tranqueiras no computador :D mas um me chamou a atenção.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://theroadtodelphi.wordpress.com/2011/06/02/introducing-the-delphi-preview-handler/"&gt;http://theroadtodelphi.wordpress.com/2011/06/02/introducing-the-delphi-preview-handler/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O desenvolvedor é o &lt;a href="http://twitter.com/RRUZ/"&gt;@RRUZ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta ferramenta é interessante por dois motivos:&lt;br /&gt;&lt;br /&gt;1) Você consegue visualizar um código sem precisar abrir o arquivo, o que dá um ganho nas tarefas do dia a dia;&lt;br /&gt;&lt;br /&gt;2) É uma ótima inspiração para se ver a que nível você pode interagir com as APIs do Windows;&lt;br /&gt;&lt;br /&gt;Senti falta da função localizar...&lt;br /&gt;&lt;br /&gt;É isto ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1004882539901927784?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1004882539901927784/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1004882539901927784' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1004882539901927784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1004882539901927784'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/06/pre-visualizador-do-seu-codigo-fonte.html' title='Pré-visualizador do seu código fonte.'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8836113818907963680</id><published>2011-05-17T12:42:00.001-03:00</published><updated>2011-05-17T15:07:54.451-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Depuração de Thread</title><content type='html'>Se você trabalha com threads, sabe que um problema é a depuração de uma thread específica. Especialmente se há muitas instâncias de uma thread. &lt;br /&gt;&lt;br /&gt;Dependendo da situação, fica caótico.&lt;br /&gt;&lt;br /&gt;Uma maneira de se entender com o Delphi nesta situação é usar a janela "Thread Status" (Menu: View-&gt;Debug Windows-&gt;Threads, ou CTRL+ALT+T).&lt;br /&gt;&lt;br /&gt;Isso abre a janela abaixo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Ele1kzVnwBY/TdKS9MFnHFI/AAAAAAAAGx8/eykiI_nRgH8/s1600/threadstatus.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="93" width="400" src="http://4.bp.blogspot.com/-Ele1kzVnwBY/TdKS9MFnHFI/AAAAAAAAGx8/eykiI_nRgH8/s400/threadstatus.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mas qual a melhor maneira de utilizar?&lt;br /&gt;&lt;br /&gt;Coloque o BreakPoint no ponto desejado, quando uma das threads chegar no ponto, o Delphi parará tudo, indicando qual a thread corrente:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Ykzqn0NZLvc/TdKUhbM8NeI/AAAAAAAAGyM/WrGWfT3V4mY/s1600/delphi_1.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="320" src="http://2.bp.blogspot.com/-Ykzqn0NZLvc/TdKUhbM8NeI/AAAAAAAAGyM/WrGWfT3V4mY/s400/delphi_1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Pois bem, no decorrer do Debug, pode ser que você vá para uma linha nada haver :) por que por algum motivo mudou-se a thread corrente...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-FSikPrh1exI/TdKVS5lfClI/AAAAAAAAGyU/w2YZYJthUfs/s1600/delphi_2.png" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="221" width="400" src="http://3.bp.blogspot.com/-FSikPrh1exI/TdKVS5lfClI/AAAAAAAAGyU/w2YZYJthUfs/s400/delphi_2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Para voltar à thread em que você estava focado, vá na janela Thread Status, selecione a thread, e no pop-menu selecione a opção "Make Current"...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Mg53r9SMoFk/TdKV8ZDYjhI/AAAAAAAAGyc/pt1t0N9Z9cI/s1600/delphi_3.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="400" width="305" src="http://2.bp.blogspot.com/-Mg53r9SMoFk/TdKV8ZDYjhI/AAAAAAAAGyc/pt1t0N9Z9cI/s400/delphi_3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Por fim, você retorna à thread em que você estava focado.&lt;br /&gt;&lt;br /&gt;Para facilitar um pouco mais, você pode nomear a sua thread para efeitos de debug: &lt;a href="http://eugostododelphi.blogspot.com/2010/02/nomeacao-de-thread.html"&gt;http://eugostododelphi.blogspot.com/2010/02/nomeacao-de-thread.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Se você quiser mais alguma idéia sobre o assunto, leia também: &lt;a href="http://edn.embarcadero.com/article/41175"&gt;http://edn.embarcadero.com/article/41175&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8836113818907963680?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8836113818907963680/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8836113818907963680' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8836113818907963680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8836113818907963680'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/05/depuracao-de-thread.html' title='Depuração de Thread'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Ele1kzVnwBY/TdKS9MFnHFI/AAAAAAAAGx8/eykiI_nRgH8/s72-c/threadstatus.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7353180883560614911</id><published>2011-05-12T10:57:00.000-03:00</published><updated>2011-05-13T17:38:14.816-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diversos'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>O maior aeroporto em miniatura do mundo e o Delphi</title><content type='html'>Olá. Muitas vezes nos desafiam: "Me fala um sistema feito em Delphi, hein? hein? hein?"&lt;br /&gt;&lt;br /&gt;Pois é. &lt;br /&gt;&lt;br /&gt;O &lt;a href="http://twitter.com/#!/nerabil"&gt;@nerabil&lt;/a&gt; me mandou este link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msn.techguru.com.br/videoknuffingen-airport-o-maior-aeroporto-em-miniatura-do-mundo/"&gt;http://msn.techguru.com.br/videoknuffingen-airport-o-maior-aeroporto-em-miniatura-do-mundo/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No segundo vídeo mostra que o software foi feito em Delphi 6.&lt;br /&gt;&lt;br /&gt;Show!&lt;br /&gt;&lt;br /&gt;Se quiser outros cases:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.embarcadero.com/rad-in-action/application-showcase"&gt;http://www.embarcadero.com/rad-in-action/application-showcase&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7353180883560614911?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7353180883560614911/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7353180883560614911' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7353180883560614911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7353180883560614911'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/05/o-maior-aeroporto-em-miniatura-do-mundo.html' title='O maior aeroporto em miniatura do mundo e o Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3359231137754018397</id><published>2011-05-02T17:03:00.000-03:00</published><updated>2011-05-02T17:03:51.170-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><title type='text'>Testes unitários</title><content type='html'>Olá. Compartilho com você uma apresentação do &lt;a href="http://twitter.com/#!/wanc"&gt;@wanc&lt;/a&gt; sobre Testes Unitários.&lt;br /&gt;&lt;br /&gt;Muito bom!&lt;br /&gt;&lt;br /&gt;&lt;div class="prezi-player"&gt;&lt;style type="text/css" media="screen"&gt;.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id="prezi_6fim0kbx2jpz" name="prezi_6fim0kbx2jpz" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="550" height="400"&gt;&lt;param name="movie" value="http://prezi.com/bin/preziloader.swf"/&gt;&lt;param name="allowfullscreen" value="true"/&gt;&lt;param name="allowscriptaccess" value="always"/&gt;&lt;param name="bgcolor" value="#ffffff"/&gt;&lt;param name="flashvars" value="prezi_id=6fim0kbx2jpz&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"/&gt;&lt;embed id="preziEmbed_6fim0kbx2jpz" name="preziEmbed_6fim0kbx2jpz" src="http://prezi.com/bin/preziloader.swf" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="550" height="400" bgcolor="#ffffff" flashvars="prezi_id=6fim0kbx2jpz&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="prezi-player-links"&gt;&lt;p&gt;&lt;a title="Introdução teórica - Testes unitários" href="http://prezi.com/6fim0kbx2jpz/introducao-teorica-testes-unitarios/"&gt;Introdução teórica - Testes unitários&lt;/a&gt; on &lt;a href="http://prezi.com"&gt;Prezi&lt;/a&gt;&lt;/p&gt;&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/2178975238297259742-3359231137754018397?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3359231137754018397/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3359231137754018397' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3359231137754018397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3359231137754018397'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/05/testes-unitarios.html' title='Testes unitários'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4814541222217716919</id><published>2011-04-26T10:58:00.000-03:00</published><updated>2011-04-26T10:58:18.194-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Ovo de Páscoa</title><content type='html'>Olá. Sei que a Páscoa já passou e espero que tenha sido um ótimo momento de reflexão para você - independentemente da sua crença.&lt;br /&gt;&lt;br /&gt;Hoje o &lt;a href="http://twitter.com/#!/wanc"&gt;@wanc&lt;/a&gt; me mostrou uma curiosidade que eu achava que não existia mais no Delphi.&lt;br /&gt;&lt;br /&gt;Vá na caixa sobre e digite ALT+T+E+A+M .&lt;br /&gt;&lt;br /&gt;Dê dois cliques no resultado.&lt;br /&gt;&lt;br /&gt;É isso ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4814541222217716919?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4814541222217716919/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4814541222217716919' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4814541222217716919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4814541222217716919'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/04/ovo-de-pascoa.html' title='Ovo de Páscoa'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6663827499658991160</id><published>2011-04-07T16:12:00.001-03:00</published><updated>2011-04-07T16:13:19.975-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Tirando um maior proveito do Exit</title><content type='html'>Olá. Estou fazendo uma higienização por aqui, tirando os &lt;i&gt;warnings&lt;/i&gt; dos projetos. E teve um que me deixou muito encucado:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;[DCC Warning] Unit2.pas(39): W1035 Return value of function 'TForm2.EntradaValida' might be undefined&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Vamos ao código:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;function TForm2.EntradaValida(piEntrada: Integer): Boolean;&lt;br /&gt;begin&lt;br /&gt;  if (piEntrada &gt; 0) then&lt;br /&gt;  begin&lt;br /&gt;    {...}&lt;br /&gt;    Exit;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  {...}&lt;br /&gt;  Result := True;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Neste exemplo o compilador reclama que o resultado da função &lt;b&gt;EntradaValida&lt;/b&gt; não foi definido.&lt;br /&gt;&lt;br /&gt;O compilador foi ninja o suficiente para perceber que se entrar no &lt;b&gt;if..then&lt;/b&gt; o método será interrompido pelo comando &lt;i&gt;Exit&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Desde o D2009 podemos chamar o &lt;i&gt;Exit&lt;/i&gt; de dentro de uma função passando como parâmetro o resultado desta função. Isso elimina o warning &lt;a href="http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/cm_no_retval_xml.html"&gt;W1035&lt;/a&gt;. Veja no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;function TForm2.EntradaValida(piEntrada: Integer): Boolean;&lt;br /&gt;begin&lt;br /&gt;  if (piEntrada &gt; 0) then&lt;br /&gt;  begin&lt;br /&gt;    {...}&lt;br /&gt;    Exit(False); {&lt;-- PULO DO GATO}&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  {...}&lt;br /&gt;  Result := True;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;É isso ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6663827499658991160?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6663827499658991160/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6663827499658991160' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6663827499658991160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6663827499658991160'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/04/tirando-um-maior-proveito-do-exit.html' title='Tirando um maior proveito do Exit'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-599088279219068784</id><published>2011-04-04T17:07:00.000-03:00</published><updated>2011-04-04T17:07:29.328-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kbm'/><title type='text'>Persistindo as informações de um kbmMemTable</title><content type='html'>Se você conhece e usa o kbmMemTable sabe que ele é um excelente DataSet, em especial quando você trabalha com DataSet em memória.&lt;br /&gt;&lt;br /&gt;Caso você não conheça visite: &lt;a href="http://www.components4developers.com/"&gt;http://www.components4developers.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Neste post quero chamar a atenção para uma funcionalidade bastante interessante que é a possibilidade de você persistir, automaticamente, as informações em arquivo.&lt;br /&gt;&lt;br /&gt;Para isto, precisamos preencher apenas algumas propriedade, a seguir:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Persistent&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Coloca-se true.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PersistentFile&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Caminho do arquivo onde será efetuado o back-up.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;PersistenteFormat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Referência à classe que definirá o formato do arquivo.&lt;br /&gt;&lt;br /&gt;Portanto, quando você fechar o DataSet, os dados serão salvos automaticamente e quando você abrir, os dados serão carregados.&lt;br /&gt;&lt;br /&gt;E caso você queira salvar de tempos em tempos, chame o método &lt;i&gt;SavePersistent&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;É isso ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-599088279219068784?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/599088279219068784/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=599088279219068784' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/599088279219068784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/599088279219068784'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/04/persistindo-as-informacoes-de-um.html' title='Persistindo as informações de um kbmMemTable'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-850577137589045887</id><published>2011-03-04T13:42:00.000-03:00</published><updated>2011-03-04T13:42:22.834-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Use o Format, por favor!</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;A tempos queria postar sobre uma função muito interessante, que é o &lt;b&gt;Format&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Uma das coisas que eu detesto em um código Delphi é a concatenação de string.&lt;br /&gt;&lt;br /&gt;Olha este exemplo horrível (sim, estou lhe induzindo a achar horrível):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm2.Button1Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;sMessage : string;&lt;br /&gt;begin&lt;br /&gt;  sMessage := 'Aluno: ' + Self.FNome + ' Endereço: ' + Self.FEndereco + ' Nota: ' + Self.FNota;&lt;br /&gt;  ShowMessage(sMessage)&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Compare com o código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm2.Button2Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;sMessage : string;&lt;br /&gt;begin&lt;br /&gt;  sMessage := Format('Aluno: %s Endereço: %s Nota: %d',[Self.FNome,Self.FEndereco,Self.FNota]);&lt;br /&gt;  ShowMessage(sMessage);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Perceba que no segundo exemplo o código ficou mais legível. Qualquer um vai entender o resultado da concatenação sem muito esforço mental. Já no primeiro exemplo...&lt;br /&gt;&lt;br /&gt;Então a idéia básica é passar uma string com marcações especiais (identificadas com o símbolo %) e em seguida os argumentos.&lt;br /&gt;&lt;br /&gt;As marcações que eu considero mais úteis no dia a dia são:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;%s&lt;/b&gt; - String&lt;br /&gt;&lt;b&gt;%d&lt;/b&gt; - Número decimal &lt;br /&gt;&lt;b&gt;%f&lt;/b&gt; - Float&lt;br /&gt;&lt;br /&gt;Mas existem outras! Veja no Help no Delphi.&lt;br /&gt;&lt;br /&gt;Uma característica que valorizo no Format é a possibilidade de alinharmos os valores, ajudando a formatar um bom arquivo de log por exemplo.&lt;br /&gt;&lt;br /&gt;Para isso basta informar o número de caracteres que você deseja. &lt;b&gt;%s&lt;/b&gt; pode vira um &lt;b&gt;%15s&lt;/b&gt; por exemplo, onde o 15 é o tamanho. Ainda neste aspecto, vale salientar que a palavra será jogada para a direita e na maioria das vezes é mais adequado à esquerda. Para isso usamos um traço, ficando: &lt;b&gt;%-15s&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Bom, é isso. Tem outros aspectos mas acho que iria tornar o assunto mais chato do que o necessário. Eu sempre incentivo o uso do Format. Na minha opinião é mais profissional. Quando você se acostumar irá ter a mesma opinião que tenho sobre o primeiro exemplo lá em cima deste post: horrível. :)&lt;br /&gt;&lt;br /&gt;Exemplo completo (aplicação console):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;program Console;&lt;br /&gt;&lt;br /&gt;{$APPTYPE CONSOLE}&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  SysUtils, Windows;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;procedure ExemploSimples;&lt;br /&gt;var&lt;br /&gt;sResult : string;&lt;br /&gt;begin&lt;br /&gt;  sResult := Format('Nome: %s Endereco: %s Idade: %d',['Fulano','Terra do Nunca',10]);&lt;br /&gt;&lt;br /&gt;  Writeln('Codigo.....: Format(''Nome: %s Endereco: %s Idade: %d'',[''Fulano'',''Terra do Nunca'',10])');&lt;br /&gt;  Writeln('Resultado..:' + sResult);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure ExemploListagemSemIdentacao;&lt;br /&gt;var&lt;br /&gt;i      : Integer;&lt;br /&gt;sNome  : string;&lt;br /&gt;iIdade : Integer;&lt;br /&gt;begin&lt;br /&gt;  Writeln('Codigo.....: Format(''Nome....: %s  Indade...: %d'',[sNome,iIdade])');&lt;br /&gt;  Writeln('Resultado..:');&lt;br /&gt;  for i := 1 to 5 do&lt;br /&gt;  begin&lt;br /&gt;    case i of&lt;br /&gt;      1 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Maria';&lt;br /&gt;        iIdade := 34;&lt;br /&gt;      end;&lt;br /&gt;      2 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Kleberson';&lt;br /&gt;        iIdade := 18;&lt;br /&gt;      end;&lt;br /&gt;      3 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Dona Florinda';&lt;br /&gt;        iIdade := 60;&lt;br /&gt;      end;&lt;br /&gt;      4 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Bazzinga';&lt;br /&gt;        iIdade := 28;&lt;br /&gt;      end;&lt;br /&gt;      5 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Fatima';&lt;br /&gt;        iIdade := 40;&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    WriteLn(Format('Nome: %s  Idade: %d',[sNome,iIdade]));&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure ExemploListagemComIdentacao;&lt;br /&gt;var&lt;br /&gt;i      : Integer;&lt;br /&gt;sNome  : string;&lt;br /&gt;iIdade : Integer;&lt;br /&gt;begin&lt;br /&gt;  Writeln('Codigo.....: Format(''Nome....: %15s  Indade...: %d'',[sNome,iIdade])');&lt;br /&gt;  Writeln('Resultado..:');&lt;br /&gt;  for i := 1 to 5 do&lt;br /&gt;  begin&lt;br /&gt;    case i of&lt;br /&gt;      1 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Maria';&lt;br /&gt;        iIdade := 34;&lt;br /&gt;      end;&lt;br /&gt;      2 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Kleberson';&lt;br /&gt;        iIdade := 18;&lt;br /&gt;      end;&lt;br /&gt;      3 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Dona Florinda';&lt;br /&gt;        iIdade := 60;&lt;br /&gt;      end;&lt;br /&gt;      4 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Bazzinga';&lt;br /&gt;        iIdade := 28;&lt;br /&gt;      end;&lt;br /&gt;      5 :&lt;br /&gt;      begin&lt;br /&gt;        sNome  := 'Fatima';&lt;br /&gt;        iIdade := 40;&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    WriteLn(Format('Nome: %-15s  Idade: %d',[sNome,iIdade]));&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;bContinue : Boolean;&lt;br /&gt;sEntrada  : string;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    bContinue := True;&lt;br /&gt;&lt;br /&gt;    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN OR  BACKGROUND_BLUE);&lt;br /&gt;    repeat&lt;br /&gt;      Writeln('                                                                 ');&lt;br /&gt;      Writeln('/===============================================================\');&lt;br /&gt;      Writeln('| Escolha a opcao:                                              |');&lt;br /&gt;      Writeln('|                                                               |');&lt;br /&gt;      Writeln('| 1) Exemplo simples;                                           |');&lt;br /&gt;      Writeln('| 2) Exemplo de listagem SEM identacao                          |');&lt;br /&gt;      Writeln('| 3) Exemplo de listagem COM identacao                          |');&lt;br /&gt;      Writeln('\===============================================================/');&lt;br /&gt;      Writeln('                                                                 ');&lt;br /&gt;      Write('Digite: ');&lt;br /&gt;      Readln(sEntrada);&lt;br /&gt;      Writeln('                                                                 ');&lt;br /&gt;&lt;br /&gt;      if (sEntrada = '1') then&lt;br /&gt;      begin&lt;br /&gt;        ExemploSimples;&lt;br /&gt;        Continue;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      if (sEntrada = '2') then&lt;br /&gt;      begin&lt;br /&gt;        ExemploListagemSemIdentacao;&lt;br /&gt;        Continue;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      if (sEntrada = '3') then&lt;br /&gt;      begin&lt;br /&gt;        ExemploListagemComIdentacao;&lt;br /&gt;        Continue;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      bContinue := False;&lt;br /&gt;    until not (bContinue);&lt;br /&gt;    Write('Fim da execucao!');&lt;br /&gt;  except&lt;br /&gt;    on E: Exception do&lt;br /&gt;      Writeln(E.ClassName, ': ', E.Message);&lt;br /&gt;  end;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Forte abraço!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-850577137589045887?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/850577137589045887/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=850577137589045887' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/850577137589045887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/850577137589045887'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/03/use-o-format-por-favor.html' title='Use o Format, por favor!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3788822111812151308</id><published>2011-01-20T16:01:00.002-02:00</published><updated>2011-01-20T16:02:55.657-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>Classes aninhadas: um uso prático</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Há um recurso muito interessante no Object Pascal que é a &lt;b&gt;classe aninhada&lt;/b&gt; - &lt;i&gt;nested classes&lt;/i&gt; em inglês. É um recurso existente em Java e .NET a tempos.&lt;br /&gt;&lt;br /&gt;A grosso modo permite você implementar uma classe dentro de outra. O ganho disso é você conseguir elaborar uma classe "auto-suficiente", protegendo - se for este o caso - as soluções que você desenvolveu.&lt;br /&gt;&lt;br /&gt;Bom, indo ao ponto. Desenvolvi a unit abaixo exemplificando a implementação de uma classe aninhada. Para efeitos &lt;u&gt;didáticos&lt;/u&gt; o objetivo do programa é o seguinte:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Implementar um liberador de objetos.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Para isso, desenvolvi a classe TLiberador que é descendente de TObject. Ela implementa, então, a classe TLiberadorThread que por sua vez descende de TThread.&lt;br /&gt;&lt;br /&gt;Logo, TLiberadorThread só é visível pela classe TLiberador e é isso que é o pulo do gato.&lt;br /&gt;&lt;br /&gt;Compartilho da opinião que a legibilidade do código fica inicialmente comprometida mas creio ser uma questão de adaptação.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Unit2;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;  Dialogs, StdCtrls, SyncObjs, Contnrs, ComCtrls, Unt_MemoryMonitor,&lt;br /&gt;  Unt_RotinasLog;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;    Classe responsável por liberar objetos&lt;br /&gt;  }&lt;br /&gt;  TLiberador = class(TObject)&lt;br /&gt;  strict private type {&lt;== Declaração de tipo dentro da classe!}&lt;br /&gt;    TLiberadorThread = class(TThread)&lt;br /&gt;    strict private&lt;br /&gt;      FQueue: TObjectQueue;&lt;br /&gt;      FCritical: TCriticalSection;&lt;br /&gt;      procedure WhenTerminate(Sender: TObject);&lt;br /&gt;    protected&lt;br /&gt;      procedure Execute; override;&lt;br /&gt;    public&lt;br /&gt;      procedure AfterConstruction; override;&lt;br /&gt;      procedure BeforeDestruction; override;&lt;br /&gt;      procedure AddObject(poObject: TObject);&lt;br /&gt;    end;&lt;br /&gt;  strict private&lt;br /&gt;    FDetail: TLiberadorThread; {&lt;== Instância da classe aninhadaS}&lt;br /&gt;  public&lt;br /&gt;    procedure AfterConstruction; override;&lt;br /&gt;    procedure BeforeDestruction; override;&lt;br /&gt;    procedure AddObject(poObject: TObject);&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;  {&lt;br /&gt;    Formulário com um botão que adiciona um objeto na pilha&lt;br /&gt;  }&lt;br /&gt;  TForm2 = class(TForm)&lt;br /&gt;    Button1: TButton;&lt;br /&gt;    g4MemoryMonitor1: Tg4MemoryMonitor;&lt;br /&gt;    StatusBar1: TStatusBar;&lt;br /&gt;    procedure FormCreate(Sender: TObject);&lt;br /&gt;    procedure FormDestroy(Sender: TObject);&lt;br /&gt;    procedure Button1Click(Sender: TObject);&lt;br /&gt;  private&lt;br /&gt;    { Private declarations }&lt;br /&gt;  public&lt;br /&gt;    FTeste: TLiberador;&lt;br /&gt;    { Public declarations }&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;  Form2: TForm2;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;{ TLiberador.TLiberadorThread }&lt;br /&gt;&lt;br /&gt;procedure TLiberador.TLiberadorThread.AddObject(poObject: TObject);&lt;br /&gt;begin&lt;br /&gt;  Self.FCritical.Enter;&lt;br /&gt;  try&lt;br /&gt;    Self.FQueue.Push(poObject);&lt;br /&gt;  finally&lt;br /&gt;    Self.FCritical.Release;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.TLiberadorThread.AfterConstruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.OnTerminate := Self.WhenTerminate;&lt;br /&gt;  Self.FQueue := TObjectQueue.Create;&lt;br /&gt;  Self.FCritical := TCriticalSection.Create;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.TLiberadorThread.BeforeDestruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.FQueue.Free;&lt;br /&gt;  Self.FCritical.Free;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.TLiberadorThread.Execute;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  NameThreadForDebugging(AnsiString(Self.ToString));&lt;br /&gt;  IdentificarPID(Self.ToString);&lt;br /&gt;  while not (Self.Terminated) do&lt;br /&gt;  begin&lt;br /&gt;    Sleep(10);&lt;br /&gt;    if (Self.FQueue.Count &gt; 0) then&lt;br /&gt;    begin&lt;br /&gt;      Self.FQueue.Pop.Free;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.TLiberadorThread.WhenTerminate(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  Sleep(10);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ TLiberador }&lt;br /&gt;&lt;br /&gt;procedure TLiberador.AddObject(poObject: TObject);&lt;br /&gt;begin&lt;br /&gt;  Self.FDetail.AddObject(poObject);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.AfterConstruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.FDetail := TLiberadorThread.Create(True);&lt;br /&gt;  Self.FDetail.Start;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TLiberador.BeforeDestruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.FDetail.Terminate;&lt;br /&gt;  if not (Self.FDetail.Suspended) then&lt;br /&gt;    Self.FDetail.WaitFor;&lt;br /&gt;  Self.FDetail.Free;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{ TForm2 }&lt;br /&gt;&lt;br /&gt;procedure TForm2.Button1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  Self.FTeste.AddObject(TObject.Create);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm2.FormCreate(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  Self.g4MemoryMonitor1.Active := True;&lt;br /&gt;  Self.FTeste := TLiberador.Create;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm2.FormDestroy(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  Self.FTeste.Free;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Existem outras novidades que talvez os programadores Delphi da "old school" não conheçam (a começar por mim). Dê uma olhada neste link: &lt;a href="http://edn.embarcadero.com/article/34324"&gt;http://edn.embarcadero.com/article/34324&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3788822111812151308?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3788822111812151308/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3788822111812151308' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3788822111812151308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3788822111812151308'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2011/01/classes-aninhadas-um-uso-pratico.html' title='Classes aninhadas: um uso prático'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7709449974547531381</id><published>2010-12-16T12:46:00.001-02:00</published><updated>2011-01-19T12:23:56.092-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Sinalizando uma Thread com TEvent</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Quando se programa uma thread existe uma questão importante a resolver que é como sinalizar a esta thread que há um processamento a ser feito.&lt;br /&gt;&lt;br /&gt;Um bom exemplo disto é aquela thread que encapsula uma pilha de objetos que é alimentada por outra thread, logo ela só "precisa trabalhar" se houver objetos na pilha.&lt;br /&gt;&lt;br /&gt;De cara, o código fica como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TExemploEvent.Execute;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  while not (Self.Terminated) do&lt;br /&gt;  begin&lt;br /&gt;   {$REGION 'Processamento da pilha'}&lt;br /&gt;   //Não é sempre que haverá elementos na pilha&lt;br /&gt;   if (Self.FQueue.Count &gt; 0) then&lt;br /&gt;   begin&lt;br /&gt;     //Processamento da pilha&lt;br /&gt;   end;&lt;br /&gt;   {$ENDREGION}&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;O efeito colateral disto é um consumo intenso de CPU, o que obviamente é péssimo. A solução então é colocar um Sleep(10) - evite o Application.ProcessMessages dentro de uma thread. Com isso o código fica assim:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TExemploEvent.Execute;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  while not (Self.Terminated) do&lt;br /&gt;  begin&lt;br /&gt;    //Sleep para aliviar a thread&lt;br /&gt;    Sleep(10);&lt;br /&gt;&lt;br /&gt;   {$REGION 'Processamento da pilha'}&lt;br /&gt;   //Não é sempre que haverá elementos na pilha&lt;br /&gt;   if (Self.FQueue.Count &gt; 0) then&lt;br /&gt;   begin&lt;br /&gt;     //Processamento da pilha&lt;br /&gt;   end;&lt;br /&gt;   {$ENDREGION}&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Isso resolve o problema mas cria um desconforto: A thread fica em um loop insano e o Sleep(10) resolve parte do problema. Podemos nos contentar com isso ou fazer algo melhor.&lt;br /&gt;&lt;br /&gt;Para isto podemos usar o TEvent, que será usado para sinalizar a Thread que há elementos na fila. Veja como fica o Execute neste novo contexto:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TExemploEvent.Execute;&lt;br /&gt;var&lt;br /&gt;eEvent : TWaitResult;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  while not (Self.Terminated) do&lt;br /&gt;  begin&lt;br /&gt;    //Esperando sinalização do evento&lt;br /&gt;    eEvent := Self.FEvent.WaitFor(INFINITE);&lt;br /&gt;&lt;br /&gt;    case eEvent of&lt;br /&gt;      wrSignaled:&lt;br /&gt;      begin&lt;br /&gt;       {$REGION 'Processamento da pilha'}&lt;br /&gt;       //Não é sempre que haverá elementos na pilha&lt;br /&gt;       if (Self.FQueue.Count &gt; 0) then&lt;br /&gt;       begin&lt;br /&gt;         //Processamento da pilha&lt;br /&gt;       end;&lt;br /&gt;       {$ENDREGION}&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;    //...&lt;br /&gt;&lt;br /&gt;    end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Por fim, veja o exemplo completo.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Thread;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Classes, Contnrs, SyncObjs;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;  TExemploEvent = class(TThread)&lt;br /&gt;  private&lt;br /&gt;    FQueue: TObjectQueue;&lt;br /&gt;    FEvent: TEvent;&lt;br /&gt;    FCritical: TCriticalSection;&lt;br /&gt;  public&lt;br /&gt;    procedure AfterConstruction; override;&lt;br /&gt;    procedure BeforeDesttruction; override;&lt;br /&gt;    procedure Execute; override;&lt;br /&gt;    procedure AdicionarItem(poItem: TObject);&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  SysUtils;&lt;br /&gt;&lt;br /&gt;{ TExemploEvent }&lt;br /&gt;&lt;br /&gt;//É através deste método que outras threads colocarão objetos na pilha&lt;br /&gt;procedure TExemploEvent.AdicionarItem(poItem: TObject);&lt;br /&gt;begin&lt;br /&gt;  //Entra na seção crítica&lt;br /&gt;  Self.FCritical.Enter;&lt;br /&gt;  try&lt;br /&gt;    //Coloca o item na pilha&lt;br /&gt;    Self.FQueue.Push(poItem);&lt;br /&gt;&lt;br /&gt;    //Sinaliza o TEvent&lt;br /&gt;    Self.FEvent.SetEvent;&lt;br /&gt;  finally&lt;br /&gt;    //Sai da seção crítica&lt;br /&gt;    Self.FCritical.Release;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TExemploEvent.AfterConstruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  //Seção crítica para acessar a fila de objetos&lt;br /&gt;  Self.FCritical := TCriticalSection.Create;&lt;br /&gt;&lt;br /&gt;  //Fila de objetos que serão processados&lt;br /&gt;  Self.FQueue    := TObjectQueue.Create;&lt;br /&gt;&lt;br /&gt;  //Sinalizador&lt;br /&gt;  Self.FEvent    := TEvent.Create(nil,False,True,'_exemploevent');&lt;br /&gt;  //                              --- ----- ----  -------------&lt;br /&gt;  //                               |    |     |         |&lt;br /&gt;  //                               |    |     |         \............&gt; Nome único para a instância, do contrário, será usado o já existente&lt;br /&gt;  //                               |    |     \......................&gt; Podemos já criar SINALIZADO&lt;br /&gt;  //                               |    \............................&gt; Indica se será resetado MANUALMENTE ou AUTOMATICAMENTE&lt;br /&gt;  //                               \.................................&gt; Atributos, nil basta na maioria das necessidades&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TExemploEvent.BeforeDesttruction;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.FCritical.Free;&lt;br /&gt;  Self.FQueue.Free;&lt;br /&gt;  Self.FEvent.Free;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TExemploEvent.Execute;&lt;br /&gt;var&lt;br /&gt;eEvent : TWaitResult;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  while not (Self.Terminated) do&lt;br /&gt;  begin&lt;br /&gt;    //Esperando sinalização do evento&lt;br /&gt;    eEvent := Self.FEvent.WaitFor(INFINITE);&lt;br /&gt;&lt;br /&gt;    case eEvent of&lt;br /&gt;      //Processa a pilha somente se o evento foi sinalizado&lt;br /&gt;      wrSignaled:&lt;br /&gt;      begin&lt;br /&gt;       {$REGION 'Processamento da pilha'}&lt;br /&gt;       //Não é sempre que haverá elementos na pilha&lt;br /&gt;       if (Self.FQueue.Count &gt; 0) then&lt;br /&gt;       begin&lt;br /&gt;         //Entra na seção crítica&lt;br /&gt;         Self.FCritical.Enter;&lt;br /&gt;         try&lt;br /&gt;           while (Self.FQueue.Count &gt; 0) do&lt;br /&gt;           begin&lt;br /&gt;             Sleep(10);&lt;br /&gt;             //Para efeitos de exemplificação, esta apenas livrando o objeto&lt;br /&gt;             Self.FQueue.Pop.Free;&lt;br /&gt;           end;&lt;br /&gt;         finally&lt;br /&gt;           //Sai da seção crítica&lt;br /&gt;           Self.FCritical.Release;&lt;br /&gt;         end;&lt;br /&gt;       end;&lt;br /&gt;       {$ENDREGION}&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      wrTimeout:&lt;br /&gt;      begin&lt;br /&gt;        //Excedeu o tempo de espera&lt;br /&gt;        Continue;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      wrAbandoned:&lt;br /&gt;      begin&lt;br /&gt;        Abort;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      wrError:&lt;br /&gt;      begin&lt;br /&gt;        Abort;&lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      wrIOCompletion:&lt;br /&gt;      begin&lt;br /&gt;        Abort;&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;E é isso ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7709449974547531381?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7709449974547531381/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7709449974547531381' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7709449974547531381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7709449974547531381'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/12/sinalizando-uma-thread-com-tevent.html' title='Sinalizando uma Thread com TEvent'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5277717874666623980</id><published>2010-11-30T10:43:00.001-02:00</published><updated>2011-01-19T12:29:46.017-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>SQL, Formatação de Data e o Sistema Operacional</title><content type='html'>Quero hoje compartilhar uma solução bastante interessante, viabilizada pelo nosso colega &lt;a href="http://twitter.com/r_farias"&gt;Rafael Farias&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Problema:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A executar uma consulta SQL que envolva data, se o sistema operacional estiver em inglês acontece uma mágica e o mês vira dia e o dia vira mês. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solução:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Como utilizamos os componentes da &lt;a href="http://www.devart.com/"&gt;DevArt&lt;/a&gt; (que aliás aproveito para indicar) o Farias teve a feliz idéia de fazer uma classe descendente do TMSConnection sendo que logo após a conexão efetiva com o banco de dados ele definiu o formato da data da sessão no servidor de banco de dados baseado na configuração de data do sistema operacional do cliente.&lt;br /&gt;&lt;br /&gt;O "pulo do gato" foi converter a string '03/02/01' para TDateTime e verificar qual número "virou" dia e dai por diante.&lt;br /&gt;&lt;br /&gt;Bom, sem mais delongas, mostro abaixo a unit desenvolvida:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Unt_G4Connection;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Classes, Windows, SysUtils, db, MSAccess;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;  Tg4Connection = class(TMSConnection)&lt;br /&gt;  protected&lt;br /&gt;    procedure SetDateFormat;&lt;br /&gt;    procedure DoConnect; override;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{ Tg4Connection }&lt;br /&gt;&lt;br /&gt;procedure Tg4Connection.DoConnect;&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  Self.SetDateFormat;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure Tg4Connection.SetDateFormat;&lt;br /&gt;var&lt;br /&gt;dDecode    : TDateTime;  //Buffer para a data convertida&lt;br /&gt;sFormat    : string;     //Buffer para a instrução SQL SET DATEFORMAT&lt;br /&gt;wDay       : Word;       //Buffer para o DIA&lt;br /&gt;wMonth     : Word;       //Buffer para o MÊS&lt;br /&gt;wYear      : Word;       //Buffer para o ANO&lt;br /&gt;qSetFormat : TMSQuery;   //Executor da instrução SQL&lt;br /&gt;begin&lt;br /&gt;  sFormat := 'SET DATEFORMAT ';&lt;br /&gt;  wDay := 0;&lt;br /&gt;  wMonth := 0;&lt;br /&gt;  wYear := 0;&lt;br /&gt;  qSetFormat := nil;&lt;br /&gt;&lt;br /&gt;  try&lt;br /&gt;    qSetFormat := TMSQuery.Create(nil);&lt;br /&gt;    qSetFormat.Connection := Self;&lt;br /&gt;&lt;br /&gt;    dDecode := StrToDateTime('03/02/01');&lt;br /&gt;    DecodeDate(dDecode, wYear, wMonth, wDay);&lt;br /&gt;&lt;br /&gt;    case wDay of&lt;br /&gt;    3: if wMonth = 2 then&lt;br /&gt;         sFormat := sFormat +'DMY'&lt;br /&gt;       else&lt;br /&gt;         sFormat := sFormat +'DYM';&lt;br /&gt;    2: if wMonth = 3 then&lt;br /&gt;         sFormat := sFormat +'MDY'&lt;br /&gt;       else&lt;br /&gt;         sFormat := sFormat +'YDM';&lt;br /&gt;    1: if wMonth = 3 then&lt;br /&gt;         sFormat := sFormat +'MYD'&lt;br /&gt;       else&lt;br /&gt;         sFormat := sFormat +'YMD'&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    qSetFormat.SQL.Clear;&lt;br /&gt;    qSetFormat.SQL.Add(sFormat);&lt;br /&gt;    qSetFormat.Execute;&lt;br /&gt;&lt;br /&gt;  finally&lt;br /&gt;    if Assigned(qSetFormat) then&lt;br /&gt;      qSetFormat.Free;&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5277717874666623980?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5277717874666623980/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5277717874666623980' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5277717874666623980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5277717874666623980'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/11/sql-formatacao-de-data-e-o-sistema.html' title='SQL, Formatação de Data e o Sistema Operacional'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1212784429497290889</id><published>2010-11-16T10:50:00.000-02:00</published><updated>2010-11-16T10:50:50.933-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Listagem de códigos de erros do OLE DB</title><content type='html'>Acredito que lhe seja útil um dia. &lt;br /&gt;&lt;br /&gt;A listagem chegou a mim pelo meu colega &lt;a href="http://twitter.com/@r_farias"&gt;@R_Farias&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Frequently Encountered HRESULTS from OLE&lt;br /&gt;This list was compiled from the Winerror.h file, which ships with the Win32 SDK. This list is actually a subset of a much more complete set of OLE errors. However, this is the set most likely to be raised by OLE or OLE-DB to ADO.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   Unsigned     Signed&lt;br /&gt;     HRESULT   Hex HRESULT                    Description&lt;br /&gt;   ----------  -----------  ----------------------------------------------&lt;br /&gt;   0x80000001  -2147483647  Not implemented&lt;br /&gt;   0x80000002  -2147483646  Ran out of memory&lt;br /&gt;   0x80000003  -2147483645  One or more arguments are invalid&lt;br /&gt;   0x80000004  -2147483644  No such interface supported&lt;br /&gt;   0x80000005  -2147483643  Invalid pointer&lt;br /&gt;   0x80000006  -2147483642  Invalid handle&lt;br /&gt;   0x80000007  -2147483641  Operation aborted&lt;br /&gt;   0x80000008  -2147483640  Unspecified error&lt;br /&gt;   0x80000009  -2147483639  General access denied error&lt;br /&gt;   0x8000000A  -2147483638  The data necessary to complete this operation&lt;br /&gt;                            is not yet available.&lt;br /&gt;   0x80004001  -2147467263  Not implemented&lt;br /&gt;   0x80004002  -2147467262  No such interface supported&lt;br /&gt;   0x80004003  -2147467261  Invalid pointer&lt;br /&gt;   0x80004004  -2147467260  Operation aborted&lt;br /&gt;   0x80004005  -2147467259  Unspecified error&lt;br /&gt;   0x80004006  -2147467258  Thread local storage failure&lt;br /&gt;   0x80004007  -2147467257  Get shared memory allocator failure&lt;br /&gt;   0x80004008  -2147467256  Get memory allocator failure&lt;br /&gt;   0x80004009  -2147467255  Unable to initialize class cache&lt;br /&gt;   0x8000400A  -2147467254  Unable to initialize RPC services&lt;br /&gt;   0x8000400B  -2147467253  Cannot set thread local storage channel control&lt;br /&gt;   0x8000400C  -2147467252  Could not allocate thread local storage channel&lt;br /&gt;                            control&lt;br /&gt;   0x8000400D  -2147467251  The user supplied memory allocator is&lt;br /&gt;                            unacceptable&lt;br /&gt;   0x8000400E  -2147467250  The OLE service mutex already exists&lt;br /&gt;   0x8000400F  -2147467249  The OLE service file mapping already exists&lt;br /&gt;   0x80004010  -2147467248  Unable to map view of file for OLE service&lt;br /&gt;   0x80004011  -2147467247  Failure attempting to launch OLE service&lt;br /&gt;   0x80004012  -2147467246  There was an attempt to call CoInitialize a&lt;br /&gt;                            second time while single threaded&lt;br /&gt;   0x80004013  -2147467245  A Remote activation was necessary but was not&lt;br /&gt;                            allowed&lt;br /&gt;   0x80004014  -2147467244  A Remote activation was necessary but the&lt;br /&gt;                            server name provided was invalid&lt;br /&gt;   0x80004015  -2147467243  The class is configured to run as a security&lt;br /&gt;                            id different from the caller&lt;br /&gt;   0x80004016  -2147467242  Use of Ole1 services requiring DDE windows is&lt;br /&gt;                            disabled&lt;br /&gt;   0x80004017  -2147467241  A RunAs specification must be&lt;br /&gt;                            &lt;domain name&gt;\&lt;user name&gt; or simply &lt;user name&gt;&lt;br /&gt;   0x80004018  -2147467240  The server process could not be started.  The&lt;br /&gt;                            pathname may be incorrect.&lt;br /&gt;   0x80004019  -2147467239  The server process could not be started as the&lt;br /&gt;                            configured identity.  The pathname may be&lt;br /&gt;                            incorrect or unavailable.&lt;br /&gt;   0x8000401A  -2147467238  The server process could not be started because&lt;br /&gt;                            the configured identity is incorrect.  Check&lt;br /&gt;                            the username and password.&lt;br /&gt;   0x8000401B  -2147467237  The client is not allowed to launch this&lt;br /&gt;                            server.&lt;br /&gt;   0x8000401C  -2147467236  The service providing this server could not&lt;br /&gt;                            be started.&lt;br /&gt;   0x8000401D  -2147467235  This computer was unable to communicate with&lt;br /&gt;                            the computer providing the server.&lt;br /&gt;   0x8000401E  -2147467234  The server did not respond after being&lt;br /&gt;                            launched.&lt;br /&gt;   0x8000401F  -2147467233  The registration information for this server&lt;br /&gt;                            is inconsistent or incomplete.&lt;br /&gt;   0x80004020  -2147467232  The registration information for this interface&lt;br /&gt;                            is inconsistent or incomplete.&lt;br /&gt;   0x80004021  -2147467231  The operation attempted is not supported.&lt;br /&gt;   0x8000FFFF  -2147418113  Catastrophic failure&lt;br /&gt;   0x80070005  -2147024891  General access denied error&lt;br /&gt;   0x80070006  -2147024890  Invalid handle&lt;br /&gt;   0x8007000E  -2147024882  Ran out of memory&lt;br /&gt;   0x80070057  -2147024809  One or more arguments are invalid&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Debugging HRESULTS from OLE-DB&lt;br /&gt;Some OLE-DB error messages, such as 80040e37 (Table 'x' does not exist) are&lt;br /&gt;fairly obvious whether using ADO or OLE-DB. Others such as 0x80040E06 (Invalid chapter) are not as clear to an ADO developer. You can use the ITest/ISpy tools that ship with the OLE-DB SDK to spy on the OLE-DB calls. ITest/ISpy are similar to ODBC Spy and you can use them for complex debugging in ADO/DB applications.&lt;br /&gt;&lt;br /&gt;This list was compiled from the Oledberr.h file, which ships with the OLE-DB SDK:&lt;br /&gt;&lt;br /&gt;   Unsigned     Signed&lt;br /&gt;     HRESULT   Hex HRESULT                    Description&lt;br /&gt;   ----------  -----------  ----------------------------------------------&lt;br /&gt;   0x80040E00  -2147217920  Invalid accessor&lt;br /&gt;   0x80040E01  -2147217919  Creating another row would have exceeded the&lt;br /&gt;                            total number of active rows supported by the&lt;br /&gt;                            rowset&lt;br /&gt;   0x80040E02  -2147217918  Unable to write with a read-only accessor&lt;br /&gt;   0x80040E03  -2147217917  Given values violate the database schema&lt;br /&gt;   0x80040E04  -2147217916  Invalid row handle&lt;br /&gt;   0x80040E05  -2147217915  An object was open&lt;br /&gt;   0x80040E06  -2147217914  Invalid chapter&lt;br /&gt;   0x80040E07  -2147217913  A literal value in the command could not be                                   converted to the correct type due to a reason&lt;br /&gt;                            other than data overflow&lt;br /&gt;   0x80040E08  -2147217912  Invalid binding info&lt;br /&gt;   0x80040E09  -2147217911  Permission denied&lt;br /&gt;   0x80040E0A  -2147217910  Specified column does not contain bookmarks or&lt;br /&gt;                            chapters&lt;br /&gt;   0x80040E0B  -2147217909  Some cost limits were rejected&lt;br /&gt;   0x80040E0C  -2147217908  No command has been set for the command object&lt;br /&gt;   0x80040E0D  -2147217907  Unable to find a query plan within the given&lt;br /&gt;                            cost limit&lt;br /&gt;   0x80040E0E  -2147217906  Invalid bookmark&lt;br /&gt;   0x80040E0F  -2147217905  Invalid lock mode&lt;br /&gt;   0x80040E10  -2147217904  No value given for one or more required&lt;br /&gt;                            parameters&lt;br /&gt;   0x80040E11  -2147217903  Invalid column ID&lt;br /&gt;   0x80040E12  -2147217902  Invalid ratio&lt;br /&gt;   0x80040E13  -2147217901  Invalid value&lt;br /&gt;   0x80040E14  -2147217900  The command contained one or more errors&lt;br /&gt;   0x80040E15  -2147217899  The executing command cannot be canceled&lt;br /&gt;   0x80040E16  -2147217898  The provider does not support the specified&lt;br /&gt;                            dialect&lt;br /&gt;   0x80040E17  -2147217897  A data source with the specified name already&lt;br /&gt;                            exists&lt;br /&gt;   0x80040E18  -2147217896  The rowset was builtover a live data feed and&lt;br /&gt;                            cannot be restarted&lt;br /&gt;   0x80040E19  -2147217895  No key matching the described characteristics&lt;br /&gt;                            could be found within the current range&lt;br /&gt;   0x80040E1A  -2147217894  Ownership of this tree has been given to the&lt;br /&gt;                            provider&lt;br /&gt;   0x80040E1B  -2147217893  The provider is unable to determine identity&lt;br /&gt;                            for newly inserted rows&lt;br /&gt;   0x80040E1C  -2147217892  No nonzero weights specified for any goals&lt;br /&gt;                            supported, so goal was rejected; current goal&lt;br /&gt;                            was not changed&lt;br /&gt;   0x80040E1D  -2147217891  Requested conversion is not supported&lt;br /&gt;   0x80040E1E  -2147217890  lRowsOffset would position you past either end&lt;br /&gt;                            of the rowset, regardless of the cRows value&lt;br /&gt;                            specified; cRowsObtained is 0&lt;br /&gt;   0x80040E1F  -2147217889  Information was requested for a query, and the&lt;br /&gt;                            query was not set&lt;br /&gt;   0x80040E20  -2147217888  Provider called a method from IRowsetNotify in&lt;br /&gt;                            the consumer and NT&lt;br /&gt;   0x80040E21  -2147217887  Errors occurred&lt;br /&gt;   0x80040E22  -2147217886  A non-NULL controlling IUnknown was specified&lt;br /&gt;                            and the object being created does not support&lt;br /&gt;                            aggregation&lt;br /&gt;   0x80040E23  -2147217885  A given HROW referred to a hard- or soft-&lt;br /&gt;                            deleted row&lt;br /&gt;   0x80040E24  -2147217884  The rowset does not support fetching backwards&lt;br /&gt;   0x80040E25  -2147217883  All HROWs must be released before new ones can&lt;br /&gt;                            be obtained&lt;br /&gt;   0x80040E26  -2147217882  One of the specified storage flags was not&lt;br /&gt;                            supported&lt;br /&gt;   0x80040E27  -2147217881  The comparison operator was invalid&lt;br /&gt;&lt;br /&gt;   0x80040E28  -2147217880  The specified status flag was neither&lt;br /&gt;                            DBCOLUMNSTATUS_OK nor DBCOLUMNSTATUS_ISNULL&lt;br /&gt;   0x80040E29  -2147217879  The rowset cannot scroll backwards&lt;br /&gt;   0x80040E2A  -2147217878  Invalid region handle&lt;br /&gt;   0x80040E2B  -2147217877  The specified set of rows was not contiguous to&lt;br /&gt;                            or overlapping the rows in the specified watch&lt;br /&gt;                            region&lt;br /&gt;   0x80040E2C  -2147217876  A transition from ALL* to MOVE* or EXTEND* was&lt;br /&gt;                            specified&lt;br /&gt;   0x80040E2D  -2147217875  The specified region is not a proper subregion&lt;br /&gt;                            of the region identified by the given watch&lt;br /&gt;                            region handle&lt;br /&gt;   0x80040E2E  -2147217874  The provider does not support multi-statement&lt;br /&gt;                            commands&lt;br /&gt;   0x80040E2F  -2147217873  A specified value violated the integrity&lt;br /&gt;                            constraints for a column or table&lt;br /&gt;   0x80040E30  -2147217872  The given type name was unrecognized&lt;br /&gt;   0x80040E31  -2147217871  Execution aborted because a resource limit has&lt;br /&gt;                            been reached; no results have been returned&lt;br /&gt;   0x80040E32  -2147217870  Cannot clone a command object whose command&lt;br /&gt;                            tree contains a rowset or rowsets&lt;br /&gt;   0x80040E33  -2147217869  Cannot represent the current tree as text&lt;br /&gt;   0x80040E34  -2147217868  The specified index already exists&lt;br /&gt;   0x80040E35  -2147217867  The specified index does not exist&lt;br /&gt;   0x80040E36  -2147217866  The specified index was in use&lt;br /&gt;   0x80040E37  -2147217865  The specified table does not exist&lt;br /&gt;   0x80040E38  -2147217864  The rowset was using optimistic concurrency and&lt;br /&gt;                            the value of a column has been changed since&lt;br /&gt;                            it was last read&lt;br /&gt;   0x80040E39  -2147217863  Errors were detected during the copy&lt;br /&gt;   0x80040E3A  -2147217862  A specified precision was invalid&lt;br /&gt;   0x80040E3B  -2147217861  A specified scale was invalid&lt;br /&gt;   0x80040E3C  -2147217860  Invalid table ID&lt;br /&gt;   0x80040E3D  -2147217859  A specified type was invalid&lt;br /&gt;   0x80040E3E  -2147217858  A column ID was occurred more than once in the&lt;br /&gt;                            specification&lt;br /&gt;   0x80040E3F  -2147217857  The specified table already exists&lt;br /&gt;   0x80040E40  -2147217856  The specified table was in use&lt;br /&gt;   0x80040E41  -2147217855  The specified locale ID was not supported&lt;br /&gt;   0x80040E42  -2147217854  The specified record number is invalid&lt;br /&gt;   0x80040E43  -2147217853  Although the bookmark was validly formed, no&lt;br /&gt;                            row could be found to match it&lt;br /&gt;   0x80040E44  -2147217852  The value of a property was invalid&lt;br /&gt;   0x80040E45  -2147217851  The rowset was not chaptered&lt;br /&gt;   0x80040E46  -2147217850  Invalid accessor&lt;br /&gt;   0x80040E47  -2147217849  Invalid storage flags&lt;br /&gt;   0x80040E48  -2147217848  By-ref accessors are not supported by this&lt;br /&gt;                            provider&lt;br /&gt;   0x80040E49  -2147217847  Null accessors are not supported by this&lt;br /&gt;                            provider&lt;br /&gt;   0x80040E4A  -2147217846  The command was not prepared&lt;br /&gt;   0x80040E4B  -2147217845  The specified accessor was not a parameter&lt;br /&gt;                            accessor&lt;br /&gt;   0x80040E4C  -2147217844  The given accessor was write-only&lt;br /&gt;   0x80040E4D  -2147217843  Authentication failed&lt;br /&gt;   0x80040E4E  -2147217842  The change was canceled during notification; no&lt;br /&gt;                            columns are changed&lt;br /&gt;   0x80040E4F  -2147217841  The rowset was single-chaptered and the chapter&lt;br /&gt;                            was not released&lt;br /&gt;   0x80040E50  -2147217840  Invalid source handle&lt;br /&gt;   0x80040E51  -2147217839  The provider cannot derive parameter info and&lt;br /&gt;                            SetParameterInfo has not been called&lt;br /&gt;   0x80040E52  -2147217838  The data source object is already initialized&lt;br /&gt;   0x80040E53  -2147217837  The provider does not support this method&lt;br /&gt;   0x80040E54  -2147217836  The number of rows with pending changes has&lt;br /&gt;                            exceeded the set limit&lt;br /&gt;   0x80040E55  -2147217835  The specified column did not exist&lt;br /&gt;   0x80040E56  -2147217834  There are pending changes on a row with a&lt;br /&gt;                            reference count of zero&lt;br /&gt;   0x80040E57  -2147217833  A literal value in the command overflowed the&lt;br /&gt;                            range of the type of the associated column&lt;br /&gt;   0x80040E58  -2147217832  The supplied HRESULT was invalid&lt;br /&gt;   0x80040E59  -2147217831  The supplied LookupID was invalid&lt;br /&gt;   0x80040E5A  -2147217830  The supplied DynamicErrorID was invalid&lt;br /&gt;   0x80040E5B  -2147217829  Unable to get visible data for a newly-inserted&lt;br /&gt;                            row that has not yet been updated&lt;br /&gt;   0x80040E5C  -2147217828  Invalid conversion flag&lt;br /&gt;   0x80040E5D  -2147217827  The given parameter name was unrecognized&lt;br /&gt;   0x80040E5E  -2147217826  Multiple storage objects can not be open&lt;br /&gt;                            simultaneously&lt;br /&gt;   0x80040E5F  -2147217825  The requested filter could not be opened&lt;br /&gt;   0x80040E60  -2147217824  The requested order could not be opened&lt;br /&gt;   0x80040E61  -2147217823  Bad tuple&lt;br /&gt;   0x80040E62  -2147217822  Bad coordinate&lt;br /&gt;   0x80040E63  -2147217821  The given axis was not valid for this Dataset&lt;br /&gt;   0x80040E64  -2147217820  One or more of the given cell ordinals was invalid&lt;br /&gt;   0x80040E65  -2147217819  The supplied columnID was invalid&lt;br /&gt;   0x80040E67  -2147217817  The supplied command does not have a DBID (Note:                             DBID is SQL shorthand for Database ID.)&lt;br /&gt;   0x80040E68  -2147217816  The supplied DBID already exists&lt;br /&gt;   0x80040E69  -2147217815  The maximum number of Sessions supported by the&lt;br /&gt;                            provider has already been created. The consumer&lt;br /&gt;                            must release one or more currently held Sessions&lt;br /&gt;                            before obtaining a new Session object&lt;br /&gt;   0x80040E72  -2147217806  The index ID is invalid&lt;br /&gt;   0x80040E73  -2147217805  The initialization string does not conform&lt;br /&gt;                            to specification&lt;br /&gt;   0x80040E74  -2147217804  The OLE DB root enumerator did not return any&lt;br /&gt;                            providers that matched an of the SOURCES_TYPEs&lt;br /&gt;                            requested&lt;br /&gt;   0x80040E75  -2147217803  The initialization string specifies a provider&lt;br /&gt;                            which does not match the currently active&lt;br /&gt;                            provider.&lt;br /&gt;   0x80040E76  -2147217802  The specified DBID is invalid&lt;br /&gt;   0x80040E6A  -2147217814  Invalid trustee value&lt;br /&gt;   0x80040E6B  -2147217813  The trustee is not for the current data source&lt;br /&gt;   0x80040E6C  -2147217812  The trustee does not support memberships/ &lt;br /&gt;                            collections&lt;br /&gt;   0x80040E6D  -2147217811  The object is invalid or unknown to the provider&lt;br /&gt;   0x80040E6E  -2147217810  No owner exists for the object&lt;br /&gt;   0x80040E6F  -2147217809  The access entry list supplied is invalid&lt;br /&gt;   0x80040E70  -2147217808  The trustee supplied as owner is invalid or&lt;br /&gt;                            unknown to the provider&lt;br /&gt;   0x80040E71  -2147217807  The permission supplied in the access entry list&lt;br /&gt;                            is invalid&lt;br /&gt;   0x80040E77  -2147217801  The ConstraintType was invalid or not supported&lt;br /&gt;                            by the provider.&lt;br /&gt;   0x80040E78  -2147217800  The ConstraintType was not CONSTRAINTTYPE_FOREIGNKEY&lt;br /&gt;                            and cForeignKeyColumns was not zero&lt;br /&gt;   &lt;br /&gt;   0x80040E79  -2147217799  The Deferrability was invalid or the value was not&lt;br /&gt;                            supported by the provider&lt;br /&gt;   0x80040E80  -2147217792  The MatchType was invalid or the value was not&lt;br /&gt;                            supported by the provider&lt;br /&gt;   0x80040E8A  -2147217782  The UpdateRule or DeleteRule was invalid or the&lt;br /&gt;                            value was not supported by the provider&lt;br /&gt;   0x80040E8B  -2147217781  The pConstraintID did not exist in the data source&lt;br /&gt;   0x80040E8C  -2147217780  The dwFlags was invalid&lt;br /&gt;   0x80040E8D  -2147217779  The rguidColumnType pointed to a GUID that does not&lt;br /&gt;                            match the object type of this column or this column&lt;br /&gt;                            was not set&lt;br /&gt;   0x80040E8E  -2147217778  The requested URL was out-of-scope&lt;br /&gt;   0x80040E90  -2147217776  The provider could not drop the object&lt;br /&gt;   0x80040E91  -2147217775  There is no source row&lt;br /&gt;   0x80040E92  -2147217774  The OLE DB object represented by this URL is locked&lt;br /&gt;                            by one or more other processes&lt;br /&gt;   0x80040E93  -2147217773  The client requested an object type that is only&lt;br /&gt;                            valid for a collection &lt;br /&gt;   0x80040E94  -2147217772  The caller requested write access to a read-only&lt;br /&gt;                            object&lt;br /&gt;   0x80040E95  -2147217771  The provider could not connect to the server for&lt;br /&gt;                            this object&lt;br /&gt;   0x80040E96  -2147217770  The provider could not connect to the server for&lt;br /&gt;                            this object&lt;br /&gt;   0x80040E97  -2147217769  The attempt to bind to the object timed out&lt;br /&gt;   0x80040E98  -2147217768  The provider was unable to create an object at&lt;br /&gt;                            this URL because an object named by this URL&lt;br /&gt;                            already exists&lt;br /&gt;   0x80040E99  -2147217767  The provider could not drop the object&lt;br /&gt;   0x80040E9A  -2147217766  The provider was unable to create an object&lt;br /&gt;                            at this URL because the server was out of&lt;br /&gt;                            physical storage&lt;br /&gt;   0x00040EC0       265920  Fetching requested number of rows would have&lt;br /&gt;                            exceeded total number of active rows supported&lt;br /&gt;                            by the rowset&lt;br /&gt;   0x00040EC1       265921  One or more column types are incompatible;&lt;br /&gt;                            conversion errors will occur during copying&lt;br /&gt;   0x00040EC2       265922  Parameter type information has been overridden&lt;br /&gt;                            by caller&lt;br /&gt;   0x00040EC3       265923  Skipped bookmark for deleted or non-member row&lt;br /&gt;   0x00040EC4       265924  Errors found in validating tree&lt;br /&gt;   0x00040EC5       265925  There are no more rowsets&lt;br /&gt;   0x00040EC6       265926  Reached start or end of rowset or chapter&lt;br /&gt;   0x00040EC7       265927  The provider re-executed the command&lt;br /&gt;   0x00040EC8       265928  Variable data buffer full&lt;br /&gt;   0x00040EC9       265929  There are no more results&lt;br /&gt;   0x00040ECA       265930  Server cannot release or downgrade a lock until&lt;br /&gt;                            the end of the transaction&lt;br /&gt;   0x00040ECB       265931  Specified weight was not supported or exceeded&lt;br /&gt;                            the supported limit and was set to 0 or the&lt;br /&gt;                            supported limit&lt;br /&gt;   0x00040ECC       265932  Consumer is uninterested in receiving further&lt;br /&gt;                            notification calls for this reason&lt;br /&gt;   0x00040ECD       265933  Input dialect was ignored and text was returned&lt;br /&gt;                            in different dialect&lt;br /&gt;   0x00040ECE       265934  Consumer is uninterested in receiving further&lt;br /&gt;                            notification calls for this phase&lt;br /&gt;   0x00040ECF       265935  Consumer is uninterested in receiving further&lt;br /&gt;                            notification calls for this reason&lt;br /&gt;   0x00040ED0       265936  The operation is being processed asynchronously&lt;br /&gt;   0x00040ED1       265937  In order to reposition to the start of the&lt;br /&gt;                            rowset, the provider had to reexecute the&lt;br /&gt;                            query; either the order of the columns changed&lt;br /&gt;                            or columns were added to or removed from the&lt;br /&gt;                            rowset&lt;br /&gt;   0x00040ED2       265938  The method had some errors; errors have been&lt;br /&gt;                            returned in the error array&lt;br /&gt;   0x00040ED3       265939  Invalid row handle&lt;br /&gt;   0x00040ED4       265940  A given HROW referred to a hard-deleted row&lt;br /&gt;    &lt;br /&gt;   &lt;br /&gt;   0x00040ED5       265941  The provider was unable to keep track of all&lt;br /&gt;                            the changes; the client must refetch the data&lt;br /&gt;                            associated with the watch region using another&lt;br /&gt;                            method&lt;br /&gt;   0x00040ED6       265942  Execution stopped because a resource limit has&lt;br /&gt;                            been reached; results obtained so far have been&lt;br /&gt;                            returned but execution cannot be resumed&lt;br /&gt;   0x00040ED7       265943  The bind failed because the provider was unable&lt;br /&gt;                            to satisfy all of the bind flags or properties&lt;br /&gt;   0x00040ED8       265944  A lock was upgraded from the value specified&lt;br /&gt;   0x00040ED9       265945  One or more properties were changed as allowed&lt;br /&gt;                            by provider&lt;br /&gt;   0x00040EDA       265946  Errors occurred&lt;br /&gt;   0x00040EDB       265947  A specified parameter was invalid&lt;br /&gt;   0x00040EDC       265948  Updating this row caused more than one row to&lt;br /&gt;                            be updated in the data source&lt;br /&gt;   0x00040EDD       265949  The row has no row-specific columns&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1212784429497290889?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1212784429497290889/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1212784429497290889' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1212784429497290889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1212784429497290889'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/11/listagem-de-codigos-de-erros-do-ole-db.html' title='Listagem de códigos de erros do OLE DB'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4981868688472059017</id><published>2010-11-13T11:29:00.001-02:00</published><updated>2010-11-13T11:31:33.892-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Compartilhando um PDF sobre programação multi-thread em Delphi</title><content type='html'>Olá. A tempos, sempre que preciso de algo a mais quando se trata de Thread e assuntos correlatos, sempre me deparo com o PDF abaixo.&lt;br /&gt;&lt;br /&gt;Como considero bem completo, compartilho com a comunidade.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe width=100% height=560px frameborder=0 src=https://docs.google.com/viewer?a=v&amp;pid=explorer&amp;chrome=false&amp;embedded=true&amp;srcid=0B2-0qFgCBKnjNmJhZjg2NDktYjIyOS00ODA0LTk0MjgtZGFhZDJiYzhkODJm&amp;hl=pt_BR&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Um forte abraço!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4981868688472059017?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4981868688472059017/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4981868688472059017' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4981868688472059017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4981868688472059017'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/11/ola.html' title='Compartilhando um PDF sobre programação multi-thread em Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4015860423330981753</id><published>2010-10-04T22:09:00.001-03:00</published><updated>2011-01-19T12:30:50.279-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Usando o To-Do List do Delphi</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Muitas vezes, enquanto estamos codificando, por um motivo ou outro, postergamos a implementação de uma rotina para um momento mais oportuno.&lt;br /&gt;&lt;br /&gt;Alguns de nós simplesmente faz um comentário, como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm2.Button1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  if (1 = 1) then&lt;br /&gt;  begin&lt;br /&gt;    ShowMessage('O mundo continua no lugar...');&lt;br /&gt;  end else&lt;br /&gt;  begin&lt;br /&gt;    //Criar um tratamento especial para esta situação&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Parece óbvio que, dependendo do tamanho do projeto, este comentário irá se perder e o desenvolvedor só se dará conta da situação no dia que 1 for diferente de 1. &lt;br /&gt;&lt;br /&gt;Por isso aconselho fortemente o uso do To-Do List que pode ser acessado a partir do menu View/To-Do List. Esta facilidade lista tudo que ficou pendente no código, e com um simples duplo-clique você chega na região do comentário.&lt;br /&gt;&lt;br /&gt;Usando o exemplo acima, poderíamos fazer:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm2.Button1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  if (1 = 1) then&lt;br /&gt;  begin&lt;br /&gt;    ShowMessage('O mundo continua no lugar...');&lt;br /&gt;  end else&lt;br /&gt;  begin&lt;br /&gt;    {TODO 1 -oMário Guedes -cBUG: Criar um tratamento especial para esta situação}&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Perceba que bastaria colocoar simplesmente "TODO: [Texto]" mas o exemplo que estamos vendo esta atribuindo uma prioridade (1), um dono (-o) e uma categoria (-c), o que será muito útil dentro da equipe.&lt;br /&gt;&lt;br /&gt;Clicando com o botão direto no quadro To-Do List a gente tem opções interessantes que valem a pena ser exploradas (veja figura).&lt;br /&gt;&lt;br /&gt;Vale a pena citar, que ao resolver a pendência, temos duas escolhas: deletar a entrada no To-Do List ou marcar como DONE.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_qxC8hcxCfPw/TKp5_hudpNI/AAAAAAAAFlE/K_z4FvxUAFM/s1600/todolist.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" px="true" src="http://2.bp.blogspot.com/_qxC8hcxCfPw/TKp5_hudpNI/AAAAAAAAFlE/K_z4FvxUAFM/s320/todolist.png" width="251" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Agradeço o &lt;a href="http://twitter.com/wanc"&gt;@wanc&lt;/a&gt; por me mostrar as chaves, que até então eu não conhecia.&lt;br /&gt;&lt;br /&gt;Lembro também que o GExperts possui um To-Do List com algumas características a mais.&lt;br /&gt;&lt;br /&gt;Um forte abraço!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4015860423330981753?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4015860423330981753/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4015860423330981753' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4015860423330981753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4015860423330981753'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/10/usando-o-to-do-list-do-delphi.html' title='Usando o To-Do List do Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qxC8hcxCfPw/TKp5_hudpNI/AAAAAAAAFlE/K_z4FvxUAFM/s72-c/todolist.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4921532095388917523</id><published>2010-08-10T17:35:00.001-03:00</published><updated>2010-08-10T17:35:28.262-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><title type='text'>Mutex e Serviço do Windows</title><content type='html'>Assim como arquivo mapeado (&lt;a href="http://migre.me/13M8B"&gt;http://migre.me/13M8B&lt;/a&gt;) a forma de se criar um Mutex entre um aplicativo GUI e um serviço do Windows é incluir a palavra 'Session\' no parâmetro lpName do CreateMutex.&lt;br /&gt;&lt;br /&gt;Post rápido para não passar batido, perdoe-me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4921532095388917523?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4921532095388917523/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4921532095388917523' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4921532095388917523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4921532095388917523'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/08/mutex-e-servico-do-windows.html' title='Mutex e Serviço do Windows'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2406805768967190852</id><published>2010-08-04T10:36:00.001-03:00</published><updated>2011-01-19T12:31:46.380-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Terminar uma thread "por fora"</title><content type='html'>Olá amigons!&lt;br /&gt;&lt;br /&gt;Precisei finalizar uma thread que não era minha e fuçando no pai Google me deparo com o seguinte link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.chmod.com.br/vb/showthread.php?8154-Delphi-SuspendThread"&gt;http://www.chmod.com.br/vb/showthread.php?8154-Delphi-SuspendThread&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tirando a irreverência do texto (para dizer o mínimo) complemento a dica com um código que finaliza um thread:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm1.Button6Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;hHandle : THandle;&lt;br /&gt;iExit   : Integer;&lt;br /&gt;bRet    : Boolean;&lt;br /&gt;begin&lt;br /&gt;  hHandle := OpenThread(1,True,StrToInt(Self.Edit1.Text));&lt;br /&gt;  bRet := TerminateThread(hHandle,iExit);&lt;br /&gt;  if not (bRet) then&lt;br /&gt;    ShowMessage('Insucesso!')&lt;br /&gt;  else&lt;br /&gt;    ShowMessage('Sucesso!')&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;É isso ai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2406805768967190852?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2406805768967190852/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2406805768967190852' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2406805768967190852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2406805768967190852'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/08/terminar-uma-thread-por-fora.html' title='Terminar uma thread &quot;por fora&quot;'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7075430293571929633</id><published>2010-06-22T18:24:00.001-03:00</published><updated>2011-01-19T12:32:30.275-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><title type='text'>Retornando um código de erro na inicialização do serviço</title><content type='html'>Muitas vezes, um serviço do Windows, para subir, precisa de algumas condições como acesso a um banco de dados ou uma conexão socket.&lt;br /&gt;&lt;br /&gt;Acontece que muitas vezes um serviço não sobe e você simplesmente fica sem saber o que aconteceu.&lt;br /&gt;&lt;br /&gt;Exemplo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TcsBlendedServerService.ServiceStart(Sender: TService;&lt;br /&gt;  var Started: Boolean);&lt;br /&gt;var&lt;br /&gt;bRet : Boolean;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    try&lt;br /&gt;      bRet := dmNucleo.StartServer;&lt;br /&gt;      Started := bRet;&lt;br /&gt;    except&lt;br /&gt;      on E: Exception do&lt;br /&gt;      begin&lt;br /&gt;        Started := False;&lt;br /&gt;        Self.GerarLog(DescreverException(E),4938403,ctLOGException,rlCritical);&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;  finally&lt;br /&gt;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Caso o serviço não suba, retorna a seguinte tela de erro:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_qxC8hcxCfPw/TCEo9l64oUI/AAAAAAAAFNw/A0s7WgKaix8/s1600/sem_errcode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_qxC8hcxCfPw/TCEo9l64oUI/AAAAAAAAFNw/A0s7WgKaix8/s320/sem_errcode.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Para melhorar esta situação, a classe TService oferece o ErrCode, veja o exemplo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TcsBlendedServerService.ServiceStart(Sender: TService;&lt;br /&gt;  var Started: Boolean);&lt;br /&gt;var&lt;br /&gt;bRet : Boolean;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    try&lt;br /&gt;      bRet := dmNucleo.StartServer;&lt;br /&gt;      Started := bRet;&lt;br /&gt;&lt;br /&gt;      //Retorno de um código numérico&lt;br /&gt;      if not (Started) then&lt;br /&gt;        Self.ErrCode := 10;&lt;br /&gt;      //---&lt;br /&gt;&lt;br /&gt;    except&lt;br /&gt;      on E: Exception do&lt;br /&gt;      begin&lt;br /&gt;        Started := False;&lt;br /&gt;        Self.GerarLog(DescreverException(E),4938403,ctLOGException,rlCritical);&lt;br /&gt;      end;&lt;br /&gt;    end;&lt;br /&gt;  finally&lt;br /&gt;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Neste caso aparece a tela abaixo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qxC8hcxCfPw/TCEqD32AuaI/AAAAAAAAFN4/6XUnP1wzcUs/s1600/com_errcode.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qxC8hcxCfPw/TCEqD32AuaI/AAAAAAAAFN4/6XUnP1wzcUs/s320/com_errcode.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Não é lá essas coisas mas ajuda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7075430293571929633?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7075430293571929633/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7075430293571929633' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7075430293571929633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7075430293571929633'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/06/retornando-um-codigo-de-erro-na.html' title='Retornando um código de erro na inicialização do serviço'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_qxC8hcxCfPw/TCEo9l64oUI/AAAAAAAAFNw/A0s7WgKaix8/s72-c/sem_errcode.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3598458779809771290</id><published>2010-06-08T20:54:00.001-03:00</published><updated>2011-01-19T12:33:16.416-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>AfterConstruction &amp;  BeforeDestruction</title><content type='html'>Existe uma opção à reescrever o constructor e o destructor da sua classe.&lt;br /&gt;&lt;br /&gt;É implementar na sua classe os métodos AfterConstruction e BeforeConstruction, como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;TMyClasst = class(TObject)&lt;br /&gt;public&lt;br /&gt;  procedure AfterConstruction; override;&lt;br /&gt;  procedure BeforeDestruction; override;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Bom, é isso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3598458779809771290?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3598458779809771290/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3598458779809771290' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3598458779809771290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3598458779809771290'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/06/afterconstruction-beforedestruction.html' title='AfterConstruction &amp;  BeforeDestruction'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5946558219737662199</id><published>2010-05-26T12:51:00.002-03:00</published><updated>2010-05-26T12:51:14.340-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open tools api'/><title type='text'>Mais sobre Open Tools API</title><content type='html'>Um ótimo link sobre o assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mustangpeak.net/opentoolsape.htm"&gt;http://www.mustangpeak.net/opentoolsape.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5946558219737662199?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5946558219737662199/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5946558219737662199' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5946558219737662199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5946558219737662199'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/05/mais-sobre-open-tools-api.html' title='Mais sobre Open Tools API'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-581169789621255425</id><published>2010-05-20T14:26:00.000-03:00</published><updated>2010-05-20T14:26:09.533-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><title type='text'>Refactoring</title><content type='html'>Uma ótima leitura sobre o assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://conferences.embarcadero.com/article/32128"&gt;http://conferences.embarcadero.com/article/32128&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-581169789621255425?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/581169789621255425/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=581169789621255425' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/581169789621255425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/581169789621255425'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/05/refactoring.html' title='Refactoring'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5756409264024347063</id><published>2010-05-04T18:39:00.000-03:00</published><updated>2010-05-04T18:39:35.856-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Crie seu próprio DataSet</title><content type='html'>Eu tentei mas não consegui. :(&lt;br /&gt;&lt;br /&gt;De qualquer forma a leitura inicial é:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_3420.asp"&gt;http://www.delphi3000.com/articles/article_3420.asp&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_3421.asp"&gt;http://www.delphi3000.com/articles/article_3421.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cc.embarcadero.com/Item.aspx?id=14312"&gt;http://cc.embarcadero.com/Item.aspx?id=14312&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5756409264024347063?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5756409264024347063/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5756409264024347063' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5756409264024347063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5756409264024347063'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/05/crie-seu-proprio-dataset.html' title='Crie seu próprio DataSet'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7617366851813036062</id><published>2010-04-28T19:21:00.001-03:00</published><updated>2010-04-28T19:24:04.833-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='bpl'/><category scheme='http://www.blogger.com/atom/ns#' term='open tools api'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Faça seu próprio Wizard\Expert</title><content type='html'>Amigo, acredito que você queira dar uma turbinada no seu Delphi, agregando funcionalidades específicas ao seu dia a dia.&lt;br /&gt;&lt;br /&gt;Isso é possível com a &lt;b&gt;Open Tools API&lt;/b&gt;!&lt;br /&gt;&lt;br /&gt;Veja esses links:&lt;br /&gt;&lt;br /&gt;Introdução:&lt;br /&gt;&lt;a href="http://www.techtips.com.br/programacao/delphi/experts/escrevendo-um-expert-para-a-ide-do-delphi/"&gt;http://www.techtips.com.br/programacao/delphi/experts/escrevendo-um-expert-para-a-ide-do-delphi/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Exemplos (Sub pasta OTA Open Tools API):&lt;br /&gt;&lt;a href="http://edn.embarcadero.com/br/article/40232"&gt;http://edn.embarcadero.com/br/article/40232&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Artigos na Clube Delphi (Posts Fechados - Por questão de ética não irei compartilhar os arquivos)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/post-13042-Artigo-Clube-Delphi-Edicao-23-Open-Tools-API.html"&gt;http://www.devmedia.com.br/post-13042-Artigo-Clube-Delphi-Edicao-23-Open-Tools-API.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/post-12653-Artigo-Clube-Delphi--70-Open-Tools-API.html"&gt;http://www.devmedia.com.br/post-12653-Artigo-Clube-Delphi--70-Open-Tools-API.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/post-11545-Artigo-Clube-Delphi-71-Open-Tools-API.html"&gt;http://www.devmedia.com.br/post-11545-Artigo-Clube-Delphi-71-Open-Tools-API.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/post-917-Criando-plugins-para-o-Delphi.html"&gt;http://www.devmedia.com.br/post-917-Criando-plugins-para-o-Delphi.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devmedia.com.br/post-14557-Artigo-Clube-Delphi-Edicao-27-O-Poder-dos-Wizards.html"&gt;http://www.devmedia.com.br/post-14557-Artigo-Clube-Delphi-Edicao-27-O-Poder-dos-Wizards.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bom, o assunto não é fácil mas é gratificante.&lt;br /&gt;&lt;br /&gt;Veja o que eu consegui fazer com os conhecimento adquirido:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qxC8hcxCfPw/S9i1XaYRrsI/AAAAAAAAE-Q/RzxzYWZVkqE/s1600/wizard.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/S9i1XaYRrsI/AAAAAAAAE-Q/RzxzYWZVkqE/s320/wizard.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7617366851813036062?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7617366851813036062/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7617366851813036062' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7617366851813036062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7617366851813036062'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/04/faca-seu-proprio-wizardexpert.html' title='Faça seu próprio Wizard\Expert'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/S9i1XaYRrsI/AAAAAAAAE-Q/RzxzYWZVkqE/s72-c/wizard.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7386029435487127124</id><published>2010-04-20T11:29:00.001-03:00</published><updated>2011-01-19T12:34:17.145-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Integração entre o Delphi e o SVN</title><content type='html'>Olá! &lt;br /&gt;&lt;br /&gt;Descobri que o Tortoise oferece um objeto COM possibilitando que o Delphi, por exemplo, levante informações sobre um determinado arquivo.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-subwcrev-com-interface.html"&gt;http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-subwcrev-com-interface.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Veja como ficou meu código:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TG4GetInfoSVN.GetInfoSVN;&lt;br /&gt;var&lt;br /&gt;vSvnObject : Variant;     //Buffer para a criação do objeto OLE&lt;br /&gt;lModulo    : IOTAModule;  //Serviço de módulo&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    vSvnObject := CreateOleObject('SubWCRev.object');&lt;br /&gt;&lt;br /&gt;    lModulo := (BorlandIDEServices as IOTAModuleServices).CurrentModule;&lt;br /&gt;&lt;br /&gt;    if (Assigned(lModulo)) then&lt;br /&gt;    begin&lt;br /&gt;      vSvnObject.GetWcinfo(lModulo.FileName,1,1);&lt;br /&gt;      if (vSvnObject.IsSVNItem) then&lt;br /&gt;      begin&lt;br /&gt;        fGetInfoSVN := TfGetInfoSVN.Create(Application);&lt;br /&gt;        fGetInfoSVN.SetFileName(lModulo.FileName);&lt;br /&gt;&lt;br /&gt;        fGetInfoSVN.AddInfo('URL',vSvnObject.URL);&lt;br /&gt;        fGetInfoSVN.AddInfo('Autor',vSvnObject.Author);&lt;br /&gt;        fGetInfoSVN.AddInfo('Revisão',vSvnObject.Revision);&lt;br /&gt;        fGetInfoSVN.AddInfo('Mínima',vSvnObject.MinRev);&lt;br /&gt;        fGetInfoSVN.AddInfo('Máxima',vSvnObject.MaxRev);&lt;br /&gt;        fGetInfoSVN.AddInfo('Data',vSvnObject.Date);&lt;br /&gt;        fGetInfoSVN.AddInfo('Modificado',vSvnObject.HasModifications);&lt;br /&gt;&lt;br /&gt;        if (vSvnObject.IsLocked) then&lt;br /&gt;        begin&lt;br /&gt;          fGetInfoSVN.AddInfo('Bloqueado em',vSvnObject.LockCreationDate);&lt;br /&gt;          fGetInfoSVN.AddInfo('Bloqueado por',vSvnObject.LockOwner);&lt;br /&gt;          fGetInfoSVN.AddInfo('Motivo',vSvnObject.LockComment);&lt;br /&gt;        end;&lt;br /&gt;&lt;br /&gt;        fGetInfoSVN.ShowModal;&lt;br /&gt;        fGetInfoSVN.Free;&lt;br /&gt;        fGetInfoSVN := nil;&lt;br /&gt;      end else&lt;br /&gt;      begin&lt;br /&gt;        MessageBox(Application.Handle,PWideChar(Format('O arquivo [%s] não está no SVN!',[lModulo.FileName])),'Atenção!',MB_OK + MB_ICONERROR);&lt;br /&gt;      end;&lt;br /&gt;    end else&lt;br /&gt;    begin&lt;br /&gt;      MessageBox(Application.Handle,'Não há um arquivo de código ativo','Atenção!',MB_OK + MB_ICONINFORMATION);&lt;br /&gt;    end;&lt;br /&gt;  finally&lt;br /&gt;    vSvnObject := Unassigned;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7386029435487127124?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7386029435487127124/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7386029435487127124' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7386029435487127124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7386029435487127124'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/04/integracao-entre-o-delphi-e-o-svn.html' title='Integração entre o Delphi e o SVN'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4764351076049999519</id><published>2010-04-12T12:10:00.001-03:00</published><updated>2011-01-19T21:16:15.697-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rtti'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='kbm'/><title type='text'>Como executar um método pelo Nome</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Este é o tipo de dica que a gente acha que nunca vai usar.&lt;br /&gt;&lt;br /&gt;:D&lt;br /&gt;&lt;br /&gt;Eu uso o KBM para construir sistemas em N Camadas: &lt;a href="http://www.components4programmers.com/"&gt;http://www.components4programmers.com/&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Para a construção de um RPC ( estou indo direto ao ponto, em caso de dúvidas sobre o assunto me contacte ) a sugestão é encadear um monte de IF como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;// Master request processor.&lt;br /&gt;//--------------------------&lt;br /&gt;&lt;br /&gt;function TkbmRPCDatabase.ProcessRequest(const Func:string; const ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;&lt;br /&gt;var&lt;br /&gt;afunc : string;&lt;br /&gt;begin&lt;br /&gt;  Self.GerarLog(Format('Func: [%s]',[Func]), 0001, ctLOGGExpert,rlLow);&lt;br /&gt;&lt;br /&gt;  try&lt;br /&gt;    AFunc:=UpperCase(Func);&lt;br /&gt;    if AFunc='TESTE' then&lt;br /&gt;       Result := PerformTESTE(ClientIdent,Args)&lt;br /&gt;    else Result:=inherited ProcessRequest(Func,ClientIdent,Args);&lt;br /&gt;  except&lt;br /&gt;    on E: Exception do&lt;br /&gt;    begin&lt;br /&gt;      Self.GerarLog(DescreverException(E),0001, ctLOGGExpert,rlLow );&lt;br /&gt;      raise;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ou seja, se eu tiver &lt;i&gt;n&lt;/i&gt; funções, teria que encadear um &lt;i&gt;if..else&lt;/i&gt; que na minha opnião fica asqueroso de se dar manutenção além de obviamente não ser "performático".&lt;br /&gt;&lt;br /&gt;A solução definitiva apareceu nesse tópico: &lt;a href="http://delphi.about.com/cs/adptips2004/a/bltip0204_3.htm"&gt;http://delphi.about.com/cs/adptips2004/a/bltip0204_3.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note o seguinte: O seu método tem que estar na parte &lt;b&gt;published &lt;/b&gt;da sua classe. Em outras sessões não rola. &lt;br /&gt;&lt;br /&gt;Veja como ficou o código:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;// Master request processor.&lt;br /&gt;//--------------------------&lt;br /&gt;&lt;br /&gt;function TkbmRPC_CSAS.ProcessRequest(const Func:string; const ClientIdent:TkbmMWClientIdentity; const Args:array of Variant):Variant;&lt;br /&gt;var&lt;br /&gt;sFunc    : string;&lt;br /&gt;rRoutine : TMethod;&lt;br /&gt;_perform : TPerformFunction;&lt;br /&gt;begin&lt;br /&gt;  Self.GerarLog(Format('Executando: [%s] - [%s]',[Func,ClientIdent.RemoteLocation]),322382429,ctLOGInformation,rlMiddle);&lt;br /&gt;&lt;br /&gt;  sFunc := Format('Perform%s',[Func]);&lt;br /&gt;  rRoutine.Data := Pointer(Self);&lt;br /&gt;  rRoutine.Code := Self.MethodAddress(sFunc);&lt;br /&gt;&lt;br /&gt;  if (Assigned(rRoutine.Code)) then&lt;br /&gt;  begin&lt;br /&gt;    _perform := TPerformFunction(rRoutine);&lt;br /&gt;    Result := _perform(ClientIdent,Args);&lt;br /&gt;  end else&lt;br /&gt;  begin&lt;br /&gt;    inherited ProcessRequest(Func,ClientIdent,Args);&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Para isso tudo funcionar, tive que criar um tipo especial:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  kbmMWSecurity;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;{$M+}&lt;br /&gt;&lt;br /&gt;  ///&lt;summary&gt;Usado para permitir uma chamada dinâmica às funções dos RPCs&lt;/summary&gt;&lt;br /&gt;  TPerformFunction = function(ClientIdent:TkbmMWClientIdentity; const Args:array of Variant): Variant of object;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;E é isso ai pe-pessoal.&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4764351076049999519?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4764351076049999519/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4764351076049999519' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4764351076049999519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4764351076049999519'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/04/como-executar-um-metodo-pelo-nome.html' title='Como executar um método pelo Nome'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8792492508575941790</id><published>2010-04-06T12:52:00.000-03:00</published><updated>2010-04-06T12:52:05.835-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>GRAACC - Doe a sua URL</title><content type='html'>Amigos, doe a sua URL para a campanha do GRAACC:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.beingmoredavid.com.br/doeseusite/"&gt;http://www.beingmoredavid.com.br/doeseusite/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8792492508575941790?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8792492508575941790/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8792492508575941790' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8792492508575941790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8792492508575941790'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/04/graacc-doe-sua-url.html' title='GRAACC - Doe a sua URL'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3789007107127075970</id><published>2010-03-30T12:11:00.001-03:00</published><updated>2011-01-19T21:17:15.484-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rtti'/><title type='text'>Verificando a hierarquia de uma determinada classe</title><content type='html'>Eventualmente queremos saber a hierarquia de uma determinada classe.&lt;br /&gt;&lt;br /&gt;Eu lanço mão do seguinte algoritmo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;function GetClassHierarchy(poList: TStringList; oClassBase: TClass): Boolean;&lt;br /&gt;var&lt;br /&gt;oClass: TClass;&lt;br /&gt;begin&lt;br /&gt;  Result := False;&lt;br /&gt;  if (Assigned(poList)) then&lt;br /&gt;  begin&lt;br /&gt;    poList.Clear;&lt;br /&gt;    oClass := oClassBase;&lt;br /&gt;    while (Assigned(oClass)) do&lt;br /&gt;    begin&lt;br /&gt;      poList.Insert(0,oClass.ClassName);&lt;br /&gt;      oClass := oClass.ClassParent;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Exemplo da utilização:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm1.Button9Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;slList : TStringList;&lt;br /&gt;begin&lt;br /&gt;  slList := TStringList.Create;&lt;br /&gt;  Unt_RotinasLog.GetClassHierarchy(slList,TSQLQuery);&lt;br /&gt;  Self.Memo1.Lines.Text := slList.Text;&lt;br /&gt;  FreeAndNil(slList);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Resultado para o exemplo acima:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;TObject&lt;br /&gt;TPersistent&lt;br /&gt;TComponent&lt;br /&gt;TDataSet&lt;br /&gt;TWideDataSet&lt;br /&gt;TCustomSQLDataSet&lt;br /&gt;TSQLQuery&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Show!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3789007107127075970?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3789007107127075970/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3789007107127075970' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3789007107127075970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3789007107127075970'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/verificando-hierarquia-de-uma.html' title='Verificando a hierarquia de uma determinada classe'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-221142474625233453</id><published>2010-03-22T09:46:00.002-03:00</published><updated>2010-03-22T09:46:40.676-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>T.I. e os Quadrinhos</title><content type='html'>Gente, olha que bacana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://andre221281.wordpress.com/"&gt;http://andre221281.wordpress.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-221142474625233453?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/221142474625233453/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=221142474625233453' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/221142474625233453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/221142474625233453'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/ti-e-os-quadrinhos.html' title='T.I. e os Quadrinhos'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2834136670392927642</id><published>2010-03-18T18:08:00.001-03:00</published><updated>2011-01-19T21:18:05.222-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Logar consulta SQL com parâmetros</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Eventualmente você precisa logar o conteúdo de uma instrução SQL e esbarra nos parâmetros.&lt;br /&gt;&lt;br /&gt;Eis uma rotina que pode lhe ser útil:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;function SQLParaLog(Consulta: TIBQuery; SalvarComo: string = ''; AreaTransferencia: Boolean = True): string;&lt;br /&gt;var&lt;br /&gt;i   : Integer;&lt;br /&gt;r   : string;&lt;br /&gt;arq : TStringList;&lt;br /&gt;begin&lt;br /&gt;  Result := Consulta.SQL.Text;&lt;br /&gt;  for i := 0 to Pred(Consulta.Params.Count) do&lt;br /&gt;    begin&lt;br /&gt;    case Consulta.Params.Items[i].DataType of&lt;br /&gt;      ftString   : r := QuotedStr(Consulta.Params[i].AsString);&lt;br /&gt;      ftDate     : r := QuotedStr(FormatDateTime('mm/dd/yyyy',Consulta.Params[i].AsDate));&lt;br /&gt;      ftDateTime : r := QuotedStr(FormatDateTime('mm/dd/yyyy hh:nn:ss',Consulta.Params[i].AsDateTime));&lt;br /&gt;      else r := Consulta.Params[i].AsString;&lt;br /&gt;    end;&lt;br /&gt;    Result := StringReplace(Result,':' + Consulta.Params.Items[i].Name,r,[rfReplaceAll,rfIgnoreCase]);&lt;br /&gt;    end;&lt;br /&gt;  if (Length(SalvarComo) &gt; 0) then&lt;br /&gt;    begin&lt;br /&gt;    arq := TStringList.Create;&lt;br /&gt;    arq.Text := Result;&lt;br /&gt;    arq.SaveToFile(SalvarComo);&lt;br /&gt;    FreeAndNil(arq);&lt;br /&gt;    end;&lt;br /&gt;  if (AreaTransferencia) then&lt;br /&gt;    begin&lt;br /&gt;    Clipboard.AsText := Result;&lt;br /&gt;    end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2834136670392927642?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2834136670392927642/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2834136670392927642' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2834136670392927642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2834136670392927642'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/logar-consulta-sql-com-parametros.html' title='Logar consulta SQL com parâmetros'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6282643621986356335</id><published>2010-03-17T14:58:00.007-03:00</published><updated>2011-01-19T21:18:57.306-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xmldoc'/><title type='text'>XMLDoc - Uma excelente alternativa para comentar o seu código fonte</title><content type='html'>Olá, tempos atrás, eu e o meu colega Wanc procuramos uma forma efetiva de comentar o código fonte.&lt;br /&gt;&lt;br /&gt;Eis que nos surge o XMLDoc.&lt;br /&gt;&lt;br /&gt;Basicamente, você usa algumas tags especiais antes do elemento que esta sendo comentado.&lt;br /&gt;&lt;br /&gt;Consegui identificar alguns, como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Unit1;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;  Dialogs;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TForm1 = class(TForm)&lt;br /&gt;    Button1: TButton;&lt;br /&gt;    procedure Button1Click(Sender: TObject);&lt;br /&gt;  private&lt;br /&gt;    /// &amp;nbsp;&lt;summary&gt;&lt;br /&gt;    /// &amp;nbsp;Rotina responsável por inverter uma palavra&lt;br /&gt;    /// &amp;nbsp; &amp;nbsp;&lt;code&gt;Teste -&amp;gt; etseT&lt;/code&gt;&lt;br /&gt;    ///  &lt;/summary&gt;&lt;br /&gt;    /// &amp;nbsp;&lt;param name="psEntrada"&gt;Palavra que será processada&lt;/param&gt;/// &amp;nbsp;&lt;remarks&gt;  &lt;br /&gt;    /// &amp;nbsp;A inversão de uma palavra consiste em escrevê-la de trás para frente&lt;br /&gt;    /// &amp;nbsp; &amp;nbsp;&lt;para&gt;Respeita a caixa utilizada&lt;/para&gt;&lt;br /&gt;    ///  &lt;/remarks&gt;&lt;br /&gt;    /// &amp;nbsp;&lt;comments&gt;&lt;br /&gt;    /// &amp;nbsp;A rotina carece de melhorias no desempenho&lt;br /&gt;    ///  &lt;/comments&gt;&lt;br /&gt;    /// &amp;nbsp;&lt;returns&gt;&lt;br /&gt;    /// &amp;nbsp;Retorna a palavra invertida&lt;br /&gt;    ///  &lt;/returns&gt;&lt;br /&gt;    /// &amp;nbsp;&lt;exception&gt;&lt;br /&gt;    /// &amp;nbsp;Caso haja um erro, é dipsrado um &lt;see cref="Unit1.EErroInverterPalavra"&gt;&lt;/see&gt;&lt;br /&gt;    ///  &lt;/exception&gt;&lt;br /&gt;    function InverterFrase(psEntrada: string): string;&lt;br /&gt;    { Private declarations }&lt;br /&gt;  public&lt;br /&gt;    { Public declarations }&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;  Form1: TForm1;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;procedure TForm1.Button1Click(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;function TForm1.InverterFrase(psEntrada: string): string;&lt;br /&gt;begin&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Observe que esta função funciona apenas se a unit estiver adicionada ao projeto.&lt;br /&gt;&lt;br /&gt;Veja como fica no Help Insigth:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qxC8hcxCfPw/S6FfaEjVqJI/AAAAAAAAEQw/WQAy8r6eCyI/s1600-h/blog.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/S6FfaEjVqJI/AAAAAAAAEQw/WQAy8r6eCyI/s320/blog.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6282643621986356335?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6282643621986356335/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6282643621986356335' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6282643621986356335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6282643621986356335'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/xmldoc-uma-excelente-alternativa-para.html' title='XMLDoc - Uma excelente alternativa para comentar o seu código fonte'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/S6FfaEjVqJI/AAAAAAAAEQw/WQAy8r6eCyI/s72-c/blog.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6919229439935563744</id><published>2010-03-16T11:19:00.000-03:00</published><updated>2010-03-16T11:19:26.096-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='exception'/><title type='text'>Tratamento de Exceptions</title><content type='html'>Alguns links interessantes sobre tratamento de exceção:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_3308.asp"&gt;http://www.delphi3000.com/articles/article_3308.asp&lt;/a&gt;&lt;br /&gt;Mostrando Diálogos Customizados de Exceção e Escrevendo Ocorrência de Exceções no Log de Eventos do Windows&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_3191.asp"&gt;http://www.delphi3000.com/articles/article_3191.asp&lt;/a&gt;&lt;br /&gt;Pequeno Framework para Tratamento de Exceções&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_3703.asp"&gt;http://www.delphi3000.com/articles/article_3703.asp&lt;/a&gt;&lt;br /&gt;Tratamento Avançado de Exceções para Encontrar Nome do Arquivo Fonte, Pilha de Chamada, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6919229439935563744?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6919229439935563744/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6919229439935563744' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6919229439935563744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6919229439935563744'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/tratamento-de-exceptions.html' title='Tratamento de Exceptions'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1702846209679325753</id><published>2010-03-10T09:46:00.002-03:00</published><updated>2010-03-10T09:46:58.940-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Delphi 2011</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;Se alguém souber russo:&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;a href="http://www.tdelphiblog.com/2010/03/delphi-2011-fulcrum.html"&gt;http://www.tdelphiblog.com/2010/03/delphi-2011-fulcrum.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1702846209679325753?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1702846209679325753/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1702846209679325753' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1702846209679325753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1702846209679325753'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/delphi-2011.html' title='Delphi 2011'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5201995131300775058</id><published>2010-03-05T16:24:00.000-03:00</published><updated>2010-03-05T16:24:08.390-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Componentes para interagir com MSN, GTalk e por ai vai...</title><content type='html'>A quem interessar possa:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.imcomponents.com/ivc.htm"&gt;http://www.imcomponents.com/ivc.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Essa veio pelo grupo de discussão do Yahoo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5201995131300775058?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5201995131300775058/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5201995131300775058' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5201995131300775058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5201995131300775058'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/componentes-para-interagir-com-msn.html' title='Componentes para interagir com MSN, GTalk e por ai vai...'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7874327833375463393</id><published>2010-03-03T16:42:00.000-03:00</published><updated>2010-03-03T16:42:02.704-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Microsoft SOL</title><content type='html'>Se você tem uma pequena empresa, ou, assim como eu, pretende abrir a sua em breve, aproveite:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoftsol.com.br/"&gt;http://www.microsoftsol.com.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7874327833375463393?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7874327833375463393/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7874327833375463393' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7874327833375463393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7874327833375463393'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/03/microsoft-sol.html' title='Microsoft SOL'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2430066626729397874</id><published>2010-02-25T10:33:00.000-03:00</published><updated>2010-02-25T10:33:33.121-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firebird'/><title type='text'>Lançamento do FireBird 2.5</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qxC8hcxCfPw/S4Z71Vr_rxI/AAAAAAAAD14/Myjasb7Vn9Y/s1600-h/mtb_horiz.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/S4Z71Vr_rxI/AAAAAAAAD14/Myjasb7Vn9Y/s320/mtb_horiz.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: Arial, sans-serif; font-size: 13px; line-height: 16px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h2 style="color: #262626; font-family: 'Myriad Pro', 'Trebuchet MS', sans-serif; font-size: 23px; line-height: 23px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: initial; outline-width: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: center;"&gt;&lt;a href="http://www.mindthebird.com/index.html"&gt;MindTheBird!&lt;/a&gt;&lt;/h2&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2430066626729397874?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2430066626729397874/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2430066626729397874' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2430066626729397874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2430066626729397874'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/02/lancamento-do-firebird-25.html' title='Lançamento do FireBird 2.5'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/S4Z71Vr_rxI/AAAAAAAAD14/Myjasb7Vn9Y/s72-c/mtb_horiz.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8148483692699430882</id><published>2010-02-23T08:55:00.001-03:00</published><updated>2011-01-19T21:19:52.800-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Registrando uma extensão de arquivo ao seu programa</title><content type='html'>Olá, caso você precise associar uma extensão de arquivo ao seu programa, use o código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TdfmCSConfigDB.RegistrarExtensao;&lt;br /&gt;var&lt;br /&gt;  _reg: TRegistry;&lt;br /&gt;begin&lt;br /&gt;  _reg := TRegistry.Create;&lt;br /&gt;  try&lt;br /&gt;    _reg.RootKey := HKEY_CLASSES_ROOT;&lt;br /&gt;    _reg.LazyWrite := False;&lt;br /&gt;    /// ////////////////////////////////////////////////////////////////////////&lt;br /&gt;    _reg.OpenKey('CSConfigDB', True);&lt;br /&gt;    _reg.WriteString('', 'Configurador de Banco do Contact Studio');&lt;br /&gt;    _reg.CloseKey;&lt;br /&gt;    /// /////////////////////////////////////////////////////////////////////////&lt;br /&gt;    _reg.OpenKey('CSConfigDB\shell\open\command', True);&lt;br /&gt;    _reg.WriteString('', ParamStr(0) + ' "%1"');&lt;br /&gt;    _reg.CloseKey;&lt;br /&gt;    /// /////////////////////////////////////////////////////////////////////////&lt;br /&gt;    _reg.OpenKey('CSConfigDB\DefaultIcon', True);&lt;br /&gt;    _reg.WriteString('', ParamStr(0) + ',0');&lt;br /&gt;    _reg.CloseKey;&lt;br /&gt;    /// /////////////////////////////////////////////////////////////////////////&lt;br /&gt;    _reg.OpenKey('.csb', True);&lt;br /&gt;    _reg.WriteString('', 'CSConfigDB');&lt;br /&gt;    _reg.CloseKey;&lt;br /&gt;&lt;br /&gt;  finally&lt;br /&gt;    FreeAndNil(_reg);&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Com isso o Windows irá usar o ícone do seu programa para representar o arquivo, como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_qxC8hcxCfPw/S4PBiT82UKI/AAAAAAAAD0Y/QCqxvQGyjpU/s1600-h/exemplo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/S4PBiT82UKI/AAAAAAAAD0Y/QCqxvQGyjpU/s320/exemplo.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;No meu caso, fizemos um editor de arquivo INI para guardar as configurações do acesso a banco de dados (SQLConnection). Portanto, ao dar dois cliques, abriu o programa:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_qxC8hcxCfPw/S4PCHxdeiAI/AAAAAAAAD0g/WC0xWQp4Tcs/s1600-h/exemplo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_qxC8hcxCfPw/S4PCHxdeiAI/AAAAAAAAD0g/WC0xWQp4Tcs/s320/exemplo.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Legal?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8148483692699430882?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8148483692699430882/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8148483692699430882' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8148483692699430882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8148483692699430882'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/02/registrando-uma-extensao-de-arquivo-ao.html' title='Registrando uma extensão de arquivo ao seu programa'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/S4PBiT82UKI/AAAAAAAAD0Y/QCqxvQGyjpU/s72-c/exemplo.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3880675859497596232</id><published>2010-02-18T18:11:00.004-02:00</published><updated>2011-01-19T21:20:30.396-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Nomeação de Thread</title><content type='html'>Quando se trabalha com programação multi-thread é bem complicado depurar.&lt;br /&gt;&lt;br /&gt;A nomeação de uma thread ajuda, como na figura abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qxC8hcxCfPw/S32kWcjMCyI/AAAAAAAADzs/vthKbCXbgxA/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/S32kWcjMCyI/AAAAAAAADzs/vthKbCXbgxA/s400/imagem.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5439684630461287202" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Essa tarefa no Delphi 2010 ficou facilitada. No método Execute da sua thread, coloque a seguinte linha de código:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TAVFinder.Execute;&lt;br /&gt;begin&lt;br /&gt;inherited;&lt;br /&gt;{$IFDEF VER210}&lt;br /&gt;Self.NameThreadForDebugging(Self.ClassName);&lt;br /&gt;{$ENDIF}&lt;br /&gt;IdentificarPID(Self.ClassName,3);&lt;br /&gt;Self.ProcessarMAP;&lt;br /&gt;_GerarLog(GetCurrentThreadId,Now,sArquivoLog,ctLOGInformation,rlHigh,14,Format('Arquivo MAP - Existe: [%s] Path: [%s] Tempo Processamento: [%s]',[BooleanToString(Self.FExiste,'SIM','NÃO'),Self.FArquivoMAP,Self.FTempoProcessamento]));&lt;br /&gt;while not (Self.Terminated) do&lt;br /&gt;begin&lt;br /&gt;Sleep(10);&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Justo?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3880675859497596232?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3880675859497596232/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3880675859497596232' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3880675859497596232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3880675859497596232'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/02/nomeacao-de-thread.html' title='Nomeação de Thread'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/S32kWcjMCyI/AAAAAAAADzs/vthKbCXbgxA/s72-c/imagem.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-539330970326501037</id><published>2010-02-08T09:17:00.002-02:00</published><updated>2010-02-08T09:22:03.024-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Tirinha super engraçada!</title><content type='html'>Galera, achei muito inteligente e engraçado demais essa tirinha.&lt;br /&gt;&lt;br /&gt;Estou compartilhando. &lt;br /&gt;&lt;br /&gt;:)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_qxC8hcxCfPw/S2_zwJES4jI/AAAAAAAADWc/v9I2x2frtx0/s1600-h/blog.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 177px; height: 400px;" src="http://4.bp.blogspot.com/_qxC8hcxCfPw/S2_zwJES4jI/AAAAAAAADWc/v9I2x2frtx0/s400/blog.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5435831283652682290" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-539330970326501037?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/539330970326501037/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=539330970326501037' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/539330970326501037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/539330970326501037'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/02/tirinha-super-engracada.html' title='Tirinha super engraçada!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qxC8hcxCfPw/S2_zwJES4jI/AAAAAAAADWc/v9I2x2frtx0/s72-c/blog.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5878394699391756986</id><published>2010-01-27T09:45:00.001-02:00</published><updated>2010-01-27T09:45:47.309-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Windows Shell feito em Delphi</title><content type='html'>Olha que bacana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/b/2010/01/25/sharpe-open-source-delphi-windows-shell-replacement.htm?nl=1"&gt;http://delphi.about.com/b/2010/01/25/sharpe-open-source-delphi-windows-shell-replacement.htm?nl=1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5878394699391756986?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5878394699391756986/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5878394699391756986' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5878394699391756986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5878394699391756986'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/windows-shell-feito-em-delphi.html' title='Windows Shell feito em Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2426708829777484960</id><published>2010-01-22T10:09:00.001-02:00</published><updated>2010-01-22T10:32:19.136-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Twitter Client em Delphi</title><content type='html'>Para você programador Delphi que gosta de twittar!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.andreanolanusse.com/blogpt/radtweet-twitter-desktop-client-desenvolvindo-em-delphi/"&gt;http://www.andreanolanusse.com/blogpt/radtweet-twitter-desktop-client-desenvolvindo-em-delphi/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2426708829777484960?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2426708829777484960/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2426708829777484960' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2426708829777484960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2426708829777484960'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/twitter-client-em-delphi.html' title='Twitter Client em Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6176002199700252362</id><published>2010-01-21T11:02:00.002-02:00</published><updated>2010-01-21T11:04:41.692-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>TIFF</title><content type='html'>Trabalhar com TIFF foi uma necessidade recorrente em uma época da minha vida.&lt;br /&gt;&lt;br /&gt;No grupo do Yahoo encontrei a indicação desta suite de componentes:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://imaginglib.sourceforge.net/"&gt;http://imaginglib.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Repare no logotipo deles. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6176002199700252362?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6176002199700252362/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6176002199700252362' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6176002199700252362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6176002199700252362'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/tiff.html' title='TIFF'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8920530916333595556</id><published>2010-01-20T09:48:00.001-02:00</published><updated>2010-01-20T09:49:53.153-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>ICQ, lembra?</title><content type='html'>&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/6iCPIUGnHQ8&amp;hl=pt_BR&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/6iCPIUGnHQ8&amp;hl=pt_BR&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Lembra?&lt;br /&gt;&lt;br /&gt;Leitura interessante:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.r7.com/querido-leitor/2010/01/19/icq/"&gt;http://blogs.r7.com/querido-leitor/2010/01/19/icq/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8920530916333595556?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8920530916333595556/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8920530916333595556' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8920530916333595556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8920530916333595556'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/icq-lembra.html' title='ICQ, lembra?'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-187334793248918909</id><published>2010-01-15T09:02:00.001-02:00</published><updated>2010-01-15T09:06:38.321-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Papel de parede e protetor de tela do Matrix</title><content type='html'>Achei bacana e compartilho com você...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://zmatrix.softonic.com.br/"&gt;http://zmatrix.softonic.com.br/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-187334793248918909?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/187334793248918909/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=187334793248918909' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/187334793248918909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/187334793248918909'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/papel-de-parede-e-protetor-de-tela-do.html' title='Papel de parede e protetor de tela do Matrix'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3589812122193723997</id><published>2010-01-12T11:38:00.003-02:00</published><updated>2011-01-19T21:21:54.619-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Como fazer ícone para seus componentes</title><content type='html'>Opa!&lt;br /&gt;&lt;br /&gt;Estou, enfim, me iniciando na arte de criar componentes. :)&lt;br /&gt;&lt;br /&gt;E esbarrei em um problema banal, que era o de criar os ícones para os meus componentes.&lt;br /&gt;&lt;br /&gt;Descrevo então, como estou procedendo:&lt;br /&gt;&lt;br /&gt;1) Criar o seu pacote;&lt;br /&gt;2) Criar um subdiretório, que conterão as imagens;&lt;br /&gt;3) Criar as imagens de 24X24 com 16 cores;&lt;br /&gt;4) Criar um arquivo &lt;span style="font-weight:bold;"&gt;RC&lt;/span&gt;, como no exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;TCOMPONENTE1 BITMAP TCOMPONENTE1.BMP&lt;br /&gt;TCOMPONENTE2 BITMAP TCOMPONENTE2.BMP&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;5) Utilizando o brcc32.exe, gerar o arquivo &lt;span style="font-weight:bold;"&gt;DCR&lt;/span&gt;, podendo-se usar a seguinte linha de comando:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;BRCC32.EXE csComponent.rc -focsComponent.dcr&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;6) Adicionar o arquivo DCR (Delphi Component Resource) como arquivo de recurso, conforme exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Unt_Install;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;Classes;&lt;br /&gt;&lt;br /&gt;procedure register;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R .\Images\csComponent.dcr}&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;Unt_CSConnector, Unt_CSRPCServer, Unt_CSQuery;&lt;br /&gt;&lt;br /&gt;procedure register;&lt;br /&gt;begin&lt;br /&gt;RegisterComponents('Exemplo',[TComponente1,TComponente2]);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Uala! Basta compilar e instalar.&lt;br /&gt;&lt;br /&gt;Funcionou?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3589812122193723997?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3589812122193723997/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3589812122193723997' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3589812122193723997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3589812122193723997'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/como-fazer-icone-para-seus-componentes.html' title='Como fazer ícone para seus componentes'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4448594819207810510</id><published>2010-01-11T16:06:00.000-02:00</published><updated>2010-01-11T16:07:19.719-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Leis de Murphy</title><content type='html'>Murphy, sempre nos acompanhando:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opaquio.blogspot.com/2007/11/leis-de-murjphy-057-235-final.html"&gt;http://opaquio.blogspot.com/2007/11/leis-de-murjphy-057-235-final.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4448594819207810510?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4448594819207810510/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4448594819207810510' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4448594819207810510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4448594819207810510'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/leis-de-murphy.html' title='Leis de Murphy'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-9164707143461848110</id><published>2010-01-08T09:55:00.000-02:00</published><updated>2010-01-08T10:56:19.005-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linkoteca'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Imagens para os seu componentes!</title><content type='html'>Opa!&lt;br /&gt;&lt;br /&gt;Feliz 2010 para você viu? :)&lt;br /&gt;&lt;br /&gt;Meu, nesses anos todos nunca fiz um componente útil, só uma brincadeira ou outra.&lt;br /&gt;&lt;br /&gt;Agora estou fazendo uma suite completa, olha que legal.&lt;br /&gt;&lt;br /&gt;Bom ai chegou o momento de colocar uma imagem, sendo necessário criar o tal arquivo DCR.&lt;br /&gt;&lt;br /&gt;Dias pesquisando - pois é, sou uma anta - e me deparo com o &lt;a href="http://www.wilsonc.demon.co.uk/d10resourceeditor.htm"&gt;XN Resource Editor&lt;/a&gt;, que facilita, finalmente a criação do arquivo DCR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-9164707143461848110?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/9164707143461848110/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=9164707143461848110' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9164707143461848110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9164707143461848110'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2010/01/imagens-para-os-seu-componentes.html' title='Imagens para os seu componentes!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-9212028289946340743</id><published>2009-12-30T10:29:00.002-02:00</published><updated>2009-12-30T10:33:08.939-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Resolução de uma expressão matemática</title><content type='html'>Se você precisar implementar um parser para resolver uma expressão matemática, um ótimo componente você encontra em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.delphi3000.com/articles/article_4614.asp?SK="&gt;http://www.delphi3000.com/articles/article_4614.asp?SK=&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Trata-se do TMathParser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-9212028289946340743?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/9212028289946340743/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=9212028289946340743' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9212028289946340743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9212028289946340743'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/12/resolucao-de-uma-expressao-matematica.html' title='Resolução de uma expressão matemática'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1652012074077685757</id><published>2009-12-17T13:12:00.005-02:00</published><updated>2011-04-08T10:45:59.089-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='api do windows'/><title type='text'>Thread e a Máscara de Afinidade</title><content type='html'>Que perrengue!&lt;br /&gt;&lt;br /&gt;Estou tentando melhorar um processo que consome muita CPU. E por estar em um ambiente multi processado optei por direcionar a thread gulosa via &lt;span style="font-weight:bold;"&gt;SetThreadAffinityMask&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A principio o Windows se encarrega de direcionar o uso do processador para aquel que estiver mais ocioso naquele momento. &lt;br /&gt;&lt;br /&gt;Em um servidor com 8 processadores, funciona assim:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;00000001 = 1   = Processador nº1 (Concentra no 1º processador)&lt;br /&gt;00000010 = 2   = Processador nº2 (Concentra no 2º processador)&lt;br /&gt;00000011 = 3   = Processador nº1 e nº2 (Balanceia entre o 1º e o 2º)&lt;br /&gt;00000100 = 4   = Processador nº4 (Concentra no 4º processador)&lt;br /&gt;00000101 = 5   = Processador nº1 e nº3 (Balanceia entre o 1º e o 3º)&lt;br /&gt;...&lt;br /&gt;11111111 = 255 = Balanceia entre os 8 processadores&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ou seja, cada bit ligado representa o processador que será usado. Mas usa-se a representação decimal no momento de passar para a função.&lt;br /&gt;&lt;br /&gt;Já a função &lt;span style="font-weight:bold;"&gt;SetProcessAffinityMask&lt;/span&gt; define a máscara de afinidade do processo, sendo que as threads herdam esta mascara.&lt;br /&gt;&lt;br /&gt;Existe também a função &lt;span style="font-weight:bold;"&gt;SetThreadIdealProcessor&lt;/span&gt;, que indica ao Windows qual o processador preferido para aquela thread, e o Windows irá dar "preferência" a esta thread.&lt;br /&gt;&lt;br /&gt;Uma função interessante foi a &lt;span style="font-weight:bold;"&gt;SetPriorityClass&lt;/span&gt;, que permite baixar ou aumentar a prioridade de um processo. O correlato para a thread é a &lt;span style="font-weight:bold;"&gt;SetThreadPriority&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Função que retorna o processador que está sendo usado no momento:&lt;br /&gt;(Só funciona do Vista para frente e Server 2003 para frente)&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;interface&lt;br /&gt;&lt;br /&gt;function GetCurrentProcessorNumber: DWORD; stdcall;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;function GetCurrentProcessorNumber; external kernel32 name 'GetCurrentProcessorNumber';&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms683181(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms683181(VS.85).aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1652012074077685757?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1652012074077685757/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1652012074077685757' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1652012074077685757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1652012074077685757'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/12/thread-e-mascara-de-afinidade.html' title='Thread e a Máscara de Afinidade'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1388486879464382555</id><published>2009-12-09T15:37:00.000-02:00</published><updated>2009-12-09T15:38:22.687-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='retro'/><title type='text'>Delphi 1</title><content type='html'>Achei uma apostila de Delphi 1!&lt;br /&gt;&lt;br /&gt;Olhem que legal:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B2-0qFgCBKnjMDlkYjgwNDktYWU2MC00OWRkLWFiMGQtYmUwYmMzNGJiZWRm&amp;hl=pt_BR"&gt;http://docs.google.com/fileview?id=0B2-0qFgCBKnjMDlkYjgwNDktYWU2MC00OWRkLWFiMGQtYmUwYmMzNGJiZWRm&amp;hl=pt_BR&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1388486879464382555?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1388486879464382555/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1388486879464382555' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1388486879464382555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1388486879464382555'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/12/delphi-1.html' title='Delphi 1'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3945920158769960867</id><published>2009-12-07T19:10:00.003-02:00</published><updated>2009-12-07T19:26:30.233-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Usando Variáveis de Ambiente no Delphi</title><content type='html'>Amigos, aqui na empresa achamos uma boa solução para padronizar a saída dos executáveis e das DCUs dos projetos.&lt;br /&gt;&lt;br /&gt;O problema reside no fato de usarmos o SVN para gerenciar os projetos. Gostaríamos que o exe e os DCU ficassem de fora dos diretórios de trabalho.&lt;br /&gt;&lt;br /&gt;A solução foi utilizar as Variáveis de Ambiente do Windows, característica pouco explorada pelos programadores.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://technet.microsoft.com/pt-br/library/cc668471.aspx"&gt;http://technet.microsoft.com/pt-br/library/cc668471.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Portanto, criamos uma variável de ambiente, &lt;span style="font-weight:bold;"&gt;DIRBINCS&lt;/span&gt;, e no Delphi, em Project\Options\Delphi Compiler e configure os diretórios conforme o exemplo abaixo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qxC8hcxCfPw/Sx1yuElZWPI/AAAAAAAACds/Q3kXauTLGUo/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 234px;" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/Sx1yuElZWPI/AAAAAAAACds/Q3kXauTLGUo/s400/imagem.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5412608462999345394" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Observe que com a opção Default marcada, as configurações serão usadas nos projetos futuros.&lt;br /&gt;&lt;br /&gt;Forte abraço,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3945920158769960867?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3945920158769960867/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3945920158769960867' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3945920158769960867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3945920158769960867'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/12/usando-variaveis-de-ambiente-no-delphi.html' title='Usando Variáveis de Ambiente no Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/Sx1yuElZWPI/AAAAAAAACds/Q3kXauTLGUo/s72-c/imagem.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4977043545021528452</id><published>2009-11-27T16:35:00.004-02:00</published><updated>2011-04-08T10:46:57.491-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Cuidados ao Suspender uma Thread</title><content type='html'>Cuidado ao suspender uma Thread!&lt;br /&gt;&lt;br /&gt;Em especial se houver seções críticas entre as threads. Ao suspender uma thread que esteja dentro de uma seção crítica, essa seção crítica não será liberada!&lt;br /&gt;&lt;br /&gt;Bolei um exemplo sobre o assunto, segue abaixo o pas e o dfm.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;unit Unt_Principal;&lt;br /&gt;&lt;br /&gt;interface&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,&lt;br /&gt;Dialogs, SyncObjs, Buttons, StdCtrls;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;TMinhaThread = class(TThread)&lt;br /&gt;private&lt;br /&gt;FNome : string;&lt;br /&gt;FLog  : string;&lt;br /&gt;protected&lt;br /&gt;procedure QuandoTerminar(Sender: TObject);&lt;br /&gt;public&lt;br /&gt;constructor Create(psNome: string); reintroduce;&lt;br /&gt;procedure Execute; override;&lt;br /&gt;procedure GerarLog(psLog: string);&lt;br /&gt;procedure GerarLogSincronizado;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;TfPrincipal = class(TForm)&lt;br /&gt;btnA: TButton;&lt;br /&gt;btnB: TBitBtn;&lt;br /&gt;btnSuspendA: TButton;&lt;br /&gt;btnSuspendB: TBitBtn;&lt;br /&gt;mmo1: TMemo;&lt;br /&gt;btnTerminateA: TButton;&lt;br /&gt;btnTerminateB: TBitBtn;&lt;br /&gt;btnLiberarSC: TBitBtn;&lt;br /&gt;procedure btnAClick(Sender: TObject);&lt;br /&gt;procedure btnBClick(Sender: TObject);&lt;br /&gt;procedure FormCreate(Sender: TObject);&lt;br /&gt;procedure btnSuspendAClick(Sender: TObject);&lt;br /&gt;procedure btnSuspendBClick(Sender: TObject);&lt;br /&gt;procedure btnTerminateAClick(Sender: TObject);&lt;br /&gt;procedure btnTerminateBClick(Sender: TObject);&lt;br /&gt;procedure btnLiberarSCClick(Sender: TObject);&lt;br /&gt;private&lt;br /&gt;{ Private declarations }&lt;br /&gt;public&lt;br /&gt;{ Public declarations }&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;fPrincipal   : TfPrincipal;&lt;br /&gt;ThreadA      : TMinhaThread;&lt;br /&gt;ThreadB      : TMinhaThread;&lt;br /&gt;SecaoCritica : TCriticalSection;&lt;br /&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R *.dfm}&lt;br /&gt;&lt;br /&gt;{ TMinhaThread }&lt;br /&gt;&lt;br /&gt;constructor TMinhaThread.Create(psNome: string);&lt;br /&gt;begin&lt;br /&gt;inherited Create(True);&lt;br /&gt;Self.FNome := psNome;&lt;br /&gt;Self.OnTerminate := Self.QuandoTerminar;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TMinhaThread.Execute;&lt;br /&gt;begin&lt;br /&gt;inherited;&lt;br /&gt;try&lt;br /&gt;while not (Self.Terminated) do&lt;br /&gt;begin&lt;br /&gt;Sleep(10);&lt;br /&gt;Self.GerarLog(Format('%s vai entrar na seção critica',[Self.FNome]));&lt;br /&gt;SecaoCritica.Enter;&lt;br /&gt;Self.GerarLog(Format('%s entrou na seção critica',[Self.FNome]));&lt;br /&gt;while not (Self.Terminated) do&lt;br /&gt;begin&lt;br /&gt;Sleep(10);&lt;br /&gt;Application.ProcessMessages;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;finally&lt;br /&gt;Self.GerarLog(Format('%s vai sair da seção critica',[Self.FNome]));&lt;br /&gt;SecaoCritica.Release;&lt;br /&gt;Self.GerarLog(Format('%s saiu da seção critica',[Self.FNome]));&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TMinhaThread.GerarLog(psLog: string);&lt;br /&gt;begin&lt;br /&gt;Self.FLog := psLog;&lt;br /&gt;Self.Synchronize(Self.GerarLogSincronizado);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TMinhaThread.GerarLogSincronizado;&lt;br /&gt;begin&lt;br /&gt;fPrincipal.mmo1.Lines.Add(Self.FLog);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TMinhaThread.QuandoTerminar(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;Self.GerarLog(Format('%s terminando',[Self.FNome]));&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnAClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadA.Start;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnBClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadB.Start;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnLiberarSCClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;SecaoCritica.Release;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnSuspendAClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadA.Suspend;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnSuspendBClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadB.Suspend;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnTerminateAClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadA.Terminate;&lt;br /&gt;if not (ThreadA.Suspended) then&lt;br /&gt;ThreadA.WaitFor;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.btnTerminateBClick(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadB.Terminate;&lt;br /&gt;if not (ThreadB.Suspended) then&lt;br /&gt;ThreadB.WaitFor;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TfPrincipal.FormCreate(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;ThreadA := TMinhaThread.Create('A');&lt;br /&gt;ThreadB := TMinhaThread.Create('B');&lt;br /&gt;SecaoCritica := TCriticalSection.Create;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;object fPrincipal: TfPrincipal&lt;br /&gt;Left = 0&lt;br /&gt;Top = 0&lt;br /&gt;Caption = 'Prova de Conceito'&lt;br /&gt;ClientHeight = 217&lt;br /&gt;ClientWidth = 589&lt;br /&gt;Color = clBtnFace&lt;br /&gt;Font.Charset = DEFAULT_CHARSET&lt;br /&gt;Font.Color = clWindowText&lt;br /&gt;Font.Height = -11&lt;br /&gt;Font.Name = 'Tahoma'&lt;br /&gt;Font.Style = []&lt;br /&gt;OldCreateOrder = False&lt;br /&gt;OnCreate = FormCreate&lt;br /&gt;PixelsPerInch = 96&lt;br /&gt;TextHeight = 13&lt;br /&gt;object btnA: TButton&lt;br /&gt;Left = 8&lt;br /&gt;Top = 8&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Thread A'&lt;br /&gt;TabOrder = 0&lt;br /&gt;OnClick = btnAClick&lt;br /&gt;end&lt;br /&gt;object btnB: TBitBtn&lt;br /&gt;Left = 8&lt;br /&gt;Top = 55&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Thread B'&lt;br /&gt;DoubleBuffered = True&lt;br /&gt;ParentDoubleBuffered = False&lt;br /&gt;TabOrder = 1&lt;br /&gt;OnClick = btnBClick&lt;br /&gt;end&lt;br /&gt;object btnSuspendA: TButton&lt;br /&gt;Left = 89&lt;br /&gt;Top = 8&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Suspend'&lt;br /&gt;TabOrder = 2&lt;br /&gt;OnClick = btnSuspendAClick&lt;br /&gt;end&lt;br /&gt;object btnSuspendB: TBitBtn&lt;br /&gt;Left = 89&lt;br /&gt;Top = 55&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Suspend'&lt;br /&gt;DoubleBuffered = True&lt;br /&gt;ParentDoubleBuffered = False&lt;br /&gt;TabOrder = 3&lt;br /&gt;OnClick = btnSuspendBClick&lt;br /&gt;end&lt;br /&gt;object mmo1: TMemo&lt;br /&gt;Left = 260&lt;br /&gt;Top = 8&lt;br /&gt;Width = 321&lt;br /&gt;Height = 185&lt;br /&gt;Lines.Strings = (&lt;br /&gt;'mmo1')&lt;br /&gt;TabOrder = 4&lt;br /&gt;end&lt;br /&gt;object btnTerminateA: TButton&lt;br /&gt;Left = 170&lt;br /&gt;Top = 8&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Terminate'&lt;br /&gt;TabOrder = 5&lt;br /&gt;OnClick = btnTerminateAClick&lt;br /&gt;end&lt;br /&gt;object btnTerminateB: TBitBtn&lt;br /&gt;Left = 170&lt;br /&gt;Top = 55&lt;br /&gt;Width = 75&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Terminate'&lt;br /&gt;DoubleBuffered = True&lt;br /&gt;ParentDoubleBuffered = False&lt;br /&gt;TabOrder = 6&lt;br /&gt;OnClick = btnTerminateBClick&lt;br /&gt;end&lt;br /&gt;object btnLiberarSC: TBitBtn&lt;br /&gt;Left = 8&lt;br /&gt;Top = 104&lt;br /&gt;Width = 237&lt;br /&gt;Height = 25&lt;br /&gt;Caption = 'Liberar SC'&lt;br /&gt;DoubleBuffered = True&lt;br /&gt;ParentDoubleBuffered = False&lt;br /&gt;TabOrder = 7&lt;br /&gt;OnClick = btnLiberarSCClick&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4977043545021528452?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4977043545021528452/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4977043545021528452' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4977043545021528452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4977043545021528452'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/cuidados-ao-suspender-uma-thread.html' title='Cuidados ao Suspender uma Thread'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1918027035246945091</id><published>2009-11-27T10:10:00.002-02:00</published><updated>2010-03-22T09:12:51.551-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='exception'/><title type='text'>Call Stack</title><content type='html'>Um ótimo artigo sobre o assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.clevercomponents.com/articles/article012/exwatcher.asp"&gt;http://www.clevercomponents.com/articles/article012/exwatcher.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1918027035246945091?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1918027035246945091/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1918027035246945091' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1918027035246945091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1918027035246945091'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/call-stack.html' title='Call Stack'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6425611055320612592</id><published>2009-11-26T19:47:00.001-02:00</published><updated>2009-11-26T19:49:53.673-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Hora Legal Brasileira</title><content type='html'>Olha que site bacana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pcdsh01.on.br/"&gt;http://pcdsh01.on.br/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Entenda de uma vez por todas esse lance de horário de verão bem como os fusos horários do Brasil!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6425611055320612592?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6425611055320612592/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6425611055320612592' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6425611055320612592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6425611055320612592'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/hora-legal-brasileira.html' title='Hora Legal Brasileira'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6195230399004593541</id><published>2009-11-25T11:50:00.002-02:00</published><updated>2009-11-25T11:54:57.952-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='decision cube'/><title type='text'>Decision Cube</title><content type='html'>Compartilho, aqui, alguns links interessantes sobre o assunto:&lt;br /&gt; &lt;br /&gt;Versão 2.1 no SourceForge:&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/fxds"&gt;http://sourceforge.net/projects/fxds&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Como usar DC sem BDE:&lt;br /&gt;&lt;a href="http://delphi.about.com/gi/dynamic/offsite.htm?zi=1/XJ/Ya&amp;sdn=delphi&amp;cdn=compute&amp;tm=66&amp;gps=154_1706_1148_704&amp;f=00&amp;su=p284.8.150.ip_&amp;tt=14&amp;bt=0&amp;bts=0&amp;zu=http%3A//community.borland.com/article/0%2C1410%2C27848%2C00.html"&gt;http://delphi.about.com/gi/dynamic/offsite.htm?zi=1/XJ/Ya&amp;sdn=delphi&amp;cdn=compute&amp;tm=66&amp;gps=154_1706_1148_704&amp;f=00&amp;su=p284.8.150.ip_&amp;tt=14&amp;bt=0&amp;bts=0&amp;zu=http%3A//community.borland.com/article/0%2C1410%2C27848%2C00.html&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Como exportar para Excel:&lt;br /&gt;&lt;a href="http://www.joaomorais.com.br/pascal/push.php?download=43128523"&gt;http://www.joaomorais.com.br/pascal/push.php?download=43128523&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Reportagem:&lt;br /&gt;&lt;a href="http://www.multicomp.com.br/Cont_Default.aspx?idnews=79"&gt;http://www.multicomp.com.br/Cont_Default.aspx?idnews=79&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;Reportagem:&lt;br /&gt;&lt;a href="http://www.inf.furb.br/~zamba/artigos/Olap_Template.pdf"&gt;http://www.inf.furb.br/~zamba/artigos/Olap_Template.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6195230399004593541?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6195230399004593541/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6195230399004593541' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6195230399004593541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6195230399004593541'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/decision-cube.html' title='Decision Cube'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2778067035739037446</id><published>2009-11-23T10:35:00.008-02:00</published><updated>2011-04-08T10:48:27.500-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>TThread - Melhores práticas</title><content type='html'>Título alternativo: &lt;em&gt;Três Pratos de Thread para Três Tigres Tristes&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Aqui vai alguns conceitos sobre a classe TThread, que compartilho contigo:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Resume ou Start:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;O método Resume coloca a thread para funcionar, ou seja, executa o método Execute.&lt;br /&gt;No Delphi 2010 Resume está deprecated, sendo usado o Start.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Suspend:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;O método Suspend suspende a thread do ponto em que estiver.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Terminate:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;O método Terminate seta a proriedade Terminaded para True, apenas isso... Dentro do Execute é que está o segredo... &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WaitFor:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A função WaitFor é que efetivamente aguarda o término da thread. Mas cuidado! Para que funcione corretamente temos que tomar três cuidados, do contrário você esperará eternamente...&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Terminated&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;No Execute, tome cuidado com a variável Terminated, sempre vericando em pontos estratégicos. O exemplo básico é o que segue abaixo... Friso: &lt;u&gt;EXEMPLO BÁSICO&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TMinhaThread.Execute;&lt;br /&gt;begin&lt;br /&gt;try&lt;br /&gt;while not (Self.Terminated) do&lt;br /&gt;begin&lt;br /&gt;Sleep(10);&lt;br /&gt;Application.ProcessMessages;&lt;br /&gt;{...}&lt;br /&gt;{...}&lt;br /&gt;&lt;br /&gt;//Ponto estratégico para verificação...&lt;br /&gt;if (Self.Terminated) then&lt;br /&gt;Abort;&lt;br /&gt;&lt;br /&gt;{...}&lt;br /&gt;{...}&lt;br /&gt;end;&lt;br /&gt;except&lt;br /&gt;on E: Exception do&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Evento OnTerminate&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Você deve setar o evento OnTerminate, senão o WaitFor não retorna...&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Cuidado com a thread suspensa!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Se a thread estiver suspensa, o WaitFor também não retorna. O código mais correto para terminar uma thread é o que segue abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm1.Button3Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;cRet : Cardinal;&lt;br /&gt;begin&lt;br /&gt;//Manda Terminar....&lt;br /&gt;Self.FThread.Terminate;&lt;br /&gt;//Verifica se a thread não esta suspensa...&lt;br /&gt;if not (Self.FThread.Suspended) then&lt;br /&gt;begin&lt;br /&gt;//Aguarda o término da Thread &lt;br /&gt;cRet := Self.FThread.WaitFor;&lt;br /&gt;Log(Format('Retornou: [%d]',[cRet]));&lt;br /&gt;end else&lt;br /&gt;begin&lt;br /&gt;Log('Esta suspenso');&lt;br /&gt;end;&lt;br /&gt;//Livra a instância...&lt;br /&gt;Self.FThread.Free;&lt;br /&gt;Self.FThread := nil;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ReturnValue&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A função WaitFor retorna um valor Integer... e da onde vem este valor? Da propriedade ReturnValue, que poderá ser setada no Execute. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Abort&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Abort, como sabido, gera uma exceção do tipo EAbort, e na minha opnião é a maneira mais apropriada de terminar a execução de um Execute. Veja no trecho de código acima.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Syncronize&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Syncronize executa um método pela thread principal. Na minha opnião só é válido em aplicativos GUI (com interface gráfica). Fora desta situação, dê preferência para TCriticalSection.&lt;br /&gt;&lt;br /&gt;Por ora é isso. Existem outros aspectos mas acho esse os mais importantes. &lt;br /&gt;&lt;br /&gt;Aproveito para compartilhar um PDF que a anos me ajuda a enfrentar as treads:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B2-0qFgCBKnjNmJhZjg2NDktYjIyOS00ODA0LTk0MjgtZGFhZDJiYzhkODJm&amp;hl=pt_BR"&gt;http://docs.google.com/fileview?id=0B2-0qFgCBKnjNmJhZjg2NDktYjIyOS00ODA0LTk0MjgtZGFhZDJiYzhkODJm&amp;hl=pt_BR&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Uma outra leitura interessante sobre o assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://balaiotecnologico.blogspot.com/search?q=thread"&gt;http://balaiotecnologico.blogspot.com/search?q=thread&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2778067035739037446?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2778067035739037446/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2778067035739037446' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2778067035739037446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2778067035739037446'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/tthread-melhores-praticas.html' title='TThread - Melhores práticas'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6383903006028389301</id><published>2009-11-19T15:51:00.004-02:00</published><updated>2009-11-19T15:56:29.150-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cpl'/><title type='text'>Como debugar um applet para o Painel de Controle (CPL)</title><content type='html'>Essa foi meu "amiguinho" Wagner que ensinou! :)&lt;br /&gt;&lt;br /&gt;Vá em Run-&gt;Parameters&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qxC8hcxCfPw/SwWGmEE5mKI/AAAAAAAACdk/5VBTgXbmLJ0/s1600/cpl.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/SwWGmEE5mKI/AAAAAAAACdk/5VBTgXbmLJ0/s400/cpl.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5405874916215593122" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6383903006028389301?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6383903006028389301/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6383903006028389301' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6383903006028389301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6383903006028389301'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/como-debugar-um-applet-para-o-painel-de.html' title='Como debugar um applet para o Painel de Controle (CPL)'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_qxC8hcxCfPw/SwWGmEE5mKI/AAAAAAAACdk/5VBTgXbmLJ0/s72-c/cpl.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3980391467383353576</id><published>2009-11-18T15:32:00.005-02:00</published><updated>2009-12-15T11:45:31.749-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><category scheme='http://www.blogger.com/atom/ns#' term='api do windows'/><title type='text'>Arquivo mapeado e Serviço do Windows</title><content type='html'>Enfim! Valeu a pena não ter desistido! :)&lt;br /&gt;&lt;br /&gt;Vamos lá:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Problema:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Criar um arquivo mapeado entre um Serviço do Windows em uma aplicação GUI. O objetivo é acompanhar em tempo real o tamanho de uma pilha de objetos.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solução:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para criar um arquivo mapeado:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;procedure TGatewayCTI.CriarArquivoCompartilhado;&lt;br /&gt;var&lt;br /&gt;cErro : Cardinal;&lt;br /&gt;begin&lt;br /&gt;  Self.FMappingFile := CreateFileMapping($FFFFFFFF,nil,PAGE_READWRITE,0,100,PChar('Session\FILA_GATEWAY'));&lt;br /&gt;  if (Self.FMappingFile &lt;&gt; 0) then&lt;br /&gt;  begin&lt;br /&gt;    cErro := GetLastError;&lt;br /&gt;    if (cErro = ERROR_ALREADY_EXISTS) then&lt;br /&gt;    begin&lt;br /&gt;      CloseHandle(Self.FMappingFile);&lt;br /&gt;      Self.FMappingFile := OpenFileMapping(FILE_MAP_ALL_ACCESS,False,PChar('Session\FILA_GATEWAY'));&lt;br /&gt;      GerarLogTipoInformation(True,84734903,[' &gt; Sucesso ao abrir arquivo mapeado!'])&lt;br /&gt;    end else&lt;br /&gt;    begin&lt;br /&gt;      GerarLogTipoInformation(True,894733,[' &gt; Sucesso ao criar arquivo mapeado!']);&lt;br /&gt;    end;&lt;br /&gt;  end else&lt;br /&gt;  begin&lt;br /&gt;    GerarLogTipoErro(True,49874309,[Format(' &gt; Erro ao criar arquivo mapeado: [%d - %s]',[cErro,SysErrorMessage(cErro)])]);&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para gravar um valor:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;procedure TGatewayCTI.AtualizarQuantidade(piIncremento: Integer);&lt;br /&gt;var&lt;br /&gt;Ptr: PChar;&lt;br /&gt;begin&lt;br /&gt;  try&lt;br /&gt;    if (Self.FMappingFile &lt;&gt; 0) then&lt;br /&gt;    begin&lt;br /&gt;      Self.FCountQueue := Self.FCountQueue + piIncremento;&lt;br /&gt;      if (piIncremento &lt; 0) then&lt;br /&gt;      begin&lt;br /&gt;        Self.FCountProcessed := Self.FCountProcessed + Abs(piIncremento); &lt;br /&gt;      end;&lt;br /&gt;&lt;br /&gt;      Ptr := MapViewOfFile(Self.FMappingFile,FILE_MAP_WRITE,0,0,0);&lt;br /&gt;      StrPLCopy(Ptr,Format('Na pilha: [%d] - Processadas: [%d]',[Self.FCountQueue,Self.FCountProcessed]),100);&lt;br /&gt;      UnmapViewOfFile(Ptr);&lt;br /&gt;    end;&lt;br /&gt;  except&lt;br /&gt;    on E: Exception do&lt;br /&gt;      GerarLogTipoException(58679343,E,'Arquivo mapeado');&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para ler o valor:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;procedure TfPrincipal.AtualizarValor;&lt;br /&gt;var&lt;br /&gt;Ptr : PChar;&lt;br /&gt;begin&lt;br /&gt;  if (Self.FMappingFile &lt;&gt; 0) then&lt;br /&gt;  begin&lt;br /&gt;    Ptr := MapViewOfFile(Self.FMappingFile,FILE_MAP_READ,0,0,0);&lt;br /&gt;    Self.pCount.Caption := Format('%s',[Ptr]);&lt;br /&gt;    UnmapViewOfFile(Ptr);&lt;br /&gt;    Application.ProcessMessages;&lt;br /&gt;  end else&lt;br /&gt;  begin&lt;br /&gt;    Self.pCount.Caption := 'Arquivo mapeado não disponivel';&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Importantíssimo:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para compartilhar o arquivo entre um serviço e um aplicativo GUI, coloque a palavra 'Session\' antes do nome do arquivo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3980391467383353576?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3980391467383353576/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3980391467383353576' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3980391467383353576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3980391467383353576'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/arquivo-mapeado-e-servico-do-windows.html' title='Arquivo mapeado e Serviço do Windows'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4798272518289007495</id><published>2009-11-06T14:06:00.001-02:00</published><updated>2009-11-06T14:08:11.396-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eventos'/><title type='text'>Delphi Conference 2009</title><content type='html'>Nos vemos lá?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://latam.embarcadero.com/br/delphiconference/"&gt;http://latam.embarcadero.com/br/delphiconference/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4798272518289007495?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4798272518289007495/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4798272518289007495' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4798272518289007495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4798272518289007495'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/delphi-conference-2009.html' title='Delphi Conference 2009'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3858022835314048959</id><published>2009-11-03T12:25:00.003-02:00</published><updated>2009-11-03T12:29:40.194-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='api do windows'/><title type='text'>Faça seu próprio temporizador no Delphi</title><content type='html'>Se você, assim como eu, não é muito fã do TTimer e acha que pode fazer melhor, dá uma olhada neste post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://projects.pro.br/gsaraiva/2008/05/delphi-settimer/"&gt;http://projects.pro.br/gsaraiva/2008/05/delphi-settimer/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Acredito que combinado com Thread, fica muito bom.&lt;br /&gt;&lt;br /&gt;Atente para a diretiva &lt;strong&gt;stdcall&lt;/strong&gt; nos lugares corretos.&lt;br /&gt;&lt;br /&gt;Perdi meu fim de semana prolongado por falta disso. No Windows 2008 não rola.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3858022835314048959?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3858022835314048959/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3858022835314048959' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3858022835314048959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3858022835314048959'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/11/faca-seu-proprio-temporizador-no-delphi.html' title='Faça seu próprio temporizador no Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8231496733318203076</id><published>2009-10-21T13:31:00.005-02:00</published><updated>2010-03-16T09:57:29.412-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api do windows'/><title type='text'>Obter número de Threads de um processo</title><content type='html'>Olá. Graças à generosidade do Luís Gustavo Fabbro, que mantém um blog muito interessante, a &lt;a href="http://balaiotecnologico.blogspot.com/"&gt;Balaio Tecnológico&lt;/a&gt;, posto aqui o código necessário para obter a quantidade de thread de um processo, pelo PID dele:&lt;br /&gt;&lt;br /&gt;&lt;pre class="delphi" name="code"&gt;uses TlHelp32;&lt;br /&gt;&lt;br /&gt;{*&lt;br /&gt;Levanta a quantidade de Threads de um processo&lt;br /&gt;&lt;br /&gt;@param piPID Identificador do processo em questão&lt;br /&gt;}&lt;br /&gt;function TGInfoWinService.GetThreadCount(piPID: Cardinal): Boolean;&lt;br /&gt;var&lt;br /&gt;hSnapShot   : THandle;&lt;br /&gt;rThreadInfo : TThreadEntry32;&lt;br /&gt;bNext       : Boolean;&lt;br /&gt;iThreadCount: Integer;&lt;br /&gt;begin&lt;br /&gt;Result := False;&lt;br /&gt;iThreadCount := 0;&lt;br /&gt;try&lt;br /&gt;try&lt;br /&gt;hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);&lt;br /&gt;if (hSnapShot = THandle(-1)) then&lt;br /&gt;raise EGWinService.Create('Erro ao levantar ThreadCount',39248209);&lt;br /&gt;rThreadInfo.dwSize := SizeOf(rThreadInfo);&lt;br /&gt;bNext := Thread32First(hSnapShot,rThreadInfo);&lt;br /&gt;while (bNext) do&lt;br /&gt;begin&lt;br /&gt;if (rThreadInfo.th32OwnerProcessID = piPID) then&lt;br /&gt;Inc(iThreadCount);&lt;br /&gt;bNext := Thread32Next(hSnapShot,rThreadInfo);&lt;br /&gt;end;&lt;br /&gt;Result := True;&lt;br /&gt;except&lt;br /&gt;on E: Exception do&lt;br /&gt;GerarLogTipoException(56565654,E,'Unt_WinService');&lt;br /&gt;end;&lt;br /&gt;finally&lt;br /&gt;CloseHandle(hSnapShot);&lt;br /&gt;if Result then&lt;br /&gt;Self.FThreadCount := iThreadCount&lt;br /&gt;else&lt;br /&gt;Self.FThreadCount := -1;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Mais informações em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://balaiotecnologico.blogspot.com/2009/10/obtendo-informacoes-sobre-as-threads-de.html"&gt;http://balaiotecnologico.blogspot.com/2009/10/obtendo-informacoes-sobre-as-threads-de.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8231496733318203076?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8231496733318203076/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8231496733318203076' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8231496733318203076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8231496733318203076'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/obter-numero-de-threads-de-um-processo.html' title='Obter número de Threads de um processo'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-374016407865688532</id><published>2009-10-16T14:17:00.004-03:00</published><updated>2011-08-19T10:14:03.838-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Eu uso GOTO sim, você me perdoa?</title><content type='html'>Estava lendo uma matéria muito interessante sobre o uso do &lt;span style="font-weight:bold;"&gt;goto&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/od/adptips2006/qt/goto_label.htm"&gt;http://delphi.about.com/od/adptips2006/qt/goto_label.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quando comecei a programar lembro que uma das primeiras coisas que aprendi foi:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;GOTO&lt;/span&gt; não deve ser usado!&lt;br /&gt;&lt;br /&gt;Simples assim. E eu simplesmente absorvi este mandamento, sem questionar. Isso me pareceu um tabu da programação, sei lá.&lt;br /&gt;&lt;br /&gt;É óbvio que o uso indiscriminado do &lt;span style="font-weight:bold;"&gt;goto&lt;/span&gt; torna o código ilegível e concordo que ele deve ser evitado. Afinal &lt;span style="font-weight:bold;"&gt;goto &lt;/span&gt;é um salto de um ponto do programa a outro.&lt;br /&gt;&lt;br /&gt;Mas tempo passou. E com o amadurecimento e quebra de tabus descobri uma situação onde o goto é últil. IFs aninhados. Não sei se por dislexia ou algo parecido eu simplesmente não entendo o código abaixo...&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure QualquerCoisa;&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;if (CondiçãoA) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;end else if (CondiçãoB) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;end else if (CondiçãoC) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;end else if {...}&lt;br /&gt;{...}&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{...}&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bom, prefiro assim:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure QualquerCoisa;&lt;br /&gt;label Fim;&lt;br /&gt;begin&lt;br /&gt;if (CondiçãoA) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;goto Fim;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;if (CondiçãoB) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;goto Fim;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;if (CondiçãoC) then&lt;br /&gt;begin&lt;br /&gt;{...}&lt;br /&gt;goto Fim;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;{...}&lt;br /&gt;&lt;br /&gt;Fim:&lt;br /&gt;&lt;br /&gt;{...}&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Sacou?&lt;br /&gt;&lt;br /&gt;Mas temos que usar com moderação.&lt;br /&gt;&lt;br /&gt;:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-374016407865688532?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/374016407865688532/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=374016407865688532' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/374016407865688532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/374016407865688532'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/eu-uso-goto-sim-voce-me-perdoa.html' title='Eu uso GOTO sim, você me perdoa?'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2684204152332831835</id><published>2009-10-15T11:12:00.003-03:00</published><updated>2009-10-15T12:47:19.653-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><title type='text'>Tutorial de SQL</title><content type='html'>Essa foi o &lt;a href="http://silvioclecio.blogspot.com/"&gt;Silvio Clécio&lt;/a&gt; que mandou no &lt;a href="http://br.groups.yahoo.com/group/delphi-br/"&gt;fórum de discussão&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.1keydata.com/sql/sql.html"&gt;SQL Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bons estudos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2684204152332831835?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2684204152332831835/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2684204152332831835' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2684204152332831835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2684204152332831835'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/tutorial-de-sql.html' title='Tutorial de SQL'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2822742626184367267</id><published>2009-10-07T16:58:00.001-03:00</published><updated>2009-10-07T17:00:36.053-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Delphi I/O Errors</title><content type='html'>Finalmente! Uma listagem daqueles códigos de erro de I/O...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Aíiiiiii sim, hein?! :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://erikmartin.com/pro/ioerrors.html"&gt;http://erikmartin.com/pro/ioerrors.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2822742626184367267?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2822742626184367267/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2822742626184367267' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2822742626184367267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2822742626184367267'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/delphi-io-errors.html' title='Delphi I/O Errors'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2167102130612709962</id><published>2009-10-07T12:51:00.002-03:00</published><updated>2009-10-07T12:53:30.324-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='revistas'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Finamente! Blaise Pascal Magazine em pt-br!!!!!</title><content type='html'>Amigos! Recomendo a Blaise Pascal como ótima fonte de conhecimento em Delphi e correlatos:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.blaisepascal.eu/index.php?actie=portal_pt"&gt;http://www.blaisepascal.eu/index.php?actie=portal_pt&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2167102130612709962?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2167102130612709962/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2167102130612709962' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2167102130612709962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2167102130612709962'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/finamente-blaise-pascal-magazine-em-pt.html' title='Finamente! Blaise Pascal Magazine em pt-br!!!!!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2069814845297878217</id><published>2009-10-06T17:24:00.001-03:00</published><updated>2012-01-24T10:01:38.854-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linkoteca'/><title type='text'>Pacotes compatíveis com o Delphi 2010</title><content type='html'>Fonte oficial:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://edn.embarcadero.com/article/39864"&gt;http://edn.embarcadero.com/article/39864&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2069814845297878217?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2069814845297878217/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2069814845297878217' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2069814845297878217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2069814845297878217'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/pacotes-compativeis-com-o-delphi-2010.html' title='Pacotes compatíveis com o Delphi 2010'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4912685691919147265</id><published>2009-10-01T17:30:00.001-03:00</published><updated>2009-10-01T17:32:47.057-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Delphi - a Fênix!</title><content type='html'>Olha que artigo legal, apesar do meu pessimo título:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://garotodesktop.blogspot.com/2009/09/novidades-do-delphi-2010-parte-1.html"&gt;http://garotodesktop.blogspot.com/2009/09/novidades-do-delphi-2010-parte-1.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4912685691919147265?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4912685691919147265/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4912685691919147265' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4912685691919147265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4912685691919147265'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/10/delphi-fenix.html' title='Delphi - a Fênix!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6049685648430831840</id><published>2009-09-18T13:13:00.005-03:00</published><updated>2011-12-25T23:52:44.668-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='expressão regular'/><title type='text'>TPerlRegEx - Primeiros passos</title><content type='html'>Enfim, minha primeira aplicação usando RegEx.&lt;br /&gt;&lt;br /&gt;Antes, olha que interessante a estória do &lt;a href="http://a_verdade_da_mentira.weblog.com.pt/arquivo/160786.html"&gt;Pedro Paulo Pereira Pinto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bom, vou usar esta estória como modelo.&lt;br /&gt;&lt;br /&gt;Para tanto construi o seguinte aplicativo, usando o &lt;a href="http://www.regular-expressions.info/delphi.html"&gt;TPerlRegEx&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_qxC8hcxCfPw/SrO7Mz7WdAI/AAAAAAAACck/feRS5Wdj34Q/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 299px;" src="http://3.bp.blogspot.com/_qxC8hcxCfPw/SrO7Mz7WdAI/AAAAAAAACck/feRS5Wdj34Q/s400/imagem.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382851808409842690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;O código mais importante é do botão "Analisar", veja que simples:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;procedure TForm1.Analisar;&lt;br /&gt;const&lt;br /&gt;FORMATO = 'Tamanho: [%5d] Posição: [%5d] Casamento: [%s]';&lt;br /&gt;var&lt;br /&gt;iQuant : Integer;&lt;br /&gt;begin&lt;br /&gt;iQuant := 0;&lt;br /&gt;&lt;br /&gt;//Limpando a tela de resultados&lt;br /&gt;Memo1.Clear;&lt;br /&gt;&lt;br /&gt;//Alimentando o RegEx&lt;br /&gt;Self.PerlRegEx1.RegEx   := Edit1.Text;  //Expressão&lt;br /&gt;Self.PerlRegEx1.Subject := Memo2.Text;  //Texto&lt;br /&gt;&lt;br /&gt;//Primeira busca&lt;br /&gt;if (Self.PerlRegEx1.Match) then&lt;br /&gt;begin&lt;br /&gt;Memo1.Lines.Add(Format(FORMATO,[PerlRegEx1.MatchedExpressionLength,PerlRegEx1.MatchedExpressionOffset,PerlRegEx1.MatchedExpression]));&lt;br /&gt;Inc(iQuant);&lt;br /&gt;//Demais buscas&lt;br /&gt;while (Self.PerlRegEx1.MatchAgain) do&lt;br /&gt;begin&lt;br /&gt;Memo1.Lines.Add(Format(FORMATO,[PerlRegEx1.MatchedExpressionLength,PerlRegEx1.MatchedExpressionOffset,PerlRegEx1.MatchedExpression]));&lt;br /&gt;Inc(iQuant);&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;//Fim&lt;br /&gt;Label1.Caption := Format('%d ocorrências',[iQuant]);&lt;br /&gt;Application.ProcessMessages;&lt;br /&gt;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Qual foi o desafio? &lt;em&gt;Destacar todas as palavras presentes no texto.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Veja o resultado final:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_qxC8hcxCfPw/SrO9yBnPT4I/AAAAAAAACcs/YK-HM_0UnM4/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 287px;" src="http://1.bp.blogspot.com/_qxC8hcxCfPw/SrO9yBnPT4I/AAAAAAAACcs/YK-HM_0UnM4/s400/imagem.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5382854646762000258" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6049685648430831840?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6049685648430831840/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6049685648430831840' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6049685648430831840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6049685648430831840'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/tperlregex-primeiros-passos.html' title='TPerlRegEx - Primeiros passos'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_qxC8hcxCfPw/SrO7Mz7WdAI/AAAAAAAACck/feRS5Wdj34Q/s72-c/imagem.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4024603896752973671</id><published>2009-09-17T13:38:00.003-03:00</published><updated>2009-09-18T12:05:30.422-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='expressão regular'/><title type='text'>Expressão Regular,  Agora vai!</title><content type='html'>Opa!&lt;br /&gt;&lt;br /&gt;Voltei a estudar ER, pois preciso desenvolver uma analisador de log e tal...&lt;br /&gt;&lt;br /&gt;Minha fonte inicial foi:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.aurelio.net/"&gt;http://www.aurelio.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Comprei o livro do cara e tal e agora to pegando para valer.&lt;br /&gt;&lt;br /&gt;Dai fui, obviamente, atras de uma classe Delphi, afinal não ia fazer o lance do zero...&lt;br /&gt;&lt;br /&gt;Achei o portal do ER!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.regular-expressions.info/"&gt;http://www.regular-expressions.info/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.regular-expressions.info/delphi.html"&gt;http://www.regular-expressions.info/delphi.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mais um link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.regexguru.com/"&gt;http://www.regexguru.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4024603896752973671?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4024603896752973671/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4024603896752973671' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4024603896752973671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4024603896752973671'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/expressao-regular-agora-vai.html' title='Expressão Regular,  Agora vai!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-4653124049556949694</id><published>2009-09-10T13:07:00.003-03:00</published><updated>2009-09-10T13:19:28.355-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Syntax Highligth</title><content type='html'>Continuando a saga do Syntax Highligth, estoiu fazendo algumas documentações no MS Word onde precisarei colocar alguns trechos de código.&lt;br /&gt;&lt;br /&gt;E lá vai eu incomodar o Bruno e eis que ele achou o &lt;a href="http://superdownloads.uol.com.br/download/89/adx-toys-2-wd/"&gt;ADX Toys 2 WD&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Baixei, instalei e ualá!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_qxC8hcxCfPw/SqkmyVyP-dI/AAAAAAAACcc/taJI0Pvy2sM/s1600-h/imagem.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 190px;" src="http://4.bp.blogspot.com/_qxC8hcxCfPw/SqkmyVyP-dI/AAAAAAAACcc/taJI0Pvy2sM/s400/imagem.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5379873876153989586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nao achei o resultado dos melhores mas ajuda.&lt;br /&gt;&lt;br /&gt;Sera que existe outra opcao&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-4653124049556949694?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/4653124049556949694/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=4653124049556949694' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4653124049556949694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/4653124049556949694'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/syntax-highligth.html' title='Syntax Highligth'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qxC8hcxCfPw/SqkmyVyP-dI/AAAAAAAACcc/taJI0Pvy2sM/s72-c/imagem.PNG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-17335166208686987</id><published>2009-09-09T13:37:00.021-03:00</published><updated>2009-09-09T14:23:35.834-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Como usar o Syntax Highlighter com eficácia no BlogSpot</title><content type='html'>Levei um &lt;a href="https://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=118242327313259169"&gt;puxão de orelhas&lt;/a&gt; por não ter ensinado como usar o Syntax Highlighter no BlogSpot.&lt;br /&gt;&lt;br /&gt;Então vamos lá!&lt;br /&gt;&lt;br /&gt;Acesse a área de Configuração do Layout do seu blog.&lt;br /&gt;&lt;br /&gt;Vá na aba "Editar HTML" e insira o código abaixo antes da tag /body&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='jscript'&gt;&lt;br /&gt;//ATENÇÃO! Corrija o LINKK - O BlogSpot não permitiu o uso :(&lt;br /&gt;&lt;linkk href='http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Styles/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/&gt;&lt;br /&gt;&lt;script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Scripts/shCore.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Scripts/shBrushDelphi.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Scripts/shBrushJScript.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Scripts/shBrushXml.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript" src="http://syntaxhighlighter.googlecode.com/svn-history/r57/trunk/Scripts/shBrushPlain.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;script language="javascript"&gt;&lt;br /&gt;  dp.SyntaxHighlighter.BloggerMode();&lt;br /&gt;  dp.SyntaxHighlighter.HighlightAll('code');&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para postar seus códigos, utilize mais ou menos a syntax no quadro abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='xml'&gt;&lt;br /&gt;  &lt;pre name='code' class='delphi'&gt;&lt;br /&gt;  procedure Teste;&lt;br /&gt;  begin&lt;br /&gt;    //Comentário qualquer...&lt;br /&gt;    ShowMessage('Olá Mundo!');&lt;br /&gt;  end;&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O resultado será como abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='delphi'&gt;&lt;br /&gt;procedure Teste;&lt;br /&gt;begin&lt;br /&gt;  //Comentário qualquer...&lt;br /&gt;  ShowMessage('Olá Mundo!');&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-17335166208686987?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/17335166208686987/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=17335166208686987' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/17335166208686987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/17335166208686987'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/como-usar-o-syntax-highlighter-com.html' title='Como usar o Syntax Highlighter com eficácia no BlogSpot'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1611262363659506362</id><published>2009-09-09T12:36:00.005-03:00</published><updated>2009-09-09T12:43:36.100-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diretivas'/><title type='text'>Diretiva $WARN</title><content type='html'>Opa!&lt;br /&gt;&lt;br /&gt;Eu tento eliminar todas as mensagens de Warning quando compilo meus projetos.&lt;br /&gt;&lt;br /&gt;Tento.&lt;br /&gt;&lt;br /&gt;Mas existe algumas chatas, que sempre aparecem e você pouco pode fazer, como por exemplo:&lt;br /&gt;&lt;br /&gt;[DCC Warning] Unt_RotinasLog.pas(420): W1002 Symbol 'faArchive' is specific to a platform&lt;br /&gt;&lt;br /&gt;A aviso acima aparece por conta de uma instrução como a abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;//...&lt;br /&gt;iAchou := FindFirst(NomeArquivo,faArchive,rLocalizador);&lt;br /&gt;//...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Perceba que o inicio do aviso existe um código: W1002.&lt;br /&gt;&lt;br /&gt;Bom, a maneira deste aviso não aparecer é desabilitar este warning:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;//...&lt;br /&gt;{$WARN SYMBOL_PLATFORM OFF}&lt;br /&gt;iAchou := FindFirst(NomeArquivo,faArchive,rLocalizador);&lt;br /&gt;{$WARN SYMBOL_PLATFORM OFF}&lt;br /&gt;//...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Fonte: &lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/376785/identifiers-for-delphis-warn-compiler-directive"&gt;http://stackoverflow.com/questions/376785/identifiers-for-delphis-warn-compiler-directive&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1611262363659506362?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1611262363659506362/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1611262363659506362' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1611262363659506362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1611262363659506362'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/diretiva-warn.html' title='Diretiva $WARN'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-9084810501125146339</id><published>2009-09-02T10:38:00.007-03:00</published><updated>2011-01-19T19:19:41.680-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rtti'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Tipo Enumerado para String</title><content type='html'>Olá!&lt;br /&gt;&lt;br /&gt;Eventualmente é necessário converter um tipo enumerado para string.&lt;br /&gt;&lt;br /&gt;Dai você provavelmente pensaria em um código mais ou menos assim:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;type&lt;br /&gt;TMeuTipo = (mtOpcao1, mtOpcao2)&lt;br /&gt;&lt;br /&gt;function Converter(peOpcao: TMeuTipo): string;&lt;br /&gt;begin&lt;br /&gt;case peOpcao of&lt;br /&gt;mtOpcao1 : Result := 'mtOpcao1';&lt;br /&gt;//E assim sucessivamente...&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Imagine os problemas de manutenção para falar o mínimo...&lt;br /&gt;&lt;br /&gt;Ao invés disso, use a RTTI a seu favor:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: delphi"&gt;&lt;br /&gt;uses&lt;br /&gt;TypInfo;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;TMeuTipo = (mtOpcao1, mtOpcao2)&lt;br /&gt;&lt;br /&gt;function Converter(peOpcao: TMeuTipo): string;&lt;br /&gt;begin&lt;br /&gt;//GetEnumName é a solução!&lt;br /&gt;Result := GetEnumName(TypeInfo(TMeuTipo),Ord(peOpcao));&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Um ótimo artigo sobre este assunto:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.techtricks.com/delphi/enumname.php"&gt;http://www.techtricks.com/delphi/enumname.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seja feliz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-9084810501125146339?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/9084810501125146339/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=9084810501125146339' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9084810501125146339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/9084810501125146339'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/09/tipo-enumerado-para-string.html' title='Tipo Enumerado para String'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7368653525931300102</id><published>2009-08-28T11:21:00.000-03:00</published><updated>2009-08-28T11:22:34.349-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Delphi 1</title><content type='html'>Olha que loucura!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.micropic.com.br/noronha/Informatica/PD/DELPHI/livro%20de%20delphi.pdf"&gt;http://www.micropic.com.br/noronha/Informatica/PD/DELPHI/livro%20de%20delphi.pdf&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7368653525931300102?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7368653525931300102/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7368653525931300102' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7368653525931300102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7368653525931300102'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/08/delphi-1.html' title='Delphi 1'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6297721452397417568</id><published>2009-08-17T11:21:00.000-03:00</published><updated>2009-08-17T11:22:55.423-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='socket'/><title type='text'>RFCs</title><content type='html'>Aqui é a nascente dos padrões da Internet e correlatos.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rfc-editor.org/"&gt;http://www.rfc-editor.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6297721452397417568?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6297721452397417568/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6297721452397417568' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6297721452397417568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6297721452397417568'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/08/rfcs.html' title='RFCs'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-118242327313259169</id><published>2009-08-07T13:53:00.005-03:00</published><updated>2009-08-07T16:54:06.249-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>SYNTAX HIGHLIGHTER no BlogSpot</title><content type='html'>Finalmente! De agora em diante vou postar meus exemplos de uma forma mais profissa!&lt;br /&gt;&lt;br /&gt;E como primeiro exemplo, o clássico "Olá Mundo!"&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;procedure Exemplo;&lt;br /&gt;begin&lt;br /&gt;  ShowMessage('Olá Mundo!');&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;http://alexgorbatchev.com/wiki/SyntaxHighlighter&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-118242327313259169?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/118242327313259169/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=118242327313259169' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/118242327313259169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/118242327313259169'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/08/syntax-highlighter-no-blogspot.html' title='SYNTAX HIGHLIGHTER no BlogSpot'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8482817604524474044</id><published>2009-08-03T16:19:00.000-03:00</published><updated>2009-08-03T16:20:00.617-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kbm'/><title type='text'>KBM - Documentação e exemplos</title><content type='html'>Desfrute:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.components4programmers.com/downloads/"&gt;http://www.components4programmers.com/downloads/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8482817604524474044?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8482817604524474044/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8482817604524474044' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8482817604524474044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8482817604524474044'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/08/kbm-documentacao-e-exemplos.html' title='KBM - Documentação e exemplos'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7691248722490106537</id><published>2009-07-30T14:21:00.002-03:00</published><updated>2009-07-30T14:26:53.470-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='indy'/><title type='text'>HTTP</title><content type='html'>Olá.&lt;br /&gt;&lt;br /&gt;Um assunto pelo qual tenho bastante interesse é o protocolo HTTP.&lt;br /&gt;&lt;br /&gt;Estudando esse tipo de assunto muita coisa se desmistifica.&lt;br /&gt;&lt;br /&gt;Desenvolvi um tempo atrás um servidor HTTP (em Delphi) a partir de um Server Socket simples. Achei muito bacana!&lt;br /&gt;&lt;br /&gt;Vou ser mais esperto desta vez e usar TIdHTTPServer desta vez. Vamos postando aqui as descobertas.&lt;br /&gt;&lt;br /&gt;Como sempre, um ponto de partida:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wagnerelias.com/2009/02/06/http-essentials/"&gt;http://wagnerelias.com/2009/02/06/http-essentials/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7691248722490106537?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7691248722490106537/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7691248722490106537' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7691248722490106537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7691248722490106537'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/http.html' title='HTTP'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-1300917130435956370</id><published>2009-07-22T15:42:00.001-03:00</published><updated>2009-07-22T15:42:57.867-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bpl'/><title type='text'>Modularização do aplicativo</title><content type='html'>Um bom artigo sobre BPL você encontra em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.techtips.com.br/programacao/modularizao-de-aplicativos-single-package/"&gt;http://www.techtips.com.br/programacao/modularizao-de-aplicativos-single-package/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-1300917130435956370?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/1300917130435956370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=1300917130435956370' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1300917130435956370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/1300917130435956370'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/modularizacao-do-aplicativo.html' title='Modularização do aplicativo'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6288117875059644296</id><published>2009-07-17T13:46:00.000-03:00</published><updated>2009-07-17T13:47:00.946-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Funções e Procedimentos Básicos do Delphi</title><content type='html'>Um link muito interessante:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.activedelphi.com.br/forum/viewtopic.php?t=47639"&gt;http://www.activedelphi.com.br/forum/viewtopic.php?t=47639&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6288117875059644296?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6288117875059644296/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6288117875059644296' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6288117875059644296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6288117875059644296'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/funcoes-e-procedimentos-basicos-do.html' title='Funções e Procedimentos Básicos do Delphi'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7085402891377214456</id><published>2009-07-13T18:01:00.002-03:00</published><updated>2009-07-13T18:08:49.594-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><category scheme='http://www.blogger.com/atom/ns#' term='dbexpress'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>DBExpress X TThread</title><content type='html'>Amigos!&lt;br /&gt;&lt;br /&gt;Mais uma "descoberta" que talvez lhe tenha utilidade.&lt;br /&gt;&lt;br /&gt;O caso é que em programas multi thread, se a thread for utilizar uma conexão DBExpress, é necessário chamar o CoInitialize(nil) e CoUninitialize.&lt;br /&gt;&lt;br /&gt;No mínimo suas mensagens de erro em relação ao banco melhorarão uma vez que a mensagem abaixo não significa nada:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;OLE DB error occured. Code 800401F0h.&lt;br /&gt;CoInitialize has not been called.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ao passo que a mensagem abaixo fica beeeeem mais clara:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[DBNETLIB][ConnectionOpen (Connect()).]SQL Server inexistente ou acesso negado.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.codegear.com/br/article/37092"&gt;http://support.codegear.com/br/article/37092&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7085402891377214456?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7085402891377214456/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7085402891377214456' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7085402891377214456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7085402891377214456'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/dbexpress-x-tthread.html' title='DBExpress X TThread'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2887417593571008414</id><published>2009-07-10T12:21:00.002-03:00</published><updated>2009-07-10T14:23:03.014-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>DBGrid, colorindo as linhas</title><content type='html'>É um saco, sempre fico na dúvida como se faz:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/od/usedbvcl/l/aa031699.htm"&gt;http://delphi.about.com/od/usedbvcl/l/aa031699.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.activedelphi.com.br/print.php?sid=326"&gt;http://www.activedelphi.com.br/print.php?sid=326&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2887417593571008414?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2887417593571008414/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2887417593571008414' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2887417593571008414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2887417593571008414'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/dbgrid-colorindo-as-linhas.html' title='DBGrid, colorindo as linhas'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3422031106989109464</id><published>2009-07-08T19:26:00.000-03:00</published><updated>2009-07-08T19:27:58.180-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off topic'/><title type='text'>Nerd</title><content type='html'>Você é um Nerd? Sim?! Sorte sua! :)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/QqZ3PNU7V2g&amp;hl=pt-br&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/QqZ3PNU7V2g&amp;hl=pt-br&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3422031106989109464?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3422031106989109464/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3422031106989109464' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3422031106989109464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3422031106989109464'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/nerd.html' title='Nerd'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-8071776082759261567</id><published>2009-07-08T13:33:00.001-03:00</published><updated>2009-07-08T13:35:02.336-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>Compactador de Executável</title><content type='html'>Um assunto muito interessante e um ótimo artigo você encontra em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.geocities.com/SiliconValley/Bay/1058/compexe.html"&gt;http://www.geocities.com/SiliconValley/Bay/1058/compexe.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-8071776082759261567?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/8071776082759261567/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=8071776082759261567' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8071776082759261567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/8071776082759261567'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/compactador-de-executavel.html' title='Compactador de Executável'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2509928898618341246</id><published>2009-07-08T13:15:00.002-03:00</published><updated>2009-07-08T13:16:34.668-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='map'/><title type='text'>Mais sobre arquivo MAP</title><content type='html'>Olha que link interessante:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.drbob42.com/delphi/findmap.htm"&gt;http://www.drbob42.com/delphi/findmap.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2509928898618341246?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2509928898618341246/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2509928898618341246' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2509928898618341246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2509928898618341246'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/mais-sobre-arquivo-map.html' title='Mais sobre arquivo MAP'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-3086288648382084670</id><published>2009-07-06T12:12:00.001-03:00</published><updated>2009-07-06T12:14:31.938-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='componentes'/><title type='text'>Criptografia</title><content type='html'>O pessoal aqui já usa um tempo e estão bem satisfeitos.&lt;br /&gt;&lt;br /&gt;Achei o site do cara show de bola e estou compartilhando com você.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cityinthesky.co.uk"&gt;http://www.cityinthesky.co.uk/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cityinthesky.co.uk/cryptography.html"&gt;http://www.cityinthesky.co.uk/cryptography.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-3086288648382084670?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/3086288648382084670/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=3086288648382084670' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3086288648382084670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/3086288648382084670'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/criptografia.html' title='Criptografia'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-2800788845613110934</id><published>2009-07-03T09:29:00.002-03:00</published><updated>2009-07-03T09:29:59.721-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Chuck Norris é DBA!</title><content type='html'>Olha que louco!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://keniamilene.wordpress.com/2009/05/13/chuck-norris-dba/"&gt;http://keniamilene.wordpress.com/2009/05/13/chuck-norris-dba/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-2800788845613110934?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/2800788845613110934/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=2800788845613110934' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2800788845613110934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/2800788845613110934'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/07/chuck-norris-e-dba.html' title='Chuck Norris é DBA!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-6845582111357428178</id><published>2009-06-26T11:05:00.000-03:00</published><updated>2009-06-26T11:06:19.428-03:00</updated><title type='text'>Michel! Michel! Eles não ligam para a gente!</title><content type='html'>Beat It&lt;br /&gt;(Cai Fora)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eles lhe disseram&lt;br /&gt;Não volte mais aqui&lt;br /&gt;Não quero ver mais seu rosto&lt;br /&gt;É melhor você desaparecer&lt;br /&gt;O fogo está em seus olhos&lt;br /&gt;E suas palavras são bem claras&lt;br /&gt;Então cai fora, apenas cai fora&lt;br /&gt;&lt;br /&gt;É melhor correr&lt;br /&gt;Faça o que você puder&lt;br /&gt;Não queira ver sangue&lt;br /&gt;Não queira dar uma de macho&lt;br /&gt;Se quiser ser durão&lt;br /&gt;Melhor fazer o que puder&lt;br /&gt;Então cai fora, mas voce quer ser mau&lt;br /&gt;&lt;br /&gt;Refrão:&lt;br /&gt;Então cai fora, cai fora, cai fora, cai fora&lt;br /&gt;Ninguém quer ser derrotado&lt;br /&gt;Mostrando o quão forte é a sua briga&lt;br /&gt;Não importa quem está certo ou errado&lt;br /&gt;Apenas cai fora! Cai fora!&lt;br /&gt;Apenas cai fora! Cai fora!&lt;br /&gt;Apenas cai fora! Cai fora!&lt;br /&gt;Apenas cai fora! Cai fora!&lt;br /&gt;&lt;br /&gt;Eles estão lá fora para te pegar&lt;br /&gt;Melhor sair enquanto pode&lt;br /&gt;Não queira ser um menino&lt;br /&gt;Queira ser um homem&lt;br /&gt;Você quer continuar vivo&lt;br /&gt;Melhor fazer o que você pode:&lt;br /&gt;Cai fora, cai fora!&lt;br /&gt;&lt;br /&gt;Você tem que mostrá-los&lt;br /&gt;Que você não está nem um pouco assustao&lt;br /&gt;Você está brincando com a sua vida&lt;br /&gt;Isso não é "Verdade ou Desafio"&lt;br /&gt;Eles vão te pegar, vão te bater&lt;br /&gt;E vão dizer que isso é o justo&lt;br /&gt;Então cai fora, mas você quer ser mau&lt;br /&gt;&lt;br /&gt;(Refrão)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-6845582111357428178?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/6845582111357428178/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=6845582111357428178' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6845582111357428178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/6845582111357428178'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/06/michel-michel-eles-nao-ligam-para-gente.html' title='Michel! Michel! Eles não ligam para a gente!'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-5814080734880319686</id><published>2009-06-23T14:38:00.005-03:00</published><updated>2009-08-07T15:19:46.039-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><title type='text'>Fazendo um Serviço rodar no modo Aplicativo</title><content type='html'>Muitas vezes gostaríamos que o nosso serviço rodasse como um aplicativo comum, sendo que isso facilitaria bastante o debug.&lt;br /&gt;&lt;br /&gt;Por aqui fiz o código abaixo (no arquivo DPR), que atendeu bem as minhas necessidades:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="delphi"&gt;&lt;br /&gt;var&lt;br /&gt;sModo : string;&lt;br /&gt;begin&lt;br /&gt;  GetParamByKey('modo',sModo,'desktop');&lt;br /&gt;  if (AnsiLowerCase(sModo) = 'desktop') then&lt;br /&gt;  begin&lt;br /&gt;    Forms.Application.Initialize;&lt;br /&gt;    Forms.Application.MainFormOnTaskbar := True;&lt;br /&gt;    Forms.Application.Title := 'G!Guadian Master';&lt;br /&gt;    Forms.Application.CreateForm(TfModoDesktop, fModoDesktop);&lt;br /&gt;    Forms.Application.Run;&lt;br /&gt;  end&lt;br /&gt;  else&lt;br /&gt;  begin&lt;br /&gt;    if not SvcMgr.Application.DelayInitialize or SvcMgr.Application.Installing then&lt;br /&gt;      SvcMgr.Application.Initialize;&lt;br /&gt;    SvcMgr.Application.CreateForm(TGGuadianMaster, GGuadianMaster);&lt;br /&gt;    SvcMgr.Application.Run;&lt;br /&gt;  end;&lt;br /&gt;end.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sacou a jogada?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-5814080734880319686?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/5814080734880319686/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=5814080734880319686' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5814080734880319686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/5814080734880319686'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/06/fazendo-um-servico-rodar-no-modo.html' title='Fazendo um Serviço rodar no modo Aplicativo'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7822574263889205041</id><published>2009-06-22T10:23:00.001-03:00</published><updated>2009-06-22T10:23:50.417-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Exemplos</title><content type='html'>Alguns bons exemplos de diversas rotinas você encontra em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://inf.unisul.br/~osmarjr/delphi/exemplos.htm"&gt;http://inf.unisul.br/~osmarjr/delphi/exemplos.htm&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7822574263889205041?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7822574263889205041/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7822574263889205041' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7822574263889205041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7822574263889205041'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/06/exemplos.html' title='Exemplos'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-543419328061102837</id><published>2009-06-19T14:43:00.002-03:00</published><updated>2009-06-19T14:44:54.444-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><title type='text'>Sobre o Pascal e Object Pascal</title><content type='html'>Uma boa leitura sobre os assuntos, entre outros, você encontra em:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fundao.wiki.br/resources/linguagens/"&gt;http://www.fundao.wiki.br/resources/linguagens/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-543419328061102837?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/543419328061102837/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=543419328061102837' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/543419328061102837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/543419328061102837'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/06/sobre-o-pascal-e-object-pascal.html' title='Sobre o Pascal e Object Pascal'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2178975238297259742.post-7313784151032675986</id><published>2009-06-03T16:19:00.001-03:00</published><updated>2009-06-03T16:20:33.182-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='serviço do windows'/><title type='text'>Tutorial sobre como criar um Serviço do Windows</title><content type='html'>Olha que bacana:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devarticles.com/c/a/Delphi-Kylix/Creating-a-Windows-Service-in-Delphi/"&gt;http://www.devarticles.com/c/a/Delphi-Kylix/Creating-a-Windows-Service-in-Delphi/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2178975238297259742-7313784151032675986?l=eugostododelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://eugostododelphi.blogspot.com/feeds/7313784151032675986/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2178975238297259742&amp;postID=7313784151032675986' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7313784151032675986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2178975238297259742/posts/default/7313784151032675986'/><link rel='alternate' type='text/html' href='http://eugostododelphi.blogspot.com/2009/06/tutorial-sobre-como-criar-um-servico-do.html' title='Tutorial sobre como criar um Serviço do Windows'/><author><name>José Mário Silva Guedes</name><uri>http://www.blogger.com/profile/03341668928680287972</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='27' src='http://2.bp.blogspot.com/-3XpvuIwc7e4/TvuZJtpiNfI/AAAAAAAAG3Y/j1RMWKb7cgo/s220/394378_2881896409176_1313066483_3112273_326859378_n.jpg'/></author><thr:total>0</thr:total></entry></feed>
