![]() |
|||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
|
C# ::: Namespace System.Drawing ::: Graphics |
Computação gráfica C# Windows Forms - Como desenhar em C# - A classe GraphicsQuantidade de visualizações: 7963 vezes |
Qualquer um que queira iniciar os estudos e desenhos de gráficos em C# usando Windows Forms deve obrigatoriamente entender um pouco de GDI e GDI+. GDI é o acrônimo de Graphics Device Interface e GDI+ é o seu sucessor em versões mais recentes do Microsoft Windows. Com a indepedência do GDI+ podemos desenhar em um formulário, na tela ou impressora sem qualquer modificação no código. O próprio GDI+ se encarrega dos detalhes da implementação de cada um destes diferentes dispositivos. O GDI+ é uma interface de programação de aplicações (API) que forma o sub-sistema do sistema operacional Microsoft Windows XP. Esta API é a responsável pela exibição de informações na tela e impressoras. O GDI+ é uma DLL Win32 chamada de gdiplus.dll que é distribuída com o Windows XP e versões mais recentes do Windows. Esta DLL está também disponível para uso em versões do Windows anteriores ao XP. A plataforma .NET encapsula as funcionalidades do GDI+ nos seguintes namespaces: System.Drawing, System.Drawing.Drawing2D, System.Drawing.Imaging, System.Drawing.Text e System.Drawing.Printing. Antes de iniciar seus desenhos em C# e Windows Forms, é importante entender o sistema de coordenadas do GDI+. Este sistema usa a medida de pixels ("picture elements"), que é a menor unidade de resolução no display de um monitor. Assim, o canto superior esquerdo de um controle GUI (um formulário, um painel, botão, etc) tem as coordenadas (0, 0), ou seja, x = 0 e y = 0. Lembre-se de que x é o eixo horizontal e y é o eixo vertical. A classe Graphics, do pacote System.Drawing, é quem fornece boa parte dos métodos que usamos para desenhar em C# e Windows Forms. Veja sua posição na hierarquia de classes da plataforma .NET: System.Object System.MarshalByRefObject System.Drawing.Graphics Veja um trecho de código no qual desenhamos uma linha horizontal no formulário a partir do clique de um botão: private void button1_Click(object sender, EventArgs e){ // vamos obter o Graphics do formulário Graphics g = this.CreateGraphics(); // vamos desenhar uma linha horizontal de 300 pixels na // cor preta e espessura de 1 pixel g.DrawLine(new Pen(Color.Black, 1), new Point(20, 80), new Point(320, 80)); // vamos liberar o objeto Graphics g.Dispose(); } |
Java ::: Dicas & Truques ::: Arquivos e Diretórios |
Como criar um arquivo em Java usando o método createNewFile() da classe FileQuantidade de visualizações: 244 vezes |
Nesta dica mostrarei como é possível usar o método createNewFile() da clase File, do pacote java.io, para criar um novo arquivo. Note que estou usando um bloco try...catch para tratar os possíveis erros decorrentes desta operação. Veja o código completo para o exemplo: package arquivodecodigos; import java.io.*; public class Estudos{ public static void main(String[] args){ try{ File arquivo = new File("c:\\estudos_java\\osmar.txt"); // Cria o arquivo se este não existe ainda boolean ok = arquivo.createNewFile(); // o arquivo foi criado com sucesso? if(ok){ System.out.println("Arquivo criado com sucesso."); } else{ System.out.println("Nao foi possivel criar o arquivo."); } } catch(IOException e){ System.out.println("Erro: " + e.toString()); } } } Ao executar este código nós teremos o seguinte resultado: Arquivo criado com sucesso. |
C++ ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar o tipo de dados size_t da linguagem C++Quantidade de visualizações: 15901 vezes |
O tipo size_t é definido no arquivo stddef.h e em outros headers, e sua definição pode ser encontrada da seguinte forma:typedef unsigned long size_t; Este tipo é usado para definir tamanhos de strings e blocos de memória. Foi proposto pelo ANSI C. É comum encontrar size_t substituindo unsigned int ou unsigned long. Muito frequente também é ver este tipo recebendo o resultado de uma chamada ao operator sizeof. Veja: #include <iostream> using namespace std; int main(){ // vamos obter a quantidade de bytes em um int size_t tam = sizeof(int); cout << "Um inteiro nesta arquitetura contém: " << tam << " bytes" << endl; } Ao executarmos este código nós teremos o seguinte resultado: Um inteiro nesta arquitetura contém: 4 bytes |
VB.NET ::: Dicas & Truques ::: Strings e Caracteres |
Como inverter uma string em VB.NET usando a função StrReverse()Quantidade de visualizações: 10893 vezes |
Em algumas situações nós precisamos inverter a ordem dos caracteres de uma palavra, frase ou texto em VB.NET. Para isso nós podemos usar a função StrReverse(). Veja um exemplo completo de seu uso: Imports System Module Program Sub Main(args As String()) Dim frase As String = "Gosto de VB.NET" ' vamos mostrar a frase original Console.WriteLine("A frase original é: " & frase) ' vamos inverter a string frase = StrReverse(frase) ' mostramos a frase invertida Console.WriteLine("A frase invertida é: " & frase) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub End Module Ao executar este código VB.NET nós teremos o seguinte resultado: A frase original é: Gosto de VB.NET A frase invertida é: TEN.BV ed otsoG |
Java ::: Dicas & Truques ::: Operadores de Manipulação de Bits (Bitwise Operators) |
Como usar o operador de bits & (E/AND sobre bits) em Java - Java Avançado - Manipulação de bits em JavaQuantidade de visualizações: 6763 vezes |
Esta dica de Java é muito útil para quem está se preparando para entrevistas de código ou desafios de programação. A manipulação de bits é fator importante para testar as habilidades de candidatos a vagas de programador, pois ela demonstra um conhecimento muito aprofundado de lógica de programação e também de rotinas de baixo nível. O operador de bits & (E/AND sobre bits) da linguagem Java é usado quando queremos comparar os bits individuais de dois valores integrais (inteiros) e produzir um terceiro resultado. Os bits no resultado serão configurados como 1 se os bits correspondentes nos dois outros valores foram 1. Em caso contrário os bits são configurados como 0. Vamos analisar os seguintes valores binários: a) 0101 (5 decimal) b) 0100 (4 decimal) Quando aplicamos o operador & nestes dois valores teremos o seguinte resultado: 0101 0100 ---- 0100 Veja que o resultado é 0100, uma vez que apenas o segundo bit de cada valor está configurado como 1. Vamos ver isso em Java agora. Observe o seguinte trecho de código: public class Main { public static void main(String[] args) { int a = 5; int b = 4; int c = a & b; // exibe o resultado (em inteiro e em bytes) System.out.println("a = " + obterBits(a) + " (" + a + ")"); System.out.println("b = " + obterBits(b) + " (" + b + ")"); System.out.println("a & b = " + obterBits(c) + " (" + c + ")"); } // método auxiliar que converte um inteiro em sua representação em bits public static String obterBits(int valor){ int mascara = 1 << 31; StringBuffer buffer = new StringBuffer(35); for(int i = 1; i <= 32; i++){ if((valor & mascara) == 0){ buffer.append('0'); } else{ buffer.append('1'); } valor <<= 1; if(i % 8 == 0){ buffer.append(' '); } } return buffer.toString(); } } Ao executar este código teremos o seguinte resultado: a = 00000000 00000000 00000000 00000101 (5) b = 00000000 00000000 00000000 00000100 (4) a & b = 00000000 00000000 00000000 00000100 (4) |
C# ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como criar e inicializar um array de inteiros em C#Quantidade de visualizações: 8618 vezes |
Nesta dica mostrarei como declarar, construir e inicializar um vetor de ints na linguagem C#. Aqui os valores já estão sendo informados na construção do array, mas você poderá pedir para o usuário informar os valores também. Veja o código para o exemplo: using System; namespace Estudos { class Program { static void Main(string[] args) { // cria um array de inteiros int[] valores = new int[5] { 3, 2, 5, 11, 13 }; // exibe o valor do primeiro elemento Console.WriteLine("O valor do primeiro elemento é {0} ", valores[0]); Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } } } Ao executar este código C# nós teremos o seguinte resultado: O valor do primeiro elemento é 3 |
Java ::: Classes e Componentes ::: JTextArea |
Java Swing - Como salvar o conteúdo de um JTextArea em um arquivo (usando um JFileChooser para localizar o diretório e arquivo)Quantidade de visualizações: 254 vezes |
Nesta dica mostrarei como é possível como salvar o conteúdo de um JTextArea em um arquivo texto. Essa operação é muito frequente em aplicações Java Swing. Note que faremos uso de um JFileChooser para localizar o arquivo no qual o conteúdo será gravado, ou poderemos informar o nome do arquivo. Observe também o uso do método write() da classe FileWriter para escrever o conteúdo no arquivo. Para finalizar, perceba que não fiz os devidos tratamentos de erros e as mensagens de sucesso das operações e coisas. Fica como exercício para você finalizar. Veja o código completo: package arquivodecodigos; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class Estudos extends JFrame{ JTextArea textArea; JButton btn; public Estudos() { super("Salvando o conteúdo de um JTextArea em um arquivo"); Container c = getContentPane(); FlowLayout layout = new FlowLayout(FlowLayout.LEFT); c.setLayout(layout); textArea = new JTextArea(10, 20); textArea.setLineWrap(true); btn = new JButton("Salvar Arquivo"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ JFileChooser fc = new JFileChooser(); if(fc.showSaveDialog(Estudos.this) != JFileChooser.APPROVE_OPTION){ return; } File arquivo = fc.getSelectedFile(); if(arquivo == null){ return; } FileWriter writer = null; try { writer = new FileWriter(arquivo); writer.write(textArea.getText()); } catch(IOException ex){ // Possiveis erros aqui } finally { if(writer != null){ try{ writer.close(); } catch (IOException x){ // trate os erros aqui } } } } } ); c.add(textArea); c.add(btn); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
HTML5 ::: Aplicativos Completos ::: Programas de desenho, edição e visualização de imagens e fotos |
Como criar um programa de desenho simples usando o objeto Canvas do HTML5Quantidade de visualizações: 5956 vezes |
Revisando alguns códigos que desenvolvi para clientes ao longo desses anos, encontrei um exemplo de um programa de desenho bem simples demonstrando as possibilidades gráficas do elemento Canvas do HTML. Este código foi escrito há uns dois anos e resolvi compartilhar com todos, para que vocês possam aprimorá-lo e acrescentar novas idéias, afinal, o HTML5 está mais atual do que nunca. Veja o resultado no navegador: ![]() Eu o escrevi de forma bem simples, sem usar jQuery ou qualquer outro framework, apenas JavaScript raiz mesmo, de forma que até os estudantes mais iniciantes não terão dificuldade de entender. Veja a listagem completa e com comentários: <html> <head> <title>Desenhando no canvas do HTML5</title> </head> <body style="padding: 15px"> <b>Clique e arraste para desenhar</b><br><br> <canvas id="quadro" style="border: 1px solid #666" width="600" height="350"></canvas> <br><br><button onClick="limpar()">Limpar</button> <script type="text/javascript"> // obtém uma referência ao canvas var quadro = document.getElementById('quadro'); // vamos obter o contexto de desenho var areaDesenho = quadro.getContext("2d"); // podemos desenhar? var podeDesenhar = false; // ainda não // vetores para guardar as posições x, y, e se o mouse está sendo // movimentado pressionado var vetorX = new Array(); var vetorY = new Array(); var vetorArrastar = new Array(); // agora vamos adicionar na área de desenho um "ouvidor" de // eventos mousedown, ou seja, vamos detectar quando o usuário // pressionar o botão do mouse (sem soltar) quadro.addEventListener('mousedown', function(e){ // podemos iniciar o desenho podeDesenhar = true; registrarClique(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, false); desenhar(); // faça o desenho, moço }); // o "ouvidor" de evento que detecta se o mouse está sendo arrastado // pressionado quadro.addEventListener('mousemove', function(e){ if(podeDesenhar){ registrarClique(e.pageX - this.offsetLeft, e.pageY - this.offsetTop, true); desenhar(); // faça o desenho, moço } }); // o "ouvidor" de evento que detecta se o mouse foi liberado // e interrompe o desenho quadro.addEventListener('mouseup', function(e){ podeDesenhar = false; }); // o mouse saiu da área de desenho? quadro.addEventListener('mouseleave', function(e){ podeDesenhar = false; }); function registrarClique(x, y, arrastar){ // aqui nós guardamos em vetores as posições x, y do clique ou // o movimento do mouse pressionado. vetorX.push(x); vetorY.push(y); vetorArrastar.push(arrastar); } // é aqui que a mágica ocorre function desenhar(){ // primeiro vamos limpar o quadro de desenho areaDesenho.clearRect(0, 0, areaDesenho.canvas.width, areaDesenho.canvas.height); areaDesenho.strokeStyle = "#5c5cd6"; // cor areaDesenho.lineJoin = "round"; // formato da junção de linha areaDesenho.lineWidth = 5; // largura da linha // percorremos os vetores, usando como base o vetor de coordenadas x for(var i = 0; i < vetorX.length; i++){ areaDesenho.beginPath(); // inicia o caminho // o mouse foi arrastado neste evento? if((vetorArrastar[i] == true && i > 0)){ areaDesenho.moveTo(vetorX[i - 1], vetorY[i - 1]); } else{ // é o início do desenho areaDesenho.moveTo(vetorX[i] - 1, vetorY[i]); } // desenha a linha do ponto X ao ponto Y areaDesenho.lineTo(vetorX[i], vetorY[i]); // fecha o caminho areaDesenho.closePath(); // conclui de fato o desenho areaDesenho.stroke(); } } // e aqui nós limpamos a área de desenho e esvaziamos os vetores function limpar(){ areaDesenho.clearRect(0, 0, areaDesenho.canvas.width, areaDesenho.canvas.height); vetorX = []; vetorY = []; vetorArrastar = []; } </script> </body> </html> Salve o código como "desenho.html" (cuidado para não salvar como "desenho.html.txt") e abra-o no seu navegador, remoto ou localmente. Você pode começar suas modificações alterando a cor do desenho, a largura da linha, etc. Você pode também deixar figuras pré-configuradas e até permitir que o usuário inclua fotos no Canvas. Para os estudantes que já sabem Node.js, saiba que é possível enviar os três vetores via sockets em um ambiente real time para que outros usuários na rede vejam o seu desenho em tempo real. Bons estudos. |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como concatenar strings em C usando a função strcat() - Aprenda a programar na linguagem CQuantidade de visualizações: 42441 vezes |
Concatenar strings é a operação de anexar uma string a outra. Em C, isso é feito com o auxílio da função strcat(), disponível no header string.h. Esta função recebe a string de destino, a string de origem, anexa a string de destino no final da string de origem e retorna um ponteiro para o resultado final. Veja um exemplo no qual usamos esta função para concatenar três strings:#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { char frase1[100] = "Gosto"; strcat(frase1, " muito de "); strcat(frase1, " programar em C"); // exibe o resultado printf("%s\n\n", frase1); system("PAUSE"); return 0; } Veja que a string de destino deve ser declarada com um tamanho suficiente para acomodar as strings que serão anexadas a ela. Veja agora um exemplo que usa o ponteiro retornado pela função strcat() para inicializar um ponteiro do tipo char: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // declara e inicializa duas strings char frase1[100] = "Gosto muito de "; char frase2[15] = "programar em C"; char *res = strcat(frase1, frase2); // exibe o resultado printf("%s\n\n", res); system("PAUSE"); return 0; } |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercício Resolvido de C - Um método recursivo que conta de 0 até 10Quantidade de visualizações: 935 vezes |
Pergunta/Tarefa: Escreva um método recursivo que conta e exibe os valores de 0 até 10. Seu método deverá possuir a seguinte assinatura: void contar_recursivamente(int n){ // sua implementação aqui } Sua saída deverá ser parecida com: 0 1 2 3 4 5 6 7 8 9 10 Veja a resolução comentada deste exercício usando C console: #include <stdio.h> #include <stdlib.h> // método recursivo que conta de 0 até 10; void contar_recursivamente(int n){ // vamos exibir o número atual printf("%d ", n); // devemos prosseguir com a recursividade? if(n < 10){ // incrementa o valor de n n++; contar_recursivamente(n); // e faz uma nova chamada recursiva } } // método principal do programa int main(int argc, char *argv[]){ // efetua uma chamada ao método recursivo fornecendo o primeiro valor contar_recursivamente(0); printf("\n\n"); system("pause"); return 0; } |
Nossas 20 dicas & truques de programação mais populares |
Python - Como repetir os elementos de um vetor ou matriz usando a função repeat() da NumPy do Python JavaScript - Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em JavaScript AutoCAD .NET API C# - Como selecionar uma polilinha no AutoCAD e mostrar as coordenadas de suas vértices usando a AutoCAD .NET C# API Java - Programação Orientada a Objetos em Java - Como usar o modificador de acesso public da linguagem Java |
Você também poderá gostar das dicas e truques de programação abaixo |
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 |