quarta-feira, 2 de dezembro de 2009

MP3 player com DirectX

Requisitos

Windows XP com framework 2.0 ou superior
DirectX
Visual Studio 2008 ou compatível

1º Instalar Microsoft DirectX SDK (June 2006) ou compatível

Vamos lá pessoal, algum dia na vida qualquer um aqui já tentou executar um MP3
utilizando .NET correto? Aí vamos lá e adicionamos um objeto SoundPlayer do namespace
System.Media, quando utilizávamos o método Play()! PAN! Não é possível executar o arquivo
pois o SoundPlayer não suporta o MP3. Utilizaremos o DirectX para nos auxiliar com isso, para
isso a primeiro que devemos fazer é baixar DirectX Software Development Kit no site do
Microsoft através do link
http://www.microsoft.com/downloads/details.aspx?FamilyID=1fd20df1-dec6-47d0-8bef-
10e266dfdab8&DisplayLang=en, apenas 443 MB.
No meu caso eu tive que executar um mp3 em um dashboard de Call Center, o cliente
queria colocar um telão no Call Center com (o gerente desse projeto foi mandado embora
antes da conclusão do projeto, então essa parte do telão não rolou... vai vendo rsrs) e toda vez
em que o nível de atendimento estava abaixo no mínimo aceitável o sistema tinha que tocar
uma sirene, bem fizemos um esquema para ler wav, mas nossa vontade era fazer com mp3!!!
Coisas de desenvolvedor, bem fizemos, mas não foi para produção, não deu tempo, não
importa, esse treco aqui funciona.

2º Criar um projeto Windows Forms Application

Agora com o DirectX SDK crie um novo projeto do tipo Windows Forms Application
com o nome que você achar melhor, bem, não mostrar com usar o OpenFileDialog, isso fica
para outro artigo.

3º Adicionar as referências

Vá ao menu “Project”, clique em “Add Reference”, na aba “.NET”, adicione as
referencias “Microsoft.DirectX” e “Microsoft.DirectX.AudioVideoPlayback”.

4º Adicionar caminho do mp3

Dê um clique duplo no formulário, agora no método Form_Load, crie uma variável do
tipo string com o nome musica e sete o valor dela como o caminho para o seu arquivo mp3
(pois é, um arquivo mp3!!!! Hehe).

5º Adicionar objeto Microsoft.DirectX.AudioVideoPlayback.Audio

Adicione um objeto do tipo Audio (Microsoft.DirectX.AudioVideoPlayback.Audio) com
o nome audio, instancie audio como um novo Audio, e passe como parâmetro o objeto musica
no construtor.

6º Executar “Play”

Agora execute o método “Play” do objeto audio.

7º Código fonte

Abaixo estão os códigos fonte em VB.NET e C#(Sharp).

VB.NET

Imports Microsoft.DirectX.AudioVideoPlayback

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

Dim musica As String = "C:\Documents and Settings\oscar\Meus
documentos\Minhas músicas\Top Gun - Danger Zone.mp3"

Dim audio As Audio

audio = New Audio(musica)
audio.Play()

End Sub

End Class

C#(Sharp)

using System;
using System.Windows.Forms;
using Microsoft.DirectX.AudioVideoPlayback;

namespace DirectXPlayer
{

public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string musica = @"C:\Documents and Settings\oscar\Meus
documentos\Minhas músicas\Top Gun - Danger Zone.mp3";
Audio music;
music = new Audio(musica);
music.Play();
}
}
}

Referencias

http://msdn.microsoft.com/en-us/directx/aa937788.aspx
http://msdn.microsoft.com/en-us/directx/default.aspx
http://msdn.microsoft.com/en-us/aa937791.aspx

Pessoal, é só isso, como vocês podem ver é super fácil, espero que tenha agregado
conhecimento. Até a próxima.

segunda-feira, 23 de novembro de 2009

Galeria de fotos com WPF

Requisitos

Windows XP com Framework .NET 3.0 ou superior para rodar a aplicação
Visual Studio 2008 ou compatível

1º Crie uma aplicação do tipo WPF Application

2º No XAML, na tag Windows, mude o atributo title para Galeria de fotos

3º Adicione as bibliotecas System.IO e System com as seguintes linhas
xmlns:s="clr-namespace:System;assembly=mscorlib"
xmlns:io="clr-namespace:System.IO;assembly=mscorlib"

4º Adicione os resources da aplicação com as seguintes linhas, é de onde as fotos serão lidas, entenda o primeiro s:String como local de suas imagens, o segundo é o filtro dos arquivos que serão lidos pela aplicação, mas já vou te explicar que ObjectType é o tipo do objeto que está sendo instanciado pelo ObjectDataProvider e o MethodName é o método desse objetos que será executado, o resto é tranqüilo.


5º Após o Windows.Resources adicione um DockPanel com o atributo LastChildFill setado como True

6º Dentro do DockPanel adicione um ListBox com os seguintes atributos x:Name="imageList", DockPanel.Dock="Top", ItemsSource="{Binding}", IsSynchronizedWithCurrentItem="True" e DataContext="{StaticResource imagens}".

7º Dentro do ListBox coloque as seguintes tag



8º Adicione o painel onde a imagem será exibida com o código abaixo.


Super tranqüilo.

Referencias.

http://windowsclient.net/wpf/
http://msdn.microsoft.com/pt-br/library/cc564903.aspx
http://msdn.microsoft.com/en-us/library/ms754130.aspx

quarta-feira, 18 de novembro de 2009

FileWatcher - Observador de arquivos

Muito simples, vamos lá.

1º Crie um projeto do tipo Windows Forms Applications.

2º Adicione uma classe com o nome FileWatcher.

3º Crie uma variável do tipo string, privada com o nome pasta.

private string pasta = @"d:\teste";


4º Crie o construtor da classe conforme abaixo.

public FileWatcher()

{

FileSystemWatcher WatchFile = new FileSystemWatcher(pasta, "*.txt");

WatchFile.Created += new FileSystemEventHandler(this.FileCreated);

WatchFile.EnableRaisingEvents = true;

}


5º Agora vamos criar o método Created, faça conforme abaixo. Esse método irá copiar o arquivo de D:\Teste para D:\Teste2 e xcluí-lo da origem

public void FileCreated(object sender, FileSystemEventArgs e)

{

Console.WriteLine(e.Name);

FileInfo fileInfo = new FileInfo(e.Name);

string pastaOrigem = @"D:\Teste";

string pastaDestino = @"D:\Teste2";

string arquivoOrigem = Path.Combine(pastaOrigem, fileInfo.Name);

string arquivoDestino = Path.Combine(pastaDestino, fileInfo.Name);

if (File.Exists(arquivoDestino))

File.Delete(arquivoDestino);

File.Copy(arquivoOrigem, arquivoDestino);

Log(arquivoOrigem, arquivoDestino);

}


6º Vamos gravar um log disso então? Basta fazer um método como esse. Ele é chamado no final do Created.

private void Log(string preCondicao, string posCondicao)

{

string arquivoLog = Path.Combine(pasta, string.Format("{0}log.txt", string.Format("{0:yyyyMMdd}", DateTime.Now)));

StreamWriter arquivoEscrita = new StreamWriter(arquivoLog, true);

arquivoEscrita.WriteLine(string.Format("{0}|{1}|{2}", preCondicao, posCondicao, DateTime.Now));

arquivoEscrita.Close();

arquivoEscrita.Dispose();

}


7º Instancie um novo FileWacther no Load do formulário.

8º Vamos testar agora, crie uma pasta chamada Teste e uma pasta Teste2, execute a aplicação e crie um arquivo texto (txt) em Teste, veja que o arquivo sumiu! E um novo arquivo chamado AAAAMMDDlog.txt foi criado, esse arquivo contém as informações do nome do arquivo de origem, nome do arquivo destino e data/hora em que ele foi movido. Se você verificar em Teste2 o arquivo estará lá.

OBS: Atenção aos caminhos das pastas, caso não tenha um diretóro D:, coloque no lugar que lhe parecer melhor.

Até a próxima.

quarta-feira, 4 de novembro de 2009

PDF com C# (C SHARP)

1º Baixe a biblioteca em http://sourceforge.net/projects/report/

2º Crie um projeto windows forms

3º Adicione a referência da biblioteca no projeto

4º Adicione a seguinte linha no projeto
using Root.Reports;

5º No método Load do formulário adicione o seguinte código

String arquivo = @"c:\teste.pdf";

if (System.IO.File.Exists(arquivo))
System.IO.File.Delete(arquivo);

Report report = new Report();
Page page = new Page(report);

page.AddCB_MM(25,
new RepString(
new FontProp(
new FontDef(report, FontDef.StandardFont.Courier), 14), "Seu texto"));

report.Save(arquivo);

Pronto, fácil assim no site do projeto há alguns exemplos legais, acho que vale a pena dar uma olhada.


Referências
http://report.sourceforge.net/

domingo, 1 de novembro de 2009

Usando Checkbox no repeater



Para desenvolver essa aplicação é necessário



Visual Studio 2005 ou compatível
Framework 2.0



1º Adicione um Repeater no formulário
2º Vá no modo Source para editar o template do arquivo
3º Adicione o componente checkbox



O código deverá estar parecido com isso





4º Adicionar DataSource ao Repeater

Nesse caso eu vou criar uma coleção de String vou popular com dentro de um laço e instanciar o valor do DataSource do Repeater1 com a lista. No método Load_Page coloque o seguinte código.

if (!Page.IsPostBack)
{
List lista = new List();

for (int i = 0; i < datasource =" lista;">

5º Colocando Eval no Repeater



Agora coloque o valor da lista que você irá visualizar no Repeater
Container.DataItemFicará da seguinte forma



6º Imprimindo o resultado



Adicione um Label e um Button, no evento Click do botão adicione o seguinte código



Label1.Text = String.Empty;

foreach (RepeaterItem item in Repeater1.Items)
if (((CheckBox)item.Controls[1]).Checked) Label1.Text = ((CheckBox)item.Controls[1]).Text + "
";