![]() |
|||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
|
C++ ::: Win32 API (Windows API) ::: Passos Iniciais |
Como usar a função WinMain das aplicações C++ GUI usando a Windows APIQuantidade de visualizações: 9857 vezes |
Cada programa de interface gráfica escrito em C++ e usando a Windows API possui como ponto de entrada de execução, a função WinMain(). Esta função é a equivalente do main() em aplicações console. Veja sua assinatura:int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) É possível usar esta função sem a macro WINAPI, ou seja: int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) O primeiro passo a observar é que esta função deve retornar um valor inteiro quando finalizar. Isso serve para informar ao sistema operacional se algum erro ocorreu durante a tentativa de sua execução. Vejamos agora uma explicação detalhada de seus parâmetros: HINSTANCE hInstance - É um handle para o módulo executável do programa (o arquivo .exe na memória). HINSTANCE hPrevInstance - Sempre NULL para programas Win32. LPSTR lpCmdLine - Os argumentos da linha de comando como uma única string. Não inclui o nome do programa. int nCmdShow - Um valor inteiro que pode ser passado para a função ShowWindow(). hInstance é usado para tarefas tais como carregar recursos ou outras que são realizadas em um módulo. Um módulo é um EXE ou DLL carregada em seu programa. hPrevInstance era usado como um handle para uma instância executada anteriormente no Win16. Este cenário não mais ocorre. Em Win32 podemos ignorar por completo este parâmetro. |
Java ::: Java + MySQL ::: Metadados da Base de Dados (Database Metadata) |
Java MySQL - Como obter os tipos de dados suportados pelo MySQL e seus correspondentes JDBC usando o método getTypeInfo() da interface DatabaseMetaDataQuantidade de visualizações: 6207 vezes |
Em algumas situações precisamos obter os tipos de dados suportados pelo MySQL e mapeá-los para seus correspondentes JDBC. Esta não é uma tarefa fácil, mas que, com uma pequena ajuda dos recursos de reflexão do Java, pode ser realizada depois de algumas xícaras de café. O primeiro passo é obter os tipos de dados suportados pelo MySQL com uma chamada ao método getTypeInfo() da interface DatabaseMetaData. Os campos do ResultSet que nos interessam são TYPE_NAME e DATA_TYPE. TYPE_NAME traz o nome do tipo de dados no MySQL enquanto DATA_TYPE traz o tipo JDBC correspondente como um inteiro. Assim, o que temos que fazer é usar reflexão para obter todos os campos da classe java.sql.Types e efetuar um mapeamento entre os tipos. Veja o código completo para o exemplo: package estudosbancodados; import java.lang.reflect.Field; import java.sql.*; import java.util.HashMap; import java.util.Map; public class EstudosBancoDados{ static Map mapa; // usado para mapear os tipos JDBC public static void main(String[] args) { // strings de conexão String databaseURL = "jdbc:mysql://localhost/estudos"; String usuario = "root"; String senha = "osmar1234"; String driverName = "com.mysql.jdbc.Driver"; try { Class.forName(driverName).newInstance(); Connection conn = DriverManager.getConnection(databaseURL, usuario, senha); // vamos obter um objeto da classe com.mysql.jdbc.DatabaseMetaData DatabaseMetaData dbmd = conn.getMetaData(); // vamos obter os tipos de dados suportados por esta versão do MySQL // e seus correspondentes JDBC ResultSet tiposDados = dbmd.getTypeInfo(); while(tiposDados.next()){ System.out.println("MySQL: " + tiposDados.getString("TYPE_NAME") + " - JDBC: " + getJdbcTypeName(Integer.parseInt(tiposDados.getString("DATA_TYPE")))); } // vamos fechar o ResultSet tiposDados.close(); } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("VendorError: " + ex.getErrorCode()); } catch (Exception e) { System.out.println("Problemas ao tentar conectar com o banco de dados: " + e); } } // Este método retorna o nome de um tipo JDBC // O retorno é null se o tipo JDBC não puder ser reconhecido public static String getJdbcTypeName(int jdbcType){ // vamos usar reflection para mapear valores inteiros a seus nomes if(mapa == null) { mapa = new HashMap(); // vamos obter todos os campos da classe java.sql.Types Field[] campos = java.sql.Types.class.getFields(); // vamos percorrer os campos for(int i = 0; i < campos.length; i++){ try{ // vamos obter o nome do campo String nome = campos[i].getName(); // vamos obter o valor do campo Integer valor = (Integer)campos[i].get(null); // vamos adicionar ao mapa mapa.put(valor, nome); } catch(IllegalAccessException e){ System.out.println("Ops: " + e.getMessage()); } } } // vamos retornar o nome do tipo JDBC return (String)mapa.get(new Integer(jdbcType)); } } O resultado da execução deste código foi: MySQL: BIT - JDBC: BIT MySQL: BOOL - JDBC: BIT MySQL: TINYINT - JDBC: TINYINT MySQL: TINYINT UNSIGNED - JDBC: TINYINT MySQL: BIGINT - JDBC: BIGINT MySQL: BIGINT UNSIGNED - JDBC: BIGINT MySQL: LONG VARBINARY - JDBC: LONGVARBINARY MySQL: MEDIUMBLOB - JDBC: LONGVARBINARY MySQL: LONGBLOB - JDBC: LONGVARBINARY MySQL: BLOB - JDBC: LONGVARBINARY MySQL: TINYBLOB - JDBC: LONGVARBINARY MySQL: VARBINARY - JDBC: VARBINARY MySQL: BINARY - JDBC: BINARY MySQL: LONG VARCHAR - JDBC: LONGVARCHAR MySQL: MEDIUMTEXT - JDBC: LONGVARCHAR MySQL: LONGTEXT - JDBC: LONGVARCHAR MySQL: TEXT - JDBC: LONGVARCHAR MySQL: TINYTEXT - JDBC: LONGVARCHAR MySQL: CHAR - JDBC: CHAR MySQL: NUMERIC - JDBC: NUMERIC MySQL: DECIMAL - JDBC: DECIMAL MySQL: INTEGER - JDBC: INTEGER MySQL: INTEGER UNSIGNED - JDBC: INTEGER MySQL: INT - JDBC: INTEGER MySQL: INT UNSIGNED - JDBC: INTEGER MySQL: MEDIUMINT - JDBC: INTEGER MySQL: MEDIUMINT UNSIGNED - JDBC: INTEGER MySQL: SMALLINT - JDBC: SMALLINT MySQL: SMALLINT UNSIGNED - JDBC: SMALLINT MySQL: FLOAT - JDBC: REAL MySQL: DOUBLE - JDBC: DOUBLE MySQL: DOUBLE PRECISION - JDBC: DOUBLE MySQL: REAL - JDBC: DOUBLE MySQL: VARCHAR - JDBC: VARCHAR MySQL: ENUM - JDBC: VARCHAR MySQL: SET - JDBC: VARCHAR MySQL: DATE - JDBC: DATE MySQL: TIME - JDBC: TIME MySQL: DATETIME - JDBC: TIMESTAMP MySQL: TIMESTAMP - JDBC: TIMESTAMP |
PHP ::: Dicas & Truques ::: Data e Hora |
Datas e horas em PHP - Como obter a quantidade de dias entre duas datasQuantidade de visualizações: 1 vezes |
Nesta dica mostrarei como podemos efetuar um cálculo em PHP que retorna o número de dias entre duas datas. Fique atento(a) à ordem que a data inicial e a data final são fornecidos para a função. Veja o código PHP completo: <html> <head> <title>Estudando PHP</title> </head> <body> <?php function quant_dias($data1, $data2){ return round((strtotime($data2) - strtotime($data1)) / (24 * 60 * 60), 0); } $inicio = date("m/d/Y"); // data atual $fim = "04/22/2021"; // data no formato mês/dia/ano echo "Dias entre as duas datas: " . quant_dias($inicio, $fim); ?> Ao executarmos este código nós teremos o seguinte resultado: Dias entre as duas datas: 31 |
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como renomear ou mover arquivos em C# usando a função Move() da classe FileQuantidade de visualizações: 16574 vezes |
O método Move() da classe File é útil quando precisamos renomear ou mover arquivos. Este método recebe os caminhos e nomes antigo e novo do arquivo a ser renomeado ou movido de diretório. Veja um trecho de código no qual mostramos como renomear um arquivo texto (sem movê-lo para um diretório diferente): static void Main(string[] args){ // não esqueça // using System.IO; // caminho e nome atual do arquivo string antigo = "C:\\estudos_csharp\\arquivo.txt"; // caminho e novo nome do arquivo string novo = "C:\\estudos_csharp\\arquivo2.txt"; // vamos renomear o arquivo File.Move(antigo, novo); Console.WriteLine("Arquivo renomeado com sucesso."); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } |
Java ::: Dicas & Truques ::: Arquivos e Diretórios |
Como excluir um diretório em Java usando o método delete() da classe File - Curso de Java para iniciantesQuantidade de visualizações: 9767 vezes |
Em algumas situações nós precisamos excluir um ou mais diretórios a partir de nossos códigos Java. Para isso nós podemos usar o método delete() da classe File, no pacote java.io. Veja o código completo para o exemplo: package arquivodecodigos; import java.io.*; public class Estudos{ public static void main(String[] args){ File diretorio = new File("c:\\java"); if(diretorio.delete()){ System.out.println("Diretorio excluido com sucesso."); } else{ System.out.println("Não foi possivel excluir o diretorio"); } } } Ao executarmos este código nós teremos o seguinte resultado (assumindo que você tem um diretório chamado "c:\\java"): Diretorio excluido com sucesso. Lembre-se de que o método delete() da classe File só permitirá a exclusão do diretório se este estiver vazio. |
HTML5 ::: HTML5 + JavaScript ::: Canvas |
Programação gráfica para iniciantes - Como desenhar círculos com ou sem preenchimento usando o método arc() do objeto Canvas do HTML5Quantidade de visualizações: 6880 vezes |
Podemos usar o método arc() do objeto Canvas do HTML5 para desenhar círculos com ou sem prenchimento. Veja nos exemplos abaixo como isso pode ser feito. Primeiro um círculo sem preenchimento:<!doctype html> <html> <head> <title>O objeto Canvas do HTML5</title> </head> <body> <Canvas id="canvas1" width="500" height="350"></Canvas> <script type="text/javascript"> // obtemos uma referência ao elemento Canvas var canvas = document.getElementById("canvas1"); // obtemos o contexto de desenho var contexto = canvas.getContext("2d"); // vamos desenhar um círculo sem preenchimento com raio de 80 contexto.beginPath(); // início um novo caminho // o círculo começa no x = 100, y = 100, começa no ângulo 0 // e vai até o ângulo 360 (as medidas são em radianos, não em graus) contexto.arc(100, 100, 80, 0, 2 * Math.PI, false); contexto.lineWidth = 2; // largura da linha contexto.strokeStyle = '#990000'; // cor da linha contexto.stroke(); // realiza o desenho </script> </body> </html> Ao abrir esta página HTML nós teremos o seguinte resultado: ![]() E agora um círculo preenchido: <!doctype html> <html> <head> <title>O objeto Canvas do HTML5</title> </head> <body> <Canvas id="canvas1" width="500" height="350"></Canvas> <script type="text/javascript"> // obtemos uma referência ao elemento Canvas var canvas = document.getElementById("canvas1"); // obtemos o contexto de desenho var contexto = canvas.getContext("2d"); // vamos desenhar um círculo sem preenchimento com raio de 80 contexto.beginPath(); // início um novo caminho // o círculo começa no x = 100, y = 100, começa no ângulo 0 // e vai até o ângulo 360 (as medidas são em radianos, não em graus) contexto.arc(100, 100, 80, 0, 2 * Math.PI, false); // vamos preencher o círculo contexto.fillStyle = "#CCCCCC"; // cor do preenchimento contexto.fill(); // preenche de fato contexto.lineWidth = 2; // largura da linha contexto.strokeStyle = '#990000'; // cor da linha contexto.stroke(); // realiza o desenho </script> </body> </html> Ao abrir esta página HTML nós teremos o seguinte resultado: ![]() |
JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como testar se todos os elementos de um array satisfazem uma condição em JavaScript usando a função every()Quantidade de visualizações: 1573 vezes |
Em algumas situações nós gostaríamos de testar todos os elementos de um vetor e verificar se todos eles passam em um determinado teste. Para isso podemos usar a função every(), adicionada à linguagem JavaScript por meio do ECMAScript 5 (JavaScript 5, ECMAScript 2009, ES5). Este método nos permite fornecer uma função de callback que será chamada para cada um dos elementos do vetor. E o retorno do método every() é um valor true se todos os elementos passarem no teste e false em caso contrário. Veja um exemplo no qual testamos se TODOS os elementos de um vetor são maiores que 10: <script type="text/javascript"> function testarTodos(valor, indice, vetor){ if(valor > 10){ return true; } } var valores = new Array(21, 50, 30, 70, 12, 3); // vamos verificar se TODOS os valores são // maiores que 10 var res = valores.every(testarTodos); window.alert("Todos passaram no teste: " + res); </script> Aqui o resultado será false, pois o valor 3 não passou no teste. É importante observar que, assim que a função de callback retorna false pela primeira vez, o método every() já abandona sua execução. Uma função passada para o método every() pode conter os seguintes argumentos (nessa mesma ordem): a) O valor do item; b) O índice do item (opcional); c) O vetor a partir do qual o método every() está sendo chamado (opcional). Como última observação, o método every() não modifica o array original. |
Python ::: Dicas & Truques ::: Data e Hora |
Como retornar o nome do mês de uma data no formato longo em Python usando o marcador %B do método strftime()Quantidade de visualizações: 8110 vezes |
Como retornar o nome do mês de uma data no formato longo em Python usando o marcador %B do método strftime() Nesta dica mostrarei como podemos usar a função strftime() do objeto datetime para retornar o nome do mês de uma data no formato longo, por exemplo, "dezembro". Note que, para isso, nós vamos usar o código de formatação %B. Para deixar o exemplo ainda mais interessante eu usei o método setlocale() da classe locale para exibir o nome do mês em Português, ou seja, de acordo com as configurações regionais. Veja o código Python completo: from datetime import datetime import locale def main(): # Configurações do usuário locale.setlocale(locale.LC_ALL, "") # Obtém um datatime da data e hora atual hoje = datetime.today() # Exibe o nome do mês no formato longo print(hoje.strftime("O mês é: %B")) if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: O mês é: fevereiro |
C ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Apostila C para iniciantes - Como usar o laço for em CQuantidade de visualizações: 39001 vezes |
O laço for é usado quando queremos executar um bloco de instruções um determinado número de vezes. Este laço é composto de três partes: for(inicialização; teste; incremento/decremento){ bloco de instruções } Na parte inicialização nós definimos o valor inicial da variável de controle. Na parte teste nós usamos o valor da variável de controle para testar a continuidade ou interrupção do laço. Finalmente, na parte incremento/decremento nós alteramos o valor da variável de controle para cima ou para baixo. Veja um exemplo: int main(int argc, char *argv[]) { int i; for(i = 1; i <= 10; i++){ printf("%d ", i); } printf("\n\n"); system("PAUSE"); return 0; } O incremento/decremento da variável de controle não precisa ser necessariamente em 1. Podemos usar qualquer expressão. Veja um trecho de código que exibe os números pares de 0 à 10: int main(int argc, char *argv[]) { int i; for(i = 0; i <= 10; i += 2){ printf("%d ", i); } printf("\n\n"); system("PAUSE"); return 0; } Observe que "i += 2" é o mesmo que "i = i + 2". Com exceção da parte de testes, podemos inserir múltiplas expressões nas demais partes de um laço for. Veja: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, x; for(i = 0, x = 2; i <= 10; printf("%d ", i * x), i++); printf("\n\n"); system("PAUSE"); return 0; } Este último código é um pouco exótico, mas muito fácil de ser encontrado por aí. |
HTML5 ::: HTML5 + JavaScript ::: Geolocation API |
Como usar a API Geolocation do HTML5Quantidade de visualizações: 1882 vezes |
A API Geolocation foi uma das adições mais importantes ao HTML5. Por meio desta API, os usuários podem compartilhar sua localização com seus sites favoritos. Um código JavaScript pode, por exemplo, capturar sua latitude e longitude, enviar para o backend de um servidor web e permitir que algumas aplicações façam coisas tais como encontrar lojas e locais mais próximos de você ou até mesmo mostrar sua localização em um mapa. Nos dias atuais (março de 2020), a maioria dos navegadores web e dispositivos móveis (celulares, computadores de bordo de veículos, etc) dão suporte à API Geolocation. É claro que, antes de usá-la, temos que estar atentos à algumas considerações: 1) A localização mais precisa é aquela fornecida por um GPS, e este geralmente não está presente em laptops ou desktop. No entanto, alguns sistemas operacionais possuem a capacidade de obter tal localização se você estiver usando posicionamento de WI-FI e também por meio do seu endereço IP (Internet Protocol). 2) O usuário poderá se recusar a fornecer sua localização. Assim, fique atento a este fato e teste sempre a existência da API Geolocation e também a concordância do usuário antes de efetuar alguma ação crucial nas suas aplicações. 3) Alguns navegadores web restringem o acesso à API Geolocation somente em ambiente HTTPs. Fique atento a este detalhe também. Vamos agora ver um trecho de código JavaScript que verifica a existência da API Geolocation no navegador: <html> <head> <title>Testando a existência da API Geolocation</title> </head> <body> <script type="text/javascript"> if(window.navigator.geolocation) { window.alert("A API Geolocation foi encontrada."); } else{ window.alert("A API Geolocation não foi encontrada neste navegador."); } </script> </body> </html> Notem que o novo objeto geolocation foi adicionado ao objeto navigator, já existente nos navegadores desde suas primeiras versões, e tudo que fizemos foi testar a existência de tal objeto. Pronto! Agora que já sabemos para que serve a API Geolocation e como verificar a existência do objeto geolocation, o passo seguinte é aprender como detectar a latitude e longitude do usuário. Nesta seção você encontrará mais dicas relacionadas a isso. |
Nossas 20 dicas & truques de programação mais populares |
LISP - Como converter Coordenadas Polares para Coordenadas Cartesianas em LISP - LISP para Engenharia TypeScript - Como calcular o coeficiente angular de uma reta em TypeScript dados dois pontos no plano cartesiano |
Você também poderá gostar das dicas e truques de programação abaixo |
C# - Como remover um elemento em uma determinada posição de uma List<T> do C# usando a função RemoveAt() Delphi - Como criar chaves no registro do Windows usando o método CreateKey() da classe TRegistry do Delphi |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |