Jan 29 2007

.NET: Controle para trabalhar com campos formatados

Autor: Marcos Dell Antonio - Categorias: .NET

Trabalhando em um projeto Windows Forms, precisei formatar a apresentação de um campo para que utilizasse casas decimais. Tendo em vista que no .NET 2.0 foi incorporado o controle MaskedTextBox, meus primeiros testes foram utilizando ele.

Conclusão: esqueça-o.

O que eu precisava fazer era apresentar uns valores totais utilizando uma formatação simples, algo do tipo 1.000,00 ou 10,50. No Delphi eu resolveria esse abacaxi usando a propriedade DisplayFormat e definido uma máscara de apresentação.

No Visual Studio a coisa foi um pouco mais complicada. O MaskedTextBox parece ser muito bom para campos do tipo CEP, CPF, CNPJ, etc que usam máscaras fixas. No entanto, para campos de apresentação de valores não foi muito flexível.

Em uma rápida pesquisa no Google encontrei uma solução bacana para o problema: NumericBox. Através do site Windows Forms.net, cheguei ao site do responsável pelo NumericBox. Este, por sua vez, é um controle gratuito para ser usado na apresentação de valores com casas decimais ou não. Veja:

Para utilizá-lo basta fazer o download, descompactar o .zip e adicionar o controle à ToolBox do Visual Studio: botão direito sobre ela / choose items / na aba .NET Framework Components clicar sobre o botão Browse / navegar até o arquivo descompactado anteriormente e selecionar o NumericBox.dll que está na pasta Binary. Pronto! Com isso você já pode arrastar e soltar o controle no seu formulário.

Apesar de ter resolvido o meu problema de apresentação, não consegui fazer o controle ficar ReadOnly (ele não possui esta propriedade e parece que ignora o valor do Handled nos eventos KeyPress e KeyDown). No entanto, usando a propriedade Enabled consegui simular um comportamento parecido e que serviu muito bem para esta situação. ;)

Fica aí a dica! Espero que ajude.

Até +.

Comentários Faça o seu comentário

Jan 24 2007

Quando Nietzsche Chorou: Recomendadíssimo!

Autor: Marcos Dell Antonio - Categorias: Livros

Se você é um programador, administrador ou qualquer outro “dor” que lê inúmeros livros e artigos técnicos por mês, mas quando deita na cama prefere livros mais leves, que propiciam o sono, não deixe de conferir o livro Quando Nietzsche Chorou, de Irvin D. Yalom.

Comprei essa obra há 17 dias e, acredite ou não, terminei de lê-la hoje. São 407 páginas emocionantes que tratam do nascimento da psicanálise.

Para quem gosta de um pouco de filosofia, história e ciência, o livro aborda alguns nomes consagrados, tais como Nietzsche, Schopenhauer, Freud e Breuer.

Quando Nietzsche Chorou
Compre agora na Submarino

Para saber mais sobre ele veja esse post.

Agora que terminei esse ótimo romance pretendo voltar as leituras para a história do Brasil. Acho que perdi muitos anos na escola desenhando ou dormindo na carteira. Não sei se o erro foi totalmente meu ao ignorar as aulas de história, ou se os professores têm parte da culpa por não terem me estimulado. Independente da causa, meus conhecimentos em história nunca foram satisfatórios. No entanto, consegui absorver muita coisa no último ano, desde que comecei a ler o livro História Concisa do Brasil, de Boris Fausto.

Para dar continuidade neste tema, comprei uma das consagradas obras de Sergio Buarque de Holanda, Raízes do Brasil.

Raízes do Brasil
Compre agora na Submarino

Sinopse conforme a loja Submarino:

Interpretação original da decomposição da sociedade tradicional brasileira e da emergência de novas estruturas políticas e econômicas. Visão inovadora que introduziu os conceitos de patrimonialismo e burocracia, explicando os novos tempos.

Juntamente com Casa Grande e Senzala (Gilberto Freyre) e Formação do Brasil Contemporâneo (Caio Prado Jr.), ambos recomendados por conhecidos e coincidentemente por uma resenha na loja Submarino, acho que posso construir uma boa base de conhecimento. Esses dois últimos vou comprar depois que acabar de ler o primeiro, se não fica tudo na gaveta e aí já era. ;)

É isso aí. Quem sabe um dia chegarei lá. Até +.

Comentários Faça o seu comentário

Jan 23 2007

Asp.NET Ajax 1.0 na área

Autor: Marcos Dell Antonio - Categorias: .NET

Diretamente do blog do ScottGu chegou o que muita gente esperava: ASP.NET Ajax 1.0 Released.

Parece que um brazuca, Fernando Cerqueira, esteve envolvido no projeto e foi citado no post do ScottGu. Isso certamente é uma honra, pois o cara (Scott) é o Buda dos desenvolvedores ASP.NET.

Sobre o “Atlas” (nome antigo do ASP.NET Ajax), faz alguns meses que estou esperando uma versão estável. Vamos ver o que essa tem a oferecer, pois as últimas estavam terríveis.

O download pode ser feito aqui.

Até +.

Comentários Faça o seu comentário

Jan 22 2007

.NET: O build do seu website demora muito? Esqueça-o!

Autor: Marcos Dell Antonio - Categorias: .NET

Não é de hoje que encontro pessoas reclamando sobre o tempo para efetuar o build de um website no Visual Studio 2005 (VS). Quem vem do Delphi, onde é muito comum o uso das teclas CTRL+F9 / F9 para compilar e rodar a aplicação, acaba batendo com a cara no muro ao tentar o mesmo com o VS (CTRL+F5, neste caso).

Para driblar este problema, sugiro que ao invés de executar o build pela IDE, o mesmo seja feito no browser. Claro que o browser não vai fazer o build da sua aplicação por conta própria, mas ele pode invocar o .NET Framework para fazê-lo. Desta forma, ao invés de usar o CTRL+F5 para visualizar o seu projeto, utilize opção View in Browser disponível através de um clique com o botão direito sobre o website no Solution Explorer.

Esta opção é muito mais rápida do que a utilização do CTRL+F5 e além de estar disponível no menu comentado acima, também pode ser acessada com um clique com o botão direito sobre o servidor interno do VS (disponível na TrayIcon).

É isso ai. Espero ter ajudado! :-)

Até +.

Comentários Faça o seu comentário

Jan 16 2007

Delphi: Como detectar se a sua aplicação está rodando sobre WTS e saber qual é a ID da sessão

Autor: Marcos Dell Antonio - Categorias: Delphi

Parece ridículo, mas quem poderia imaginar que o controle de licenças de um software furaria quando os clientes fizessem o acesso via WTS (Windows Terminal Server)?

Imagine a seguinte situação: um controlador de licenças baseado no IP dos clientes e que bloqueia a execução da mesma aplicação duas vezes simultaneamente na mesma máquina. Se o acesso ao controlador for via TCP/IP “diretamente”, da forma mais comum possível (um servidor + um cliente), essa validação funcionará perfeitamente.

Agora pense no mesmo cenário acima, porém com o acesso de dois clientes usando WTS. O que acontece? O primeiro cliente acessa, o controlador faz o registro do IP. Quando o segundo cliente for acessar (lembre-se, é WTS), adivinha? O controlador bloqueia! Por que? Pois o segundo cliente possui o mesmo IP do primeiro, que por sua vez possui o mesmo IP do servidor, pois está tudo sobre WTS.

Solução? Eu vejo duas:

  1. Controlar o acesso pelo IP do cliente. Para isso, é preciso identificar qual a sessão que está acessando o WTS e através do seu ID buscar as informações (IP e outras) de quem a originou;
  2. Fazer com que o controlador de licenças conheça se o cliente está sobre WTS e considerar o ID da sessão no controle de acesso.

Para ambas as soluções duas rotinas são fundamentais:

  1. Identificar se a aplicação está sendo executada via WTS:

    function IsRemoteSession: boolean; const SM_REMOTESESSION = $1000; begin Result := GetSystemMetrics(SM_REMOTESESSION) <> 0; end;

    Adicione o uses Windows à unit.

  2. Pegar o ID da sessão que vai executar o aplicativo:

    1 function GetCurrentSessionID: Integer; 2 type 3 TProcessIdToSessionId = 4 function(dwProcessId: DWORD; 5 pSessionId: DWORD): 6 BOOL; stdcall; 7 var 8 ProcessIdToSessionId: TProcessIdToSessionId; 9 hWTSapi32dll: THandle; 10 Lib : THandle; 11 pSessionId : DWord; 12 begin 13 Result := 0; 14 Lib := GetModuleHandle(kernel32); 15 if Lib <> 0 then 16 begin 17 ProcessIdToSessionId := 18 GetProcAddress(Lib, ProcessIdToSessionId); 19 20 if Assigned(ProcessIdToSessionId) then 21 begin 22 ProcessIdToSessionId(GetCurrentProcessId(), 23 DWORD(@pSessionId)); 24 Result:= pSessionId; 25 end; 26 end; 27 end;

    As units Windows e Winsock são necessárias.

Com essas duas rotinas é possível controlar se aplicação cliente está sobre WTS ou não. O resto fica por conta da sua imaginação. ;)

Fonte: Torry’s Delphi Pages (cuidado com a rotina que está lá, ela tem um errinho no parâmetro da GetProcAddress - o número 1 está sobrando)

Até +!

Comentários Faça o seu comentário

Jan 16 2007

Nova versão do Yahoo Messenger para o Windows Vista

Autor: Marcos Dell Antonio - Categorias: Tecnologia

O Vista está chegando e as novidades já estão aparecendo. Parece que o Yahoo andou trabalhando alguns meses construindo uma versão do seu Messenger específica para o Windows Vista.

Ela é feita utilizando o WPF (Windows Presentation Foundation, Avalon), que é o novo sistem de apresentação do Windows.

Veja algumas imagens do que vem por aí:

 

Mais informações estão disponíveis no site do Yahoo Messenger e no theWPFblog.

Isso aí! Até +.

Comentários Faça o seu comentário

Jan 16 2007

.NET: Custom Installer Actions

Autor: Marcos Dell Antonio - Categorias: .NET

Acho que mordi a língua quando disse pro meu chefe que os projetos de instalação do Visual Studio 2005 (Web Setup Projet e Setup Project) eram engessados, ou seja, de difícil personalização.

Lendo um dos melhores blogs da minha Blogroll, do Benjamin Day, encontrei uma solução excelente para personalizar o aplicativo de instalação gerado pelo Visual Studio.

O conceito aplicado chama-se Custom Actions e basicamente funciona da seguinte maneira:

  1. Cria-se um projeto Class Library;
  2. Dentro deste projeto cria-se uma classe do tipo Installer Class;
  3. Esta classe irá sobrescrever um dos seguintes métodos: Install, Uninstall, Commit e Rollback;
  4. Cria-se um projeto de deploy (Web Setup Project ou Setup Project);
  5. Adiciona-se a Custom Action (que está na Class Library criada anteriormente) ao projeto criado.

Pronto! Seguindo esse roteiro basta usar a imaginação e implementar o que for preciso.

No blog do Benjamin Day existe um exemplo (com fonte)  de uma implementação que possibilita a alteração da Connection String (seja ela do Web.Config, Hibernate.cfg.xml, Enterprise Library ou outra) e também das permissões de segurança do diretório do IIS.

Não deixe de procurar no Google mais informações sobre o assunto, pois é uma técnica muito empregada, só eu que não conhecia :(.

Até +.

Comentários Faça o seu comentário

Jan 15 2007

Ganhe uma grana com a Visie e de lambuja aprenda a criar um formulário de contato tableless

Autor: Marcos Dell Antonio - Categorias: Cotidiano

Visitando o blog Revolução Etc me deparei com o novo programa de afiliados da Visie. Como de costume, ele paga conforme o número de clientes que você arranja para a empresa.

O mais interessante é que ao me inscrever no programa, de lambuja encontrei um ótimo exemplo de um formulário de contato (cadastro, neste caso) seguindo o conceito tableless. Como não sou um perito em CSS, Tableless e agregados, este exemplo caiu do céu :-).

Update (15/02/2007): acho que faltaram duas coisas nesse form: uma máscara no campo conta e agência para separar o dígito verificador do número e um segundo campo para a verificação da senha.

Para mais informações sobre o programa de afiliados, veja o post no Revolução Etc.

Até +.

Comentários Faça o seu comentário

Jan 10 2007

Cicarelli afirma: não tenho nada com isso. Foi meu namorado que fodeu com vocês também!

Autor: Marcos Dell Antonio - Categorias: Cotidiano

Acabou de sair no Jornal da Globo (argh, eu juro que só assisti hoje) uma declaração da Daniela Cicarelli afirmando que não foi culpa dela o bloqueio do YouTube, mas sim do namorado, pois foi ele que entrou na justiça.  

A sem vergonha ainda teve a cara de pau de afirmar o seguinte:

Não posso pedir desculpas por uma coisa que não tenho culpa.

Podemos tirar três conclusões disso tudo:

  1. A justiça brasileira é virada do avesso;
  2. A Cicarelli saiu no New York Times;
  3. A comunidade é forte! Os protestos são válidos! A Cicarelli se borrou toda quando percebeu onde a água tinha batido.

É isso aí!

Até +

Comentários 1 comentário

Jan 09 2007

Hoje começa a minha Odisséia

Autor: Marcos Dell Antonio - Categorias: .NET, Direct3D, Mobilidade

Só para esclarecer as coisas, sou aluno do curso de Ciências da Computação da Universidade Regional de Blumenau (FURB) e pretendo me formar até julho deste ano.

Hoje comecei a trabalhar definitivamente no projeto do meu trabalho de conclusão de curso (TCC): um protótipo de um visualizador de modelos 3D para dispositivos móveis usando o .NET Compact Framework 2.0.

A etapa inicial deste trabalho foi dada com a redação de uma proposta de trabalho de conclusão de curso. Após a avaliação e aprovação por alguns professores da Universidade (escolhidos de acordo com a área do trabalho), o aluno já pode iniciar o desenvolvimento do projeto, que inclui a construção de um software juntamente com a redação de uma monografia (normalmente entre 70 e 100 páginas).

Se alguém tiver interesse no assunto, que faz parte da área de Computação Gráfica, a minha proposta está disponível para download. Caso alguém queira contribuir com alguma idéia, fique a vontade.

Durante o desenvolvimento pretendo usar o Visual Studio 2005, a linguagem C# e os emuladores disponíveis para Smart Devices (se você já usa esses emuladores e tem problemas de desempenho, veja este post na MSDN). A idéia inicial é tentar usar o Managed Direct3D Mobile que foi lançado ano passado. Vamos ver até onde chego.

É isso aí. Provavelmente novos posts sobre este assunto aparecerão ao longo do desenvolvimento, então se você tem interesse fique ligado. :-)

T+

Ps: nova categoria adicionada: Mobilidade

Comentários Faça o seu comentário

Próxima página »