RSS

Arquivo da categoria: Java

Validar dígito verificador CNPJ

JAVA – Framework TotalCross:

1º – Chamada ao método e conferência:

// Cnpj passado sem os dois últimos dígitos. No método calcDigVerifCnpj() os caracteres especiais são removidos. Ex:12.345.678/0001-
String digitoVerificador = calcDigVerifCnpj(edtCgcCpf.getText().substring(0, edtCgcCpf.getText().length() - 2));

if(!digitoVerificador.equals(edtCgcCpf.getText().substring(16)))
  System.out.println("Dígito verificador do CNPJ inválido");

2º – Método que calcula o dígito verificador do CNPJ:

public String calcDigVerifCnpj(String cnpj) {  
		
   cnpj = formataRemocaoCaracteresEspeciais(cnpj);
		
   int[] arrNum = new int[]{5,4,3,2,9,8,7,6,5,4,3,2};
		
   int soma = 0, divisao = 11, primDig = 0, segDig = 0;  
   for (int i = 0; i < arrNum.length; i++)
      soma += arrNum[i] * Integer.parseInt(cnpj.substring(i, i+1));
        
   primDig = (soma % divisao);
        
   if(primDig < 2)
      primDig = 0;
   else
      primDig = (11 - primDig);
        	
   cnpj += primDig;
        
   arrNum = new int[]{6,5,4,3,2,9,8,7,6,5,4,3,2};
   soma = 0;
   for (int j = 0; j < arrNum.length; j++)
      soma += arrNum[j] * Integer.parseInt(cnpj.substring(j, j+1));
        
   segDig = (soma % divisao);
        
   if(segDig < 2)
      segDig = 0;
   else
      segDig = (11 - segDig);
        
   return ""+primDig + segDig;  
}

3º – Remoção dos caracteres especiais:

public String formataRemocaoCaracteresEspeciais(String valor){

   if (valor.indexOf(",") != -1 || valor.indexOf(".") != -1 || valor.indexOf("-") != -1 || valor.indexOf("/") != -1) {

      StringBuffer valorAux = new StringBuffer();
      for (int i = 0; i < valor.length(); i++)
         if ((valor.charAt(i) != ',') && (valor.charAt(i) != '.') && (valor.charAt(i) != '-') && (valor.charAt(i) != '/'))
            valorAux.append(valor.charAt(i));

      valor = valorAux.toString();
  }      
  return valor;
}

 
Leave a comment

Publicado por em 20 julho 2011 em Métodos - formatações

 

Validar dígito verificador CPF

JAVA – Framework TotalCross:

1º – Chamada ao método e conferência:

// Cpf passado sem os dois últimos dígitos. No método calcDigVerifCpf() os caracteres especiais são removidos. Ex:123.456.789-
String digitoVerificador = calcDigVerifCpf(edtCgcCpf.getText().substring(0, edtCgcCpf.getText().length() - 2));

if(!digitoVerificador.equals(edtCgcCpf.getText().substring(12)))
  System.out.println("Dígito verificador do CPF inválido");

2º – Método que calcula o dígito verificador do CPF:

public String calcDigVerifCpf(String cpf) {

   cpf = formataRemocaoCaracteresEspeciais(cpf);

   int soma = 0, divisao = 11, primDig = 0, segDig = 0;
   for (int i = 1; i <= 9; i++)
      soma += i * Integer.parseInt(cpf.substring(i-1, i));

   primDig = (soma % divisao);

   if(primDig == 10)
      primDig = 0;

   cpf += primDig;

   soma = 0;
   for (int j = 0; j <= 9; j++)
      soma += j * Integer.parseInt(cpf.substring(j, j+1));

   segDig = (soma % divisao);

   if(segDig == 10)
      segDig = 0;

   return ""+primDig + segDig;
}

3º – Remoção dos caracteres especiais:

public String formataRemocaoCaracteresEspeciais(String valor){

   if (valor.indexOf(",") != -1 || valor.indexOf(".") != -1 || valor.indexOf("-") != -1 || valor.indexOf("/") != -1) {

      StringBuffer valorAux = new StringBuffer();
      for (int i = 0; i < valor.length(); i++)
         if ((valor.charAt(i) != ',') && (valor.charAt(i) != '.') && (valor.charAt(i) != '-') && (valor.charAt(i) != '/'))
            valorAux.append(valor.charAt(i));

      valor = valorAux.toString();
  }      
  return valor;
}

 
Leave a comment

Publicado por em 20 julho 2011 em Métodos - formatações

 

Formatar moeda real

// Converte um valor string sem pontuações para moeda real
public String formataMoeda(String valor){
  try {
    BigDecimal bigValor = new BigDecimal(valor).setScale(2, BigDecimal.ROUND_HALF_DOWN);
			
    int pos = -1;
    if((pos = bigValor.toString().indexOf(".")) > 0)
      bigValor = new BigDecimal( bigValor.toString().substring(0, pos) + bigValor.toString().substring(pos + 1));
      //bigValor = new BigDecimal(bigValor.toString().replace(".", ""));
			
    String vlrConvert = bigValor.toString();
			
    // Valor negativo. Remove o sinal e atribui ao final
    String antes = "";
    if (vlrConvert.charAt(0) == '-'){
      antes = "-";
      vlrConvert = vlrConvert.substring(1);
    }
		
    if(vlrConvert.length() < 3)
      vlrConvert = preencheString(vlrConvert, 3, '0', true);
		
    String centavos = vlrConvert.substring(vlrConvert.length() - 2);
    vlrConvert = vlrConvert.substring(0, vlrConvert.length() - 2);
			
    String aux = "";
    while (vlrConvert.length() > 0){
      if(vlrConvert.length() > 3){
        aux = "."+vlrConvert.substring(vlrConvert.length() -3) + aux;
	vlrConvert = vlrConvert.substring(0, vlrConvert.length() -3);
      }else{
	aux = vlrConvert + aux;
	vlrConvert = "";
      }
    }
			
    return antes + aux + "," + centavos;
  } catch (InvalidNumberException e) {
    return "";
  }
}

 
Leave a comment

Publicado por em 15 abril 2011 em Métodos - formatações

 

Preenchimento de string

// Preencher string com tamanho e caracter desejado, antes ou depois do conteúdo existente.
public String preencheString(String text, int size, char caracter, boolean before) {
  if (text == null)
    text = "";
  else if(text.length() > size )
    return text.substring(0, size);

  StringBuffer strBufferReduzida = new StringBuffer();

  // Completa com o caracter passado a string até o tamanho indicado
  while (strBufferReduzida.length() + text.length() < size)
    strBufferReduzida.append(caracter);

    if (before)
      return strBufferReduzida.append(text).toString();
    else
      return text.concat(strBufferReduzida.toString());
}

 
Leave a comment

Publicado por em 15 abril 2011 em Métodos - formatações

 

Formatar CPF / CGC

JAVA – Framework TotalCross:

edtCgcCpf.setValidChars(Edit.numbersSet);
edtCgcCpf.addKeyListener(new KeyListener(){
     public void actionkeyPressed(KeyEvent arg0) {
     }
     public void keyPressed(KeyEvent arg0) {
          if (edtCgcCpf.getCursorPos()[0] == -1)
	       edtCgcCpf.setCursorPos(edtCgcCpf.getText().length() + 1, edtCgcCpf.getText().length() + 1);
	  }
     public void specialkeyPressed(KeyEvent arg0) {
          if (edtCgcCpf.getCursorPos()[0] == -1)
	       edtCgcCpf.setCursorPos(edtCgcCpf.getText().length(), edtCgcCpf.getText().length());
	  }
});

EventType.ControlEvent.FOCUS_OUT:{

     if(!edtCgcCpf.getText().equals(""))
          edtCgcCpf.setText(formataCgcCpf(edtCgcCpf.getText()));

}

public String formataCgcCpf(String cgcCpf){
     cgcCpf = formataRemocaoCaracteresEspeciais(cgcCpf);
     int size = cgcCpf.length();

     String aux = "";
     int ctrl = 0;
     if(size > 11){
          while(cgcCpf.length() > 0){
	       if(ctrl == 0){
	            aux += cgcCpf.substring(0, 2) + ".";
		    cgcCpf = cgcCpf.substring(2, cgcCpf.length());
		    ctrl = 1;
	       }else{
	            if(cgcCpf.length() > 3){
		         aux += cgcCpf.substring(0, 3) + ".";
			 cgcCpf = cgcCpf.substring(3, cgcCpf.length());
		    }else{
		 	 aux += cgcCpf;
			 cgcCpf = "";
		    }
	       }
	  }
     }else{
          while(cgcCpf.length() > 0){
	       if(cgcCpf.length() > 3){
	            aux += cgcCpf.substring(0, 3) + ".";
		    cgcCpf = cgcCpf.substring(3, cgcCpf.length());
	       }else{
		    aux += cgcCpf;
		    cgcCpf = "";
	       }
	  }
     }

     if((size > 10) && (ctrl == 0))
          return aux.substring(0, 11) + "-" + aux.substring(12);
     else if((size < 12) && (ctrl == 1))
	  return aux.substring(0, 10) + "/" + aux.substring(11);
     else if((size < 13) && (ctrl == 1))
          return aux.substring(0, 10) + "/" + aux.substring(11, 14) + aux.substring(15);
     else if((size > 12) && (ctrl == 1)){
          if(size > 14)
	       return aux.substring(0, 10) + "/" + aux.substring(11, 14) + aux.substring(15, 16) + "-" + aux.substring(16, 18);
	  else
	       return aux.substring(0, 10) + "/" + aux.substring(11, 14) + aux.substring(15, 16) + "-" + aux.substring(16);
     }
     else
          return aux;
}

public String formataRemocaoCaracteresEspeciais(String valor){
     if (valor.indexOf(",") != -1 || valor.indexOf(".") != -1 || valor.indexOf("-") != -1 || valor.indexOf("/") != -1) {
          StringBuffer valorAux = new StringBuffer();
	  for (int i = 0; i < valor.length(); i++)
	       if ((valor.charAt(i) != ',') && (valor.charAt(i) != '.') && (valor.charAt(i) != '-') && (valor.charAt(i) != '/'))
	            valorAux.append(valor.charAt(i));

	  valor = valorAux.toString();
     }
     return valor;
}

 
Leave a comment

Publicado por em 15 abril 2011 em Métodos - formatações

 

Emulador para windows mobile 6.5

Buenas, como nosso mundo móvel vive de upgrades, lanço este post para apresentar o emulador para Windows Mobile 6.5.

Para aqueles que vinham utilizando da versão anterior, o emulador Windows Mobile 6.0, sabe da importância do mesmo para testar aplicações antes de realmente reportar ao dispositivo móvel. Este novo emulador consiste em atender uma gama de resoluções diferentes da versão anterior e claro relembrando, possibilita interagir com a nova interface, conhecendo-a e tornando-a amigável.

As resoluções estão disponíveis em duas versões distintas: Standard e Professional.

No emulador windows mobile 6.5 professional prevê as resoluções QVGA (mais comum em PDAs touch-screen), VGA (HTC Diamond), WQVGA (Samsung Omnia), WVGA (HTC Touch HD e Diamond II) e equipamentos com ecrã quadrado, enquanto a versão Standard prevê a variante clássica e a mais recente QVGA (Samsung i600, Motorola Q9, etc).

Infelizmente ainda não temos a versão do emulador em português, mas creio que em breve será disponibilizada e assim que souber disponibilizo o link para download.

Standard – Não necessitei instalar.

  • Samsung i600 (240×320 pixels);
  • Motorola Q9 (320×240 pixels);
  • Etc…

Professional – Inclui cinco tipos diferentes de resoluções.

  • Windows Mobile 6.5 Professional Square (320×320 pixels);
  • Windows Mobile 6.5 Professional VGA (480×640 pixels);
  • Windows Mobile 6.5 Professional WQVGA (240×400 pixels);
  • Windows Mobile 6.5 Professional WVGA (480×800 pixels);
  • Windows Mobile 6.5 Professional (240×320 pixels);

No meu caso tinha a versão anterior instalada na máquina, windows mobile 6.0. Desta forma apenas alguns pacotes foram agregados ao diretório e o acesso ao emulador permaneceu o mesmo, mas também podendo manipular através do Device Emulator Manager.

Estou buscando como habilitar a rede, não obtive sucesso. Conseguindo apresento aqui.

Caso ache necessário, visualize este vídeo demonstrativo:
http://www.youtube.com/watch?v=5M2W2MJ_ReQ

Fontes:

http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&FamilyID=20686a1d-97a8-4f80-bc6a-ae010e085a6e

http://msmvps.com/blogs/albertosilva/archive/2009/06/04/windows-mobile-6-5-emulador-j-225-dispon-237-vel.aspx

 
Leave a comment

Publicado por em 6 outubro 2010 em Emulador windows mobile

 

Tags: ,

Refresh em campo ajax [arquivo pai - filho]

Estive desenvolvendo uma aplicação web e me deparei com a seguinte situação:

Atualizar um campo ajax que existe no arquivo principal (pai), através de um pop-up (filho).
Se esta é sua dúvida, continue lendo … tenho a solução!

Obs: Não foco como implementar o ajax, parto do princípio que você já tenha moldado o ajax aos arquivos.

Exemplo:

Em um formulário de produtos, tenho um combo gêneros, carregado utilizando ajax. Neste campo facilitaria bastante se existisse uma maneira de cadastrar estas informações apartir da tela de produtos, portanto, cria-se um pop-up, desenvolve o formulário de gêneros e salva as informações.
Mas como ao salvar, retornar para a tela principal com esta nova informação atualizada no combo ajax?
Bom, … a solução:

No action do formulário, chame o próprio pop-up, salve as informações, em seguida identifique o browser, pois a função utilizada difere, feche a janela pop-up e então no body chame a função onunload (execução ao fechar a janela), e use a função window.opener.execScript ou window.opener.eval. O truque esta em que ambas as funções possibilitam a chamada de uma função javascript existente no arquivo principal, esta função que será chamada deve ser a que carrega seu combo ajax.
Visualize as descrições no código abaixo [Resumidamente]:

Arquivo Principal (Pai):

<!– Função javascript que carrega informações combo ajax –>

 function carregar_generos(){

 ajax(‘id_genero’, ‘caminho_arq_ajax’, ‘method’);

}

<!– Identificação do combo ajax –>

<span id=”id_genero”>

<select name=”CODIGOGENERO” id=”CODIGOGENERO” class=”TextFieldMntObrig”>

<option value=”0″>Selecione o Gênero</option>

</select>

</span>

<!– Chamada do pop-up –>

<a onClick=”window.open(‘caminho_arq_popup’,'genero’,'top=400, left=400, width=800, height=150′);”>

Adicionar Gênero

</a>

Arquivo Pop-Up (Filho):


// Salva as informações e fecha a janela pop-up

if(acao for gravar)){

// Faz os procedimentos para gravar as informações no bd de gêneros
// Obriga a fechar a janela de pop-up (Aqui dispara o onunload)

<script language=”javascript”>window.close();</script>

}

/* Método que identica o browser – IE e FireFox */
<script language=”JavaScript”>

var nom = navigator.appName;
var browser = 2;

if (nom == “Microsoft Internet Explorer”){

alert(“Microsoft Internet Explorer”);
browser = 1;

}else if (nom == “Netscape”){

alert(“Netscape”);
browser = 2;

}

</script>

<!– Formulário e o truque, chamada da função javascript no arquivo principal –>
<html>

<body onunload=”javascript:if(browser == 1) window.opener.execScript(‘carregar_generos()’); else window.opener.eval(‘carregar_generos()’);”>

<form name=”frmGenero” method=”post” action=”nome_arquivo_popup.extensao?acao=gravar” id=”frmGenero”>

<!– Conteúdo do formulário –>

</form>

</body>

</html>

Pronto, … bronca resolvida!

 
Leave a comment

Publicado por em 24 junho 2010 em Refresh em campo ajax

 

Tags: , , , , , , ,

Blackberry como modem

Neste tópico esta explícito como proceder para obter acesso a internet no seu notebook ou desktop através da conexão 3G do aparelho blackberry.

Para tanto proceda com os seguintes passos:

  1. Configurar as opções de telefone e modem (ponto de acesso).
  2. Configurar a conexão de rede.
  3. Conectar-se a internet através da conexão de rede ou mapeá-la no software do blackberry (Desktop Manager) versão 4.2 ou superior e conectar.
  • Configurando opções de telefone e modem – Ponto de Acesso [ S.O. XP ]:

- Acessar “Menu Iniciar” – “Configurações” – “Painel de Controle”.
- Acessar “Opções de Telefone e Modem”.
- Na janela de “Opções de Telefone e Modem”, acessar aba “Modems”.
- Selecione “Modem Padrão” e clique no botão “Propriedades”.
- Na janela de propriedades do Modem Padrão, acessar a aba “Avançadas”.
- No campo “Comandos Adicionais de Inicialização” digitar o seguinte comando:

+cgdcont=1,”ip”,”???.com.br” ( ??.com.br – especificar conforme operadora )

Ex: Operadoras:

TIM   = +cgdcont=1,”ip”,”tim.br”
Claro = +cgdcont=1, “ip”, “claro.com.br”
Vivo  = +cgdcont=1, “ip”, “zap.vivo.com.br”

- Clique no botão OK.
- E por fim na janela “Opções de Telefone e Modem”, clique no botão OK.

  • Configurando a conexão de rede [ S.O. XP ]:

- Acessar “Menu Iniciar” – “Configurações” – “Painel de Controle”.
- Acessar “Conexões de Rede” – “Criar nova conexão” (Vista: “Centro de rede e compartilhamento”).
- Clique no botão “Avançar”.
- Selecione a opção “Conectar-me a Internet”. Clique no botão “Avançar”.
- Selecione a opção “Configurar minha conexão manualmente”. Clique no botão “Avançar”.
- Selecione a opção “Conectar-me usando um modem dial-up”. Clique no botão “Avançar”.
- Se surgir tela para selecionar conexão, escolha a opção Modem Padrão.
- No campo “nome do provedor” atribuir nome para conexão (Sugestão: BlackBerry)
- No campo “número do telefone”, digite *99# (ou número fornecido pela operadora).
- Clique no botão “Avançar”.
- Informe usuários que terão acesso a nova conexão. Clique no botão “Avançar”.
- Informe login e senha do seu provedor de serviço (de acordo operadora).

Ex: Operadoras:

Claro: usr: claro pwd: claro
Vivo : usr: vivo  pwd: vivo

- Clique no botão “Avançar”.
- Clique no botão “Concluir”.

- Na conexão que você criou, clique com o botão direito e acesse “Propriedades”.
- Observe e informe a opção “Modem Padrão”, clique no botão “Configurar”.
- Observe e desabilite a opção “Ativar o controle de fluxo por hardware”, caso as demais estejam habilitadas, desabilite-as. Clique no botão “OK”.

Feito estes procedimentos, efetue conexão. Clicando sobre a sua conexão gerada com o botão direito e conectar. Caso preferir utilize o software do BlackBerry (Desktop Manager) e acesse a opção de conexões mapeie a sua conexão criada no software e é só conectar.

Pronto, seu desktop estará acessando a internet através da conexão 3G do seu BlackBerry.

Lembre-se de deixar unicamente habilitado no seu aparelho a conexão 3G.

Caso ainda restar dúvidas a respeito do assunto abordado acima, sugiro que veja este vídeo especificado abaixo:

Configurando BlackBerry como Modem

 
Leave a comment

Publicado por em 6 abril 2010 em Blackberry como modem

 

Tags:

Integração entre java plataform micro edition SDK 3.0 e emulador windows mobile

A fim de facilitar a compreensão do funcionamento das ferramentas “JME SDK 3.0” e “Emulador WM”, descrevo resumidamente os procedimentos que foram necessários para rodar uma aplicação feita em J2ME com foco inicial ao sistema PalmOS, mas que atualmente necessitou ser adaptado ao sistema WM 6.0.

Bom …, partindo do princípio que a JME SDK 3.0 e o Emulador WM, ambos estejam instalados no PC, prosseguimos, caso contrário, veja ambos os tópicos antes de prosseguir. Após, execute ambas as ferramentas.

No emulador, acesse:

  1. file.
  2. Configure …
  3. Aba General ….  ao final você deve configurar as seguintes informações:
  • Host Key:    Right Alt
  • Func Key:    193
  • Shared Folder:    c:\Java_ME_Plataform_SDK_3.0\on-device\WinMobile-orm

Sendo o “Shared Folder”, responsável pelo mapeamento do diretório onde encontra-se o arquivo que desejamos instalar no emulador. No caminho acima especificado, se instalado, o default da JME SDK 3.0, você encontrará a máquina virtual que acompanha a ferramenta, caso contrário, localize o diretório correspondente. Bom, após mapearmos, vamos a instalação da mesma no emulador.

Acesse no menu do emulador:

  1. Start.
  2. Programas.
  3. Gerenciador de Arquivos.
  4. Storage Card.
  5. sun_java_cldc_emu.cab

Agora localizada basta efetuar a instalação. Todo arquivo que for mapeado no Shared Folder, pode-se ser encontrado no Storage Card do Emulador, para assim proceder com a instalação.

Após ter instalado a VM no emulador, acesse o JME SDK 3.0, siga os seguintes passos:

  1. Abra seu projeto.
  2. Clique sobre ele com o botão direito.
  3. Acesse as propriedades.
  4. Opção Plataform.
  5. Opção device.

Deve ter aparecido automaticamente “CldcWinceEmu1”, basicamente ao selecioná-lo, as configurações pré-definidas são mapeadas, bastando agora apenas compilar seu projeto, gerando os arquivos .jar e .jad.

Para obter o perfeito funcionamento da minha aplicação, tive de instalar e rodar a partir de uma VM diferente da pré-instalada, da que é oferecida pelo fabricante, a “Midlet Manager”. Foi necessário a instalação da “Weme”, na qual disponibilizo o link abaixo, onde pode ser feito o download.

     Site para Downoad – Máquina Virtual - Weme     

 Após instalada, basta acessar na VM:

  1. Weme.
  2. Bin.
  3. Emulador.

No meu caso, utilizei a versão Weme – Cldc 1.1 e MIDP 2.0. Seguindo estes procedimentos tive sucesso na execução da minha aplicação.

Ainda necessitei que o emulador tivesse acesso a rede, portanto para que isto funcionasse precisei instalar o virtual PC 2007, criei uma base, mas não instalei outro sistema operacional e  a rede passou a funcionar. Caso seja preciso disponibilizo o link abaixo, onde pode ser feito o download e também um tutorial.

     Site para Download – Virtual PC 2007

     Tutorial para Instalação – Virtual PC 2007

Utilizei um tutorial que foi crucial para compreender a integração entre estas ferramentas. Como ele tem ilustrações sobre os procedimentos descritos aqui neste tópico, disponibilizo para que possa ser utilizado em paralelo, ou para esclarecer algum ponto que eu possa ter me esquecido de comentar.

     Tutorial de Integração entre JME SDK 3.0 & Emulador WM 6

 
Leave a comment

Publicado por em 24 dezembro 2009 em J2ME SDK 3.0 e emulador WM

 

Tags: , , ,

Emulador para windows mobile 6

Este emulador foi de grande valia para o desenvolvimento de aplicações J2ME para Windows Mobile 6.0, utilizando a ferramenta da SUN SDK 3.0. Abaixo, descrevo rapidamente sobre alguns benefícios de utilizar o emulador e disponibilizo link para aprofundar os conhechimentos e caso desejar efetuar o download.

Este emulador consiste em emular o sistema operacional do Windows Mobile 6.0, permitindo efetuar testes em aplicações e/ou conhecer o funcionamento do sistema operacional.

Este emulador ainda agrega o Cellular Emulator, que permite simular conexões GPRS e testar aplicações que acessam dados on-line e/ou WebServices.

O Windows Mobile 6 Emulator está disponível em diversos idiomas, e em duas versões diferentes:

Standard – Inclui três tipos diferentes de emulatores

  • Windows Mobile 6 Standard (176×220 pixels – 96 dpi);
  • Windows Mobile 6 Standard Landscape QVGA (240×320 pixels – 131 dpi);
  • Windows Mobile 6 Standard QVGA (320×240 pixels – 131 dpi)

Professional – Inclui seis tipos diferentes de emulatores.

  • Windows Mobile 6 Classic (240×320 pixels – 96 dpi);
  • Windows Mobile 6 Professional (240×320 pixels – 96 dpi);
  • Windows Mobile 6 Professional Square (240×240 pixels – 96 dpi);
  • Windows Mobile 6 Professional Square QVGA (320×320 pixels – 128 dpi);
  • Windows Mobile 6 Professional Square VGA (480×480 pixels – 192 dpi);
  • Windows Mobile 6 Professional VGA (480×640 pixels – 192 dpi)

No link especificado na fonte abaixo é possível encontrar mais detalhes a respeito da ferramenta e você encontra link’s para download em diferentes linguagens e versões.

Fonte:
http://www.pdaexpert.net/downloads/windows-mobile/windows-mobile-6-emulator-localized-images/

 
Leave a comment

Publicado por em 11 dezembro 2009 em Emulador windows mobile

 

Tags: ,

 
Seguir

Obtenha todo post novo entregue na sua caixa de entrada.