![]() |
|
||||
Código-Fonte Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimentoDiga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
|||||
Delphi ::: VCL - Visual Component Library ::: TStringGrid |
Como usar o evento OnDrawCell para controlar o desenho das células em um TStringGrid do DelphiQuantidade de visualizações: 16535 vezes |
O evento OnDrawCell, definido originalmente na classe TCustomDrawGrid, é disparado quando uma determinada célula do TStringGrid precisa ser desenhada. Este evento possui a seguinte assinatura:property OnDrawCell: TDrawCellEvent; O tipo Grids.TDrawCellEvent apresenta, no Delphi 2009, a seguinte lista de parâmetros: TDrawCellEvent = procedure(Sender: TObject; ACol, ARow: Longint; Rect: TRect; State: TGridDrawState) of object; Vamos ver cada um destes parâmetros separadamente: Sender - Representa a grid na qual a célula está sendo desenhada; ACol, ARow - Índices da coluna e linha na qual a célula está sendo desenhada; Rect - Localização da célula na área de desenho (canvas); State - Um objeto Grids.TGridDrawState que indica se a célula possui o foco (gdFocused), está selecionada (gdSelected) e se a mesma é uma célula fixa (gdFixed). Células fixas permanecem vísiveis quando as barras de rolagem são acionadas. Veja um trecho de código no qual usamos o evento OnDrawCell para colorir de amarelo o fundo de uma determinada célula do TStringGrid:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
conteudo: String;
begin
// vamos obter o conteúdo da célula
conteudo := StringGrid1.Cells[ACol, ARow];
// vamos colorir a célula na segunda linha e terceira
// coluna com o fundo amarelo
if (ACol = 2) and (ARow = 1) then
begin
StringGrid1.Canvas.Brush.Color := clYellow;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
conteudo);
end;
end;
Para este exemplo deixei o valor da propriedade DefaultDrawing do TStringGrid como true. Isso faz com que o fundo da célula seja pintado antes que o evento DrawCell seja chamado e o efeito 3D das células fixas seja exibido ou o retângulo de foco ao redor da célula que possui o foco no momento seja desenhado após o evento. Experimente executar o exemplo com o valor false para a propriedade DefaultDrawing para ver o resultado. Veja agora um trecho de código no qual definimos a cor vermelha para o texto das células cujo valor inteiro seja menor que 10:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
conteudo: String;
begin
// vamos obter o conteúdo da célula
conteudo := StringGrid1.Cells[ACol, ARow];
// vamos definir a cor vermelha para o texto das células
// contendo valores menores que 10
if (conteudo <> '') and (StrToInt(conteudo) < 10) then
begin
StringGrid1.Canvas.Font.Color := clRed;
StringGrid1.Canvas.FillRect(Rect);
StringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
conteudo);
end;
end;
Tenha cuidado para que o valor da célula possa ser convertido para inteiro por meio do uso da função StrToInt(). Caso a conversão não for possível, uma exceção do tipo EConvertError será lançada. |
C ::: Estruturas de Dados ::: Lista Ligada Simples |
Estruturas de Dados em C - Como inserir antes de um determinado nó em uma lista encadeada simples usando CQuantidade de visualizações: 2287 vezes |
|
Em algumas situações nós precisamos inserir o novo nó antes de um determinado nó na lista encadeada simples. Veja, por exemplo, uma lista com o seguintes valores: 45 | 3 | 98 | 47 Suponha que queremos inserir o valor 50 antes do 98, então o novo conteúdo da lista será: 45 | 3 | 50 | 98 | 47 Observe que neste exemplo eu tratei o caso de inserir antes do primeiro nó, ou seja, antes do 45, mas não tratei a lista vazia. Há também a questão do laço infinito caso o usuário queira inserir antes de um nó não existente (não tratada). Veja o código completo:
#include <stdio.h>
#include <stdlib.h>
// estrutura Nó
struct No{
int valor;
struct No *proximo;
};
// fim da estrutura Nó
// função que permite exibir os valores de
// todos os nós da lista
void exibir(struct No *n){
if(n != NULL){
do{
printf("%d\n", n->valor);
n = n->proximo;
}while(n != NULL);
}
else
printf("A lista esta vazia\n\n");
}
// função que permite inserir um novo nó
// antes de um determinado valor
struct No *inserir_antes_valor(struct No *n, int v, int v_antes){
// reserva memória para o novo nó
struct No *novo = (struct No*)malloc(sizeof(struct No));
novo->valor = v;
// guarda o nó antes do valor que procuramos
struct No *anterior = NULL;
struct No *temp = n; // aponta para o início da lista
// enquanto for diferente do valor que estamos procurando
while(temp->valor != v_antes){
anterior = temp; // anterior recebe temp
// e temp recebe o seu próximo
temp = temp->proximo;
}
// ATENÇÃO: não estamos tratando a condição
// de lista vazia. Para isso veja minha dica
// sobre como inserior no início da lista
// devemos inserior no início da lista?
if(anterior == NULL){
// o próximo do novo nó é o início da lista
novo->proximo = n;
n = novo; // início da lista é o novo nó
}
else{
// o proximo do anterior é o novo nó
anterior->proximo = novo;
// e o próximo do novo nó é temp
novo->proximo = temp;
}
return n;
}
// função que permite inserir nós no
// final da lista.
// veja que a função recebe o valor a ser
// armazenado em cada nó e um ponteiro para o
// início da lista. A função retorna um
// ponteiro para o início da lista
struct No *inserir_final(struct No *n, int v){
// reserva memória para o novo nó
struct No *novo = (struct No*)malloc(sizeof(struct No));
novo->valor = v;
// verifica se a lista está vazia
if(n == NULL){
// é o primeiro nó...não deve apontar para
// lugar nenhum
novo->proximo = NULL;
return novo; // vamos retornar o novo nó como sendo o início da lista
}
else{ // não está vazia....vamos inserir o nó no final
// o primeiro passo é chegarmos ao final da lista
struct No *temp = n; // vamos obter uma referência ao primeiro nó
// vamos varrer a lista até chegarmos ao último nó
while(temp->proximo != NULL){
temp = temp->proximo;
}
// na saída do laço temp aponta para o último nó da lista
// novo será o último nó da lista...o campo próximo dele deve
// apontar para NULL
novo->proximo = NULL;
// vamos fazer o último nó apontar para o nó recém-criado
temp->proximo = novo;
return n; // vamos retornar o início da lista intacto
}
}
int main(int argc, char *argv[])
{
// declara a lista
struct No *inicio = NULL;
// vamos inserir quatro valores no final
// da lista
inicio = inserir_final(inicio, 45);
inicio = inserir_final(inicio, 3);
inicio = inserir_final(inicio, 98);
inicio = inserir_final(inicio, 47);
// vamos exibir a lista
puts("Valores atuais:\n");
exibir(inicio);
// vamos inserir o valor 50 antes do 98
inicio = inserir_antes_valor(inicio, 50, 98);
// vamos exibir a lista novamente
puts("\nValores agora:\n");
exibir(inicio);
puts("\n\n");
system("pause");
return 0;
}
|
Java ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Java Vetores e Matrizes - Como inicializar os elementos de um vetor usando o laço for da linguagem JavaQuantidade de visualizações: 10160 vezes |
|
Neste exemplo veremos como inicializar um vetor (array) de ints usando o laço for. Note que os elementos do array serão inicializados com os valores de 1 a 10. Veja o código completo:
package arquivodecodigos;
public class Estudos{
public static void main(String[] args){
// vamos declarar e construir um vetor de 10 elementos
int[] a = new int[10];
// inicializa os elementos do vetor
for(int i = 0; i < a.length; i++){
a[i] = (i + 1);
}
// exibe os valores dos elementos do vetor
for(int i = 0; i < a.length; i++){
System.out.print(a[i] + ", ");
}
System.exit(0);
}
}
Ao executar este código Java nós teremos o seguinte resultado: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, |
Java ::: Coleções (Collections) ::: LinkedList |
Como usar a classe LinkedList do Java em suas aplicaçõesQuantidade de visualizações: 27352 vezes |
|
A classe LinkedList é uma implementação da interface List. Esta classe implementa boa parte das operações de uma lista e permite a inserção de qualquer tipo de elemento (incluindo null). Veja sua posição na hierarquia de classes Java:
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.AbstractSequentialList<E>
java.util.LinkedList<E>
Esta classe implementa as seguintes interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, Deque<E>, List<E> e Queue<E>. O uso mais comum de uma lista ligada é quando precisamos adicionar e remover elementos no início ou final da lista, acessar os elementos no início ou final e percorrer a lista elemento por elemento. Não é raro ver programadores usando a classe LinkedList como uma pilha ou fila. O trecho de código abaixo mostra como criar uma LinkedList, adicionar elementos e percorrê-los usando um ListIterator:
import java.util.*;
public class Estudos{
public static void main(String args[]){
// Cria uma LinkedList de String
LinkedList<String> lista = new LinkedList<String>();
// adiciona três elementos na lista
lista.add("Cuiabá");
lista.add("Goiânia");
lista.add("Belo Horizonte");
// obtém um ListIterator para percorrer toda a
// lista, começando no primeiro elemento
ListIterator<String> iterador = lista.listIterator(0);
while(iterador.hasNext()){
String cidade = iterador.next();
System.out.println(cidade);
}
}
}
Ao executar este código Java nós teremos o seguinte resultado: Cuiabá Goiânia Belo Horizonte |
Você também poderá gostar das dicas e truques de programação abaixo |
|
Java - Como retornar a quantidade de palavras em uma string Java usando um objeto da classe StringTokenizer C++ - Programação Orientada a Objetos em C++ - Como criar e usar métodos estáticos em suas classes C++ Android Java - Como usar a classe Toast em suas aplicações Android |
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 |







