sábado, 26 de julho de 2008

Tutorial Delphi - Construindo um menu com submenus e teclas de atalho passo a passo

Versão utilizada: Delphi 7

Ao abrir o Delphi automaticamente é criado um projeto padrão, caso contrário clique em File > New > Form

Deverá aparecer algo como:
Na paleta de componentes, na guia Standard, possui os componentes padrões que podem ser adicionados conforme a necessidade, somente é preciso clicar no componente e clicar na área disponível no Form1. Clique no componente:
(MainMenu)
e clique no centro do Form1. Aparecerá um ícone do menu, dê dois cliques.
Aparecerá o editor de design do menu, automaticamente e habilita o foco para edição dos nomes dos menus, faça o teste, apenas digite “&Arquivo” sem aspas + Enter. Deverá aparecer algo como:
Caso contrário, clique em Caption na janela Object Inspector (Inspetor de Objetos) conforme a seguir:
O & (e comercial) deve ser inserido antes da palavra que se deseja colocar como atalho. Quando a aplicação estiver em execução, basta teclar Alt + A, que o menu Arquivo será ativado.

Deixe o menu com esta estrutura:
Ainda no editor de design do menu, vamos criar um atalho do teclado com a combinação de teclas, clique no item Salvar do menu Arquivo, no Inspetor de Objetos, procure a propriedade Shortcut e selecione Ctrl+S, conforme exemplo:
Repita o mesmo procedimento demonstrado acima no item Imprimir, selecionando em ShortCut: Ctrl+P.

Agora nosso menu está com esta estrutura:
Vamos colocar um submenu em Ferramentas, clique com o botão direito em Exportar e clique em Create Submenu. Altere a propriedade Caption para PDF, repita o mesmo procedimento e crie outro submenu para HTML. Segue exemplo:
Pronto, agora aperte a tecla F9 para executar o aplicativo, se você seguiu os passos acima uma janela será aberta com o menu em funcionamento.

Posteriormente veremos com dar funcionalidade ao menu.

sexta-feira, 25 de julho de 2008

Coisas que todos precisam saber a respeito de um CARA DA INFORMÁTICA

1) O CARA DA INFORMÁTICA dorme. Pode parecer mentira, mas o CARA DA INFORMÁTICA precisa dormir como qualquer outra pessoa. Esqueça que ele tem celular e telefone em casa; ligue só para o escritório.

2) O CARA DA INFORMÁTICA come. Parece inacreditável, mas é verdade. O CARA DA INFORMÁTICA também precisa se alimentar e tem hora para isso.

3) O CARA DA INFORMÁTICA pode ter família. Essa é a mais incrível de todas. Mesmo sendo um CARA DA INFORMÁTICA, a pessoa precisa descansar no final de semana para poder dar atenção à família, aos amigos e a si próprio, sem pensar ou falar em informática, impostos, formulários, concertos e demonstrações, manutenção, vírus e etc.

4) O CARA DA INFORMÁTICA, como qualquer cidadão, precisa de dinheiro. Por essa você não esperava, né? É surpreendente, mas o CARA DA INFORMÁTICA também paga impostos, compra comida, precisa de combustível, roupas e sapatos, e ainda consome Lexotan para conseguir relaxar. Não peça aquilo pelo que não pode pagar ao CARA DA INFORMÁTICA.

5) Ler e estudar também é trabalho. E trabalho sério. Pode parar de rir. Não é piada. Quando um CARA DA INFORMÁTICA está concentrado num livro ou publicação especializada ele está se aprimorando como profissional, logo, trabalhando.

6) De uma vez por todas, vale reforçar: O CARA DA INFORMÁTICA não é vidente, não joga tarô e nem tem bola de cristal, pois se você achou isso, demita-o e contrate um PARANORMAL ou DETETIVE. Ele precisa planejar, se organizar e assim ter condições de fazer um bom trabalho, seja de que tamanho for. Prazos são essenciais e não um luxo. Se você quer um milagre, ore bastante, faça jejum, e deixe o pobre do CARA DA INFORMÁTICA em paz.

7) Em reuniões de amigos ou festas de família, O CARA DA INFORMÁTICA deixa de ser O CARA DA INFORMÁTICA e reassume seu posto de amigo ou parente, exatamente como era antes dele ingressar nesta profissão. Não peça conselhos, dicas. Ele tem direito de se divertir.

8) Não existe apenas um "levantamentozinho", uma "pesquisazinha", nem um "resuminho", um "programinha pra controlar minha loja", um "probleminha que a máquina não liga", um "sisteminha", uma "passadinha rápida" (aliás, conta-se de onde saímos e até chegarmos), pois esqueça os "inha e os inho" (programinha, sisteminha, olhadinha), pois os CARAS DA INFORMÁTICA não resolvem este tipo de problema. Levantamentos, pesquisas e resumos são frutos de análises cuidadosas e requerem atenção, dedicação. Esses tópicos podem parecer inconcebíveis a uma boa parte da população, mas servem para tornar a vida do CARA DA INFORMÁTICA mais suportável.

9) Quanto ao uso do celular: celular é ferramenta de trabalho. Por favor, ligue apenas quando necessário. Fora do horário de expediente, mesmo que você ainda duvide, O CARA DA INFORMÁTICA pode estar fazendo algumas coisas que você nem pensou que ele fazia, como dormir ou namorar, por exemplo.

10) Pedir a mesma coisa várias vezes não faz O CARA DA INFORMÁTICA trabalhar mais rápido. Solicite. Depois, aguarde o prazo dado pelo CARA DA INFORMÁTICA.

11) Quando o horário de trabalho do período da manhã vai até 12h, não significa que você pode ligar às 11:58 horas. Se você pretendia cometer essa gafe, vá e ligue após o horário do almoço (relembre o item 2). O mesmo vale para a parte da tarde: ligue no dia seguinte.

12) Quando O CARA DA INFORMÁTICA estiver apresentando um projeto, por favor, não fique bombardeando com milhares de perguntas durante o atendimento. Isso tira a concentração, além de torrar a paciência. ATENÇÃO: Evite perguntas que não tenham relação com o projeto, tipo como vocês entendem, é claro.

13) O CARA DA INFORMÁTICA não inventa problemas, não muda versão de Windows, não tem relação com vírus, NÃO É CULPADO PELO MAL USO DE EQUIPAMENTOS, INTERNET E AFINS. Não reclame! O CARA DA INFORMÁTICA com certeza fez o possível para você pagar menos. Se quer emendar, emende, mas antes demita O CARA DA INFORMÁTICA e contrate um QUEBRA GALHO.

14) Os CARAS DA INFORMÁTICA não são os criadores dos ditados "o barato sai caro" e "quem paga mal paga em dobro". Mas eles concordam.

15) Informática é referente à computadores, e não TVs, celulares e eletrodomésticos. Portanto, O CARA DA INFORMÁTICA não vai te ensinar a mexer no celular, consertar sua TV, etc.

16) E finalmente, O CARA DA INFORMÁTICA também é filho de Deus e não filho disso que você pensou.

17) Agora, depois de aprender sobre O CARA DA INFORMÁTICA, repasse aos seus amigos. Afinal, essas verdades precisam chegar a todos. O CARA DA INFORMÁTICA agradece!


Autor desconhecido.

Valeu Artiaga, por esta eu não esperava. Fala sério, você é o autor e não quer falar!

terça-feira, 15 de julho de 2008

Exibição de registros do banco de dados HSQLDB, utilizando a API JAVA "Swing"

Dando continuidade ao artigo anterior "Tutorial - Conexão com banco de dados HSQLDB utilizando JAVA", vou falar sobre como utilizar a pesquisa no banco de dados HSQLDB para apresentação em uma tabela denominada "JTable" da API Swing. Referente à consulta no banco, a classe "VetorPesquisa" armazena as linhas e colunas pesquisadas na tabela do banco de dados, nos vetores "linhas" e "colunas". Para que seja possível realizar a exibição dos dados registrados no banco, simplesmente podemos passar esses dados no momento da instância da tabela.

A classe JTable dispõe de sete construtores, utilizaremos o construtor passando como parâmetro os vetores criados pela consulta, conforme exemplo abaixo:
VetorPesquisa vetorApto = new VetorPesquisa();
tabApto = new JTable(vetorApto.getLinhas(), vetorApto.getColunas());
No momento da instância do objeto "tabApto", foi criado uma tabela que recebe as linhas seguidas das colunas, que por sua vez os vetores são oriundos da classe "VetorPesquisa" através dos métodos getLinhas() e getColunas() respectivamente. Em seguida é necessário apenas criar um JFrame e adicionar o componente tabApto e exibi-lo conforme exemplo a seguir:

Fonte: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JTable.html

sexta-feira, 4 de julho de 2008

Certificado personalizado de participação no Recorde Mundial do Livro dos Recordes Guinness!

Aos participantes que colaboraram para o Mozilla Firefox 3 alcançar o Recorde Mundial do Livro dos Recordes Guinness, não esqueça de baixar o seu certificado personalizado.

Meu certificado:

Acesse também:

quinta-feira, 3 de julho de 2008

Tutorial - Conexão com banco de dados HSQLDB utilizando JAVA

Este tutorial tem como objetivo apresentar uma classe Java, para efetuar uma conexão com o banco de dados HSQLDB no modo servidor.

A classe demonstra dois métodos importantes, update (inclusão, alteração, exclusão) e query (pesquisas), que são responsáveis por realizar instruções SQL no banco. Os resultados obtidos através de consultas são armazenados em dois vetores (linhas e colunas), que por sua vez são criados na classe VetorPesquisa, que encapsula os atributos para acessos posteriores.

Classe Conexao.java:


import java.sql.*;
import java.util.Vector;

/** Modelo de conexão como o banco de dados.
* Código extraído da documentação oficial do HSQLDB. Com algumas alterações para
* acoplar os resultados da consultas em vetores java (Vector)
* Procedimentos padrões para consulta e updates através de expressões SQL.
*
* @author Rondson
*
*/
public class Conexao {

Connection conn; // conexão

/** Abre conexão com o banco ao instanciar-se um objeto do tipo Conexao */
public Conexao() throws Exception {
Class.forName("org.hsqldb.jdbcDriver"); // carrega driver

// carrega banco de dados
conn = DriverManager.getConnection("jdbc:hsqldb:"
+ "hsql://localhost/data/SRH/", // filenames
"sa", // username
""); // password

} // construtor Conexao

/** Fecha conexão com o banco. */
public void fecharConexao() throws SQLException {
conn.close(); // encerraConexão

} // void fecharConexao

/** Executa comandos SQL (CREATE, DROP, INSERT e UPDATE). */
public synchronized int update(String expression) throws SQLException {
Statement st = null;
st = conn.createStatement(); // statements

int i = st.executeUpdate(expression); // executa Updates

st.close();

return i;
}

/** Realiza consultas no banco (SQL SELECT). */
public synchronized void query(String expression, VetorPesquisa vetor) throws SQLException {
Statement st = null;
ResultSet rs = null; // manipula os dados obtidos numa consulta
st = conn.createStatement();
rs = st.executeQuery(expression); // executa consultas

armazenarDados(rs, vetor); // armazena dados em vetores

st.close(); // fecha Statement
} // void query

/** Armazena resultados da consulta em vetores para o método query(). */
public void armazenarDados(ResultSet rs, VetorPesquisa vetor) throws SQLException {
// vetores locais para armazenar os dados
Vector colunas = new Vector();
Vector linhas = new Vector();

ResultSetMetaData rsmd = rs.getMetaData(); // Armazena informações sobre o banco de dados e a consulta

// Construção dos cabeçalhos das colunas, quantas existirem.
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
colunas.addElement(rsmd.getColumnName(i));

// Construção das linhas
for(; rs.next(); ) { // posiciona no primeiro registro e percorre até não encontrar registros
linhas.addElement(proximaLinha(rs, rsmd));
}

// Seta os vetores da classe VetorPesquisa
vetor.setColunas(colunas);
vetor.setLinhas(linhas);

} //void armazenaDados

/** Este método tem por finalidade percorrer a tabela, usando as informações obtidas no loop anterior.
* Além de verificar o tipo de elemento que há na linha da tabela.
*
* @param rs
* @param rsmd
* @return
*/
private Vector proximaLinha(ResultSet rs, ResultSetMetaData rsmd){
Vector LinhaAtual = new Vector();

// Verifica o tipo de elemento a ser adicionado no vetor
try{
for (int i = 1; i <= rsmd.getColumnCount(); ++i)
switch(rsmd.getColumnType(i)){
case Types.VARCHAR: LinhaAtual.addElement(rs.getString(i));
break;

case Types.TIMESTAMP: LinhaAtual.addElement(rs.getDate(i));
break;

case Types.NUMERIC: LinhaAtual.addElement(new Long(rs.getLong(i)));
break;

case Types.INTEGER: LinhaAtual.addElement(new Integer(rs.getInt(i)));
break;

case Types.REAL: LinhaAtual.addElement(rs.getFloat(i));
break;
}
}
catch(SQLException e){
}
return LinhaAtual;
} // Vector proximaLinha

} // classe Conexao


Classe VetorPesquisa.java:


import java.util.Vector;

/** Esta classe é responsável por amarzenar em linhas e colunas, os
* resultados obtidos através de consultas no banco
*/
public class VetorPesquisa {

// Vetores para captura dos valores de linhas e colunas
private Vector colunas = new Vector();
private Vector linhas = new Vector();


// Encapsulamento dos Vetores para posterior acesso por outras classes
public Vector getColunas() {
return colunas;
}

public void setColunas(Vector colunas) {
this.colunas = colunas;
}

public Vector getLinhas() {
return linhas;
}

public void setLinhas(Vector linhas) {
this.linhas = linhas;
}

}


Com o armazenamento dos resultados capturados no banco de dados, em vetores, é possível criar tabelas e passar como parâmetro os vetores "linhas" e "colunas".

Em breve vou publicar um tutorial de como manipular os dados obtidos, para exibição em tabelas utilizando a interface gráfica através da API Swing.