mai 07

// Place text over center of icon; they both occupy the same space
button.setVerticalTextPosition(SwingConstants.CENTER);
button.setHorizontalTextPosition(SwingConstants.CENTER);

// Place text above icon
button.setVerticalTextPosition(SwingConstants.TOP);
button.setHorizontalTextPosition(SwingConstants.CENTER);

// Place text below icon
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.setHorizontalTextPosition(SwingConstants.CENTER);

// Place text to the left of icon, vertically centered
button.setVerticalTextPosition(SwingConstants.CENTER);
button.setHorizontalTextPosition(SwingConstants.LEFT);

// Place text to the left of icon and align their tops
button.setVerticalTextPosition(SwingConstants.TOP);
button.setHorizontalTextPosition(SwingConstants.LEFT);

// Place text to the left of icon and align their bottoms
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.setHorizontalTextPosition(SwingConstants.LEFT);

// Place text to the right of icon, vertically centered
button.setVerticalTextPosition(SwingConstants.CENTER);
button.setHorizontalTextPosition(SwingConstants.RIGHT);

// Place text to the right of icon and align their tops
button.setVerticalTextPosition(SwingConstants.TOP);
button.setHorizontalTextPosition(SwingConstants.RIGHT);

// Place text to the right of icon and align their bottoms
button.setVerticalTextPosition(SwingConstants.BOTTOM);
button.setHorizontalTextPosition(SwingConstants.RIGHT);

View this Post in: English French Italian Spanish

dez 13

Este erro, ao contrário do que os outros pensam, não é do Chrome ou do Safari e sim do próprio ASP.NET.

Para gerar o código JavaScript do menu, o ASP.NET verifica qual é o browser do cliente, e se ele suporta ou não JavaScript. Acontece que esta verificação falha em alguns browsers como o Sarafi e consequentemente o Chrome (pois o Chrome foi baseado no Safari), e o  ASP.NET então devolve um código que não funciona. Para corrigir isto devemos “forçar” o ASP.NET a executar o JavaScript, para isto setamos a propriedade Page.ClientTarget com o valor “uplevel”. Assim informamos que o cliente possui um moderno “uplevel” browser.

Devemos fazer isto para todas as páginas que utilizarão o menu. O código deverá estar dentro do evento Page_Init da página. Ex:

     protected void Page_PreInit(object sender, EventArgs e)
    {
        if (Page.Request.ServerVariables["http_user_agent"].ToLower().Contains("safari"))
        {
            Page.ClientTarget = "uplevel";
        }
    }

Neste código, fazemos uma verificação se o user_agent possui a palavra safari, que servirá também pro chrome  e, se sim, forçamos o uplevel.

Para evitar de “copiar” e “colar” o mesmo código em todas as páginas, você poderá aproveitar o que há de melhor da programação orienteda a objetos, a herânça. Para isto crie uma classe herdando de System.Web.UI.Page e coloque este código nela. Para todas as suas páginas, ao invés de herdar diretamente de System.Web.UI.Page, você herda da classe que acabou de criar.


View this Post in: English French Italian Spanish

nov 19

Resolvi aprender outra linguagem de programação pra variar um pouco. :-)
Vira e mexe escuto alguém falando de Python, Ruby entre outras linguagens interpretadas e eu nem faço idéia de como se programa ou executa programas feitos nessas linguagens. Bom, não sabia. Andei lendo um pouco e vi que é a coisa é bem simples. Resolvi começar pelo Python. Para aqueles que estão começando do zero como eu, recomendo a leitura do artigo Aprenda a Programar. É uma pena o artigo não ter uma continuidade mas já dá uma boa idéia de com funciona tudo. Explica, por exemplo, como executar o Python no ambiente WEB. Minha surpresa foi que ele roda com o Apache através de um programa em cgi. Seguindo este artigo eu criei o meu primeiro programa em cgi, que a gente tanto houve falar quando se trata de programação web. Bom, fiquei bem animado com a idéia, e daqui pra frente devo publicar alguns posts relacionados ao Python. Aguardem e confiram.


View this Post in: English French Italian Spanish

out 22

Para obter informações de um arquivo tais como data e hora de criação, modificação, acesso entre outros, utilizamos a classe FileInfo. Esta classe, presente no namespace System.IO possui as propriedades CreationTime, LastWriteTime e LastAccessTime que retorna a informação de data e hora que o arquivo foi criado, modificado e aberto. Veja um exemplo de como utilizar a classe

FileInfo file_info = new FileInfo("C:\\meu_arquivo.txt");

string Criado = file_info.CreationTime.ToString("dd/MM/yyyy HH:mm:ss");
string Modificado = file_info.LastWriteTime.ToString("dd/MM/yyyy HH:mm:ss");
string Acessado = file_info.LastAccessTime.ToString("dd/MM/yyyy HH:mm:ss");

Se preferir pode fazer o download do projeto abaixo com um exemplo que mostra estas e outras propriedades da classe FileInfo.
Exemplo de uso da classe FileInfo (108)


View this Post in: English French Italian Spanish

out 19

Já mostrei aqui como obter o dia da semana por extenso no charp. Para poder escrever a data completa no formato “[dia da semana], [dia] de [mês] de [ano]” basta obter separadamente cada uma das partes como no exemplo a seguir.

        CultureInfo culture = new CultureInfo("pt-BR");
        DateTimeFormatInfo dtfi = culture.DateTimeFormat;

        int dia = DateTime.Now.Day;
        int ano = DateTime.Now.Year;
        string mes = culture.TextInfo.ToTitleCase(dtfi.GetMonthName(DateTime.Now.Month));
        string diasemana = culture.TextInfo.ToTitleCase(dtfi.GetDayName(DateTime.Now.DayOfWeek));
        string data = diasemana + ", " + dia + " de " + mes + " de " + ano;

        Response.Write(data);

O método ToTitleCase da classe TextInfo serve para converter a primeira letra da palavra para maiúsculo e os métodos GetMonthName e GetDayName da classe DateTimeFormatInfo servem para pegar o nome do mês e do dia da semana respectivamente.

No final a variável data conterá o dia por extenso. Por exemplo:

Domingo, 19 de Outubro de 2008

Para os dias menores que 10, se você preferir escreve-los com o zero antes basta aplicar o método ToString a variável dia.

string data = diasemana + ", " + dia.ToString("00") + " de " + mes + " de " + ano;

View this Post in: English French Italian Spanish

out 15

Depois de alguns dias pesquisando, encontrei algumas soluções viáveis para enviar um arquivo diretamente para a impressora (sem abrir janelas de diálogo), cada uma com suas limitações.


Solução 1: Fazer uma cópia do arquivo para o local da impressora

 

No prompt do DOS basta utilizar o comando:

copy nome_arquivo nome_impressora

O equivalente em C# é:

System.IO.File.Copy(nome_arquivo , nome_impressora);

Onde nome_arquivo é o nome físico completo do arquivo e nome_impressora é o nome do compartilhamento da impressora composto pelo IP ou nome da máquina mais o nome do compartilhamento.

Limitação: Imprime somente arquivos texto e a impressora deverá estar compartilhada.


Solução 2: Utilizar o comando print do windows.

Esta foi a melhor solução que encontrei. A idéia é utilizar o comando “print” do shell do Windows. Ao executar o comando, o Windows irá abrir o programa padrão estabelecido pelo tipo do arquivo e imprimir automaticamente, fechando o programa após a impressão.

Em Delphi utiliza-se o comando ShellExecute para executar um comando shell.

ShellExecute(Handle, 'print',PChar('arquivo'), nil,nil,SW_SHOW);

No Framework .Net não existe esta função, no entanto ela está implementada na dll shell32.dll do Windows. Para utiliza-la em C#, VB6 ou VB .Net devemos criar uma referência para a mesma.

[DllImport("shell32.dll", EntryPoint = "ShellExecute")]
public static extern int ShellExecuteA(int hwnd, string lpOperation,
     string lpFile, string lpParameters, string lpDirectory, int nShowCmd);

Para utilizar a directiva DllImport é preciso referênciar o namespace System.Runtime.InteropServices.
Veja o exemplo a seguir utilizado em um projeto do tipo Windows Application.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace ImprimeArquivo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                Form1.ShellExecuteA(this.Handle.ToInt32(), "print", ofd.FileName, null, null, 0);
            }
        }

        [DllImport("shell32.dll", EntryPoint = "ShellExecute")]
        public static extern int ShellExecuteA(int hwnd, string lpOperation,
              string lpFile, string lpParameters, string lpDirectory, int nShowCmd);
    }
}

Solução 3: http://support.microsoft.com/kb/322091/pt-br


View this Post in: English French Italian Spanish

out 06

Para saber a versão de uma dll criada a partir de um projeto do tipo Class Library basta utilizar o código:

typeof(NomedaSuaClasse).Assembly.GetName().Version;

Ou, se você chamar a instrução de dentro da classe, poderá fazer:

this.GetType().Assembly.GetName().Version;

Esses métodos retornam um objeto do tipo Version, que pode ser utilizado para pegar separadamente cada tipo de versão. Por exemplo, a versão de compilação, a maior verão, a menor versão, etc…

O código abaixo exemplifica o uso destes métodos em uma classe que pode ser chamada por exemplo em uma aplicação Web ou WinForm.

public class Info
{
    public static Version GetVersion()
    {
        return typeof(Info).Assembly.GetName().Version;
    }

    public static string GetVersionString()
    {
        Version version = Info.GetVersion();
        string versionstring = version.Major + "." + version.Minor +
            "." + version.Build + "." + version.Revision;
        return versionstring;
    }
}

Para chamar este método em sua aplicação faça por exemplo:

label.Text = "Versão:" + Info.GetVersionString();

Se estiver trabalhando com WinForms, você poderá usar o código abaixo para saber a versão do exe de sua aplicação:

Assembly.GetEntryAssembly().GetName().Version

Da mesma maneira que no exemplo anterior com a dll, poderá ser criado uma classe somente para retornar esta informação.

Obs.: Para alterar a versão da dll basta ir nas propriedades do projeto e na guia Application clique no botão “Assembly Information” como na figura abaixo.


View this Post in: English French Italian Spanish

out 05

Para pegar o valor de uma string de conexão do Web.Config basta utilizar a classe ConfigurationManager. Veja um exemplo:

string cs = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;

Onde strConn é o nome dado a sua string de conexão no Web.Config. Veja um exemplo do Web.Config:

<?xml version="1.0"?>
<configuration>
    <connectionStrings>
       <add name="strConn"
	connectionString="Data Source=192.168.0.1;Initial Catalog=Banco;
User ID=Usuario;Password=Senha;"
	providerName="System.Data.SqlClient"/>
    </connectionStrings>   
</configuration>

Se você se deparar com o erro “The name ‘ConfigurationManager’ does not exist in the current context” é porque provavelmente você está tentando pegar o valor desta string em um projeto do tipo Class Library. Para solucionar este problema basta referenciar no seu projeto a dll System.configuration.


View this Post in: English French Italian Spanish

set 30

Dígito verificador ou algarismo de controle é um mecanismo de autenticação utilizado para verificar a validade e a autenticidade de um valor numérico, evitando dessa forma fraudes ou erros de transmissão ou digitação.

É usado normalmente em representações numéricas que exijam integridade, como por exemplo CPF, CNPJ, RG.

O método de cálculo desses dígitos varia conforme o caso, porém muitos deles se baseiam em duas rotinas tradicionais: Módulo 11 e Módulo 10.

O cálculo do Módulo 10 é feito da seguinte maneira:

Cada dígito do número, começando da direita para a esquerda (menos significativo para o mais significativo) é multiplicado, na ordem, por 2, depois 1, depois 2, depois 1 e assim sucessivamente.

Número exemplo: 261533-4

  +---+---+---+---+---+---+   +---+
  | 2 | 6 | 1 | 5 | 3 | 3 | - | 4 |
  +---+---+---+---+---+---+   +---+
    |   |   |   |   |   |
   x1  x2  x1  x2  x1  x2
    |   |   |   |   |   |
   =2 =12  =1 =10  =3  =6
    +---+---+---+---+---+-> = (16 / 10) = 1, resto 6 => DV = (10 - 6) = 4

A função abaixo traduz este esquema na linguagem CSharp e poderá ser utilizada em seus projetos .net.

private string modulo10(string str)
{
    int digito=0;
    int flag=2;
    str=str.Substring(0,str.Length - 1);
    for (int i = str.Length-1; i >= 0; i--)
    {
        int valor = Convert.ToInt32(str[i].ToString()) * flag;
        int soma = 0;
        if (valor.ToString().Length > 1)
        {
            string svalor = valor.ToString();
            for (int j = 0; j < svalor.Length; j++)
            {
                soma += Convert.ToInt32(svalor[j].ToString());
            }
        }
        else
        {
            soma = valor;
        }
        digito += soma;
        flag = (flag == 2) ? 1 : 2;
    }
    digito = digito % 10;
    digito = 10 - digito;
    if (digito == 10)
    {
        digito = 0;
    }
    return digito.ToString();

}

Obs.: Todo o texto didático deste post foi extraído da Wikipédia obedecendo a licença GNU da mesma.


View this Post in: English French Italian Spanish

set 29

Fonetizar significa examinar a palavra sob o ponto de vista fonético. Analisar as partes da palavra pelo seu som e não pela escrita. Por exemplo: O nome Felipe pode ter várias variações como Filipe, Filipi, Filipe, Philipe, Phelipe, Phelipi.  Ao fonetizar esses nomes, chegamos sempre no mesmo resultado (FILIPI). 

A fonetização é muito útil para a utilização de buscas aproximadas. No exemplo acima, ao buscarmos o nome Felipe, poderíamos ter como retorno resultados contendo todos as outras variações do nome Felipe.

Para testar, você poderá baixar a classe de fonetização reescrita por mim em c# e utiliza-la em seu projeto .net. Para utilizar-la  basta chamar o método estático Fonetiza da classe Fonetico do Namespace Util. 

Ex.:

Response.Write(Util.Fonetico.Fonetiza("Felipe"));

Download
Classe para Fonetizar Textos (450) - 52 KB

nota
O código original estava escrito em Java e confesso que já não lembro onde consegui, para que assim colocasse os créditos devidos aqui.


View this Post in: English French Italian Spanish