Criando uma aplicação de instância única

10/16/2007 17:51:00 By Felipe Pessoto

Para evitar que o usuário abra duas ou mais instâncias do seu programa, você pode usar a seguinte técnica

//Referencie o namespace System.Threading
using System.Threading;

//Classe Mutex, ela que identificará se seu programa já está aberto
Mutex m = null;
//String que usaremos para identificar o programa
const string NomeMutex =  "MEUPROGRAMA";

try
{
   //Tenta abrir o Mutex
    m = Mutex.OpenExisting(NomeMutex);
}
catch(WaitHandleCannotBeOpenedException)
{
   //Nao existe
}
if(m == null)
{
  //Caso nao exista, ele cria um novo
    m = new Mutex(true,NomeMutex);
}
else
{
  //Se existir é porque seu programa já está aberto
   m.Close();
   Application.Exit();

}

Você só precisa ter cuidado ao escolher a string de identificação, pois se houver outro programa com a mesma identificação, você não vai conseguir abrir seu programa.

Diminuindo fotos automaticamente

10/13/2007 16:54:00 By Felipe Pessoto

Criei esse programa pra diminuir algumas fotos de forma automatica. As vezes deixamos a câmera digital no modo com mais alta resolução e isso vai consumindo o HD. No exemplo iremos diminuir a foto pra largura ou altura(o que for maior) de 640px.

Vamos precisar de um Button, um CheckBox e uma ProgressBar:



Vamos criar o método que irá gerar a foto menor:

private void GravarThumb (FileInfo Arquivo)
{
   Bitmap bm;
   Bitmap thumb;
   int altura;
   int largura;

   bm = (Bitmap)Bitmap.FromFile(Arquivo.FullName);

   if(bm.Width > 640 || bm.Height > 640)
   {
      altura = (int)(640f/ bm.Width * bm.Height);
      if(altura > 640)
      {
         largura = (int)(640f/ bm.Height * bm.Width);
         thumb = new Bitmap(bm, new Size(largura, 640));
      }
      else
      {
         thumb = new Bitmap(bm, new Size(640, altura));
      }
   }
   else
   {
      thumb = new Bitmap(bm);
   } 
   thumb.Save(Arquivo.DirectoryName + "/tn_" + Arquivo.Name, System.Drawing.Imaging.ImageFormat.Jpeg);
}

E dentro do evento Click do Button:

if
   (folderBrowser.ShowDialog() == DialogResult.OK)
   {
   DirectoryInfo d = new DirectoryInfo(folderBrowser.SelectedPath);
   FileInfo[] Arquivos;

   if(chkIncluirSubPastas.Checked)
       Arquivos = d.GetFiles("*.jpg",SearchOption.AllDirectories);
   else
       Arquivos = d.GetFiles("*.jpg",SearchOption.TopDirectoryOnly);

   progressBar1.Maximum = Arquivos.Length;

   foreach(FileInfo Arquivo in Arquivos)
   {
      GravarThumb(Arquivo);
      progressBar1.Value++;
      Application.DoEvents();
   }
   progressBar1.Value = 0;
}

 

Inserindo strings em Imagens

10/11/2007 11:25:00 By Felipe Pessoto

Este é um pequeno artigo, ou melhor uma dica de como inserir uma string nas suas fotos.

Um exemplo prático seria para um texto de Copyright

Vamos ao código:

//Carregamos o arquivo da imagem pra uma classe Image
//(poderia ser Bitmap também, que é uma classe derivada da Image)
Image i = Image.FromFile(@"C:\WINDOWS\Web\Wallpaper\Alegria.bmp");

//Instanciamos um objeto Graphics,
//que contém métodos para editarmos nossa Image
Graphics g = Graphics.FromImage(i);

//Instanciamos o objeto Font,
//escolhemos o nome da Font, tamanho e estilos
//(para usar dois ou mais estilos use o operador Bitwise
//ex.: FontStyle.Bold | FontStyle.Italic)
Font f = new Font("Verdana", 40, FontStyle.Bold);

//O objeto StringFormat é opcional,
//você pode usa-lo para configurar alinhamento e direção do texto(entre outras opções)
StringFormat s = new StringFormat();
s.Alignment = StringAlignment.Center;

//Agora simplesmente chamamos o método DrawString,
//passando a string que queremos escrever na imagem, a fonte,
//um Brush(você pode usar algum das propriedades da classe Brushes,
//ou criar um Brush personalizado),
//o local que você quer a string e opcionalmente um StringFormat.
g.DrawString("Felipe", f, Brushes.Blue, 100f, 100f, s);

//Finalmente salvamos o arquivo
i.Save(@"C:\WINDOWS\Web\Wallpaper\Alegria2.bmp");

É muito simples! Espero postar outros artigos em breve, assim que tiver mais tempo.

Microsoft quer códigos mais seguros e de qualidade

10/08/2007 17:51:00 By Felipe Pessoto

A Microsoft continua a ajudar os desenvolvedores à escrever código de melhor qualidade e mais seguro.
Ela está adicionando características novas para análise de código na próxima versão da sua suite de desenvolvimento, o Visual Studio 2008.

No Visual Studio 2005, a companhia integrou um par de ferramentas: FxCop e PREfast, sob os nomes de Managed Code Analysis e C/C++ Code Analysis, disse S. “Soma” Somasegar, vice-presidente da divisão de desenvolvimento da Microsoft.

Agora para o Visual Studio 2008, a equipe de análise de código da Microsoft está adicionando algumas características novas, incluindo o Code Metrics, uma nova janela de ferramentas "que permitirá que você não somente tenha uma visão geral da qualidade do código, mas também a possibilidade de se aprofundar nos pontos de difícil manutenção e mais complexos,” disse Somasegar.

Para o Visual Studio 2008, o Code Metrics virá com 5 modos: Cyclomatic Complexity, Depth of Inheritance, Class Coupling, Lines of Code e Maintainability Index.


Outras características novas incluem as melhorias no Code Analysis Policy, que permitem se assegurar de que a análise do código esteja funcionando antes de cada registro. A equipe da Microsoft fez também algumas melhorias na usabilidade, incluindo uma orientação melhor e fornecendo mais controle sobre os ajustes que são aplicados na política dos projetos.

De acordo com o blog de Somasegar, a análise de código do Visual Studio 2008 será caracterizada também por melhorias como: sustentação para analisar métodos anônimos e expressões lambda; análise nova, incluindo regras adicionais de segurança, de globalização, da manutenção e da sintetização de voz (incluindo suporte à dicionário customizado); melhor suporte para C++/CLI e o Compact Framework; e as melhorias de desempenho que diminuíram o tempo de análise sobre código gerenciado em duas vezes, e consumindo metade da memória do Visual Studio 2005.

A Microsoft anunciou o lançamento oficial do Visual Studio 2008 junto com Windows Server 2008 e SQL Server 2008 para o dia 27 de Fevereiro 2008 em Los Angeles. Entretanto, o código final do Visual Studio 2008 é esperado para o fim deste ano.

MSDN Magazine - Outubro 2007

10/05/2007 14:51:00 By Felipe Pessoto

Ja está disponível para download a revista MSDN Magazine desse mês:

•Segmentos Agrupados: Aumente a escalabilidade com as novas APIs do pool de segmentos
• SEGMENTOS DO WPF: Crie aplicativos que respondem melhor com o despachante
• LINQ paralelo: Como executar consultas em processadores de vários núcleos
• Desempenho paralelo: Otimizar o código gerenciado para máquinas de vários núcleos
• Aplicativos móveis: Ajuste o volume do toque do celular ao som ambiente

 

Download em Português - Download em Inglês