segunda-feira, 2 de agosto de 2010

Instalação de Componentes no Delphi

O Delphi nos proporciona várias formas de instalação de componentes, isso confunde um pouco quem vai fazer tal tarefa.

Às vezes, instalamos um componente e só um ano depois, após formatarmos nossas máquinas, iremos reinstalar os mesmos. Por este motivo, esquecemos de como é feita a sua instalação.

Podemos instalar componentes cuja extensão dos arquivos é: *.pas, *.dcu, *.dpk.

Explicando todas as instalações:

1- *.pas

Arquivos que necessitam de um Package (componentes que possuem o *.pas), execute o Delphi e feche o projeto, acesse o menu ‘Component’ e clique na opção ‘install component’, na tela que abrirá clique na aba ‘Into new package’, clique no botão Browse...(figura 1.1). Abra o arquivo com a extensão *.pas, clique em OK e após compile e instale. Após isto, o Delphi irá criar uma aba na barra de componentes com o nome do seu novo componente.

(Figura 1.1)
Clique para ver a imagem em seu tamanho real

2 - *.DPK

Para a instalação de pacotes (arquivos com extensão *.DPK), execute o Delphi, feche o projeto, acesse o menu File e clique na opção ‘Open’, abra o arquivo que contém os componentes. Clique em OK e após clique em ‘Install’. (Figura 2.1).

(Figura 2.1 – exemplo instalação do Crystal Report).
Clique para ver a imagem em seu tamanho real

3- *.DCU

Para a instalação de componentes cujo arquivo tem a extensão *.DCU acesse o menu ‘Component’ e clique na opção ‘Install Package’. Verifique se na lista ‘Design Packages’ existe a opção ‘Borland user component’, se sim, clique nela e em seguida clique no botão ‘Edit’(Figura 3.1), abrirá uma caixa de mensagem, clique no botão ‘Yes’. Na janela que aparece, clique no botão ‘Add’, na janela que se abrirá, clique no botão ‘Browse’ da caixa de texto ‘unit file name’. Na caixa de combinação ‘files of type’ escolha ‘Delphi compiled unit’. Depois, na caixa de texto ‘File Name’ direcione o arquivo a ser instalado, clique no botão ‘Open’. Clique o botão ‘OK’ na janela que aparece e clique no botão ‘install’.

Se na lista Design packages não tiver a opção Borland user component você deverá primeiro instalar componentes que estão em arquivos com extensão *.pas.

(Figura 3.1)
Clique para ver a imagem em seu tamanho real

OBS.: É imprescindível que seja copiado os arquivos de cada componente para a pasta lib do Delphi, do contrário o delphi acusará a falta de arquivos para a compilação/instalação dos componentes.

Um pouco mais...

Quando precisamos de mais alguns recursos no Delphi, ele nos dá a possibilidade de utilizar ActiveX de softwares que já estão instalados em nossa máquina. É necessário importar o ActiveX e o Delphi irá criar uma paleta com o nome ActiveX com o componente.

Acesse o menu ‘Component’, clique em ‘Import ActiveX Control...’. Irá aparecer uma tela(Figura 4.1) com a lista dos ActiveX que podemos instalar, escolha um e clique em Install, para fazer este teste escolhi o Media Player, a tela seguinte (Figura 4.2) irá especificar o Package que será utilizado pelo componente. Clique em OK.

Confirme a instalação do Package e instale o ActiveX (Figura 4.3).

Pronto, agora você pode visualizar vídeos em seus projetos, preencha a URL com o endereço do vídeo.

(Figura 4.1)
Clique para ver a imagem em seu tamanho real

(Figura 4.2)
Clique para ver a imagem em seu tamanho real

(Figura 4.3)
Clique para ver a imagem em seu tamanho real

Função para gerar senhas aleatórias

Essa é uma dica simples e que para os que trabalham com redes sem fio pode ser muito útil. O que a função faz é gerar um string com caracteres hexadecimais, mas que podem ser adaptados para qualquer outro tipo. Esta função recebe como parâmetros o comprimento da senha como um integer, e outros três parametros do tipo boolean que indicam se estarão presentes letras minúsculas, maiúsculas e números.

Aqui vai o código e as explicações seguem logo abaixo.
function GeraSenhaHex(Digitos: Integer; Min: Boolean; Mai: Boolean; Num: Boolean): string;
const
MinC = 'abcdef';
MaiC = 'ABCDEF';
NumC = '1234567890';
var
p, q : Integer;
Char, Senha: String;
begin
Char := '';
If Min then Char := Char + MinC;
If Mai then Char := Char + MaiC;
If Num then Char := Char + NumC;
for p := 1 to Digitos do
  begin
    Randomize;
    q := Random(Length(Char)) + 1;
    Senha := Senha + Char[q];
  end;
Result := Senha;
end;
 
Explicações:

Primeiro criamos as constantes que trarão os caracteres referentes a letras minúsculas, maiúsculas, e números, depois, iniciamos como vazia, só por desencargo de consciência já que o delphi faz isso por padrão, a variável "Char", que conterá todos os caracteres a serem usados para a geração da senha randômica.
Após isso, testamos os parâmetros para letras maiúsculas, minúsculas e números, acrescentando à "Char" cada um dos que forem verdadeiros segundo os parâmetros passados na chamada da função.
E depois, para finalizar, um laço com o número de repetições igual aos dígitos passados também como parâmetro na chamada, que usando a função Random do delphi gera números aleatórios dentro do limite estabelecido pelo cumprimento da variável "Char", lembrando que o fato de acrescentar o "+ 1" é por que as posições dos caracteres dentro de um string iniciam em 1, e a função Random gera números de 0 até o valor estipulado como limite. Por exemplo uma String = 'teste' temos os valores a seguir:
String[1] = 't'
String[2] = 'e'
String[3] = 's'
String[4] = 't'
String[5] = 'e'
Terminado. Simples, fácil e bem útil.
 

Função para criar diretorio na Exportação de dados

Essa é uma dica para gerar um diretório no diretório padrão do sistema em exportação de dados em um txt.

Variaveis
var
arq: TextFile;
pasta: String;
Função que para pegar o Diretorio do sistema e gerar a o Diretorio.
 function IniciaDirArq(dirNome: string; arqNome: string): string;
  begin
    pasta := GetPath(Application.ExeName) + '' + dirNome + '';
    CreateDirectory(PAnsiChar(pasta), nil);
    pasta := pasta + arqNome;
    AssignFile(arq, pasta);
    Rewrite(arq);
  end;

Explicação:
Primeiro Declaramos as variaveis arq do tipo TextFile e pasta do tipo string, a variavel pasta na função receberá o GetPath da aplicação(onde está o executavel) + o nome do diretório a ser criado (dirNome),  em seguida gera o direório (CreateDirectory), apos gerar o diretório é precisso gerar o arquivo cujo nome será passado por parametro da função (arqNome) faz a atribuição ao caminho do arquivo (Assingfile), Rewrite deixa o arquivo pronto para excrita.
Aqui chama a função:
IniciaDirArq('Teste', 'Teste.txt');
A função recebe os parametros Teste (dirNome), teste.txt (arqNome)
Gera um txt com os dados da exportação
  Write(arq,
    '2'+
    'T'+ 
    '0.00' +
    '0.00' +
    '0.00' +
    '0.00');
  CloseFile(arq);
Escrevendo os dados no arquivo teste.txt  e fecha o arquivo (CloseFile)

O DBA de Alta Performance


Hoje conversaremos a respeito do trabalho do profissional responsável por Banco de Dados e seus desafios. Sabemos que o grande objetivo de ter um banco de dados em uma empresa é registrar e manter suas informações mais importantes. O responsável pela manutenção e administração dessas informações e de todos os sistemas que rodam utilizando bancos de dados é o Administrador de Banco de Dados, mais conhecido como DBA
A cada ano que passa o trabalho deste profissional está cada vez mais complexo, pois os fatores que mais o afetam estão em constante crescimento, mais dados, mais bancos de dados, virtualização e carência de profissionais eficientes no mercado de trabalho.

O crescimento de dados, por exemplo, tem sido enorme nos últimos anos. Há alguns anos atrás (década passada), os DBAs se preocupavam com Megabytes, hoje tem que lidar com Terabytes e já em algumas grandes companhias com Pentabytes.

Isto tem gerado tarefas bem complexas para seu gerenciamento. Como, por exemplo, monitorar com segurança seus backups, o monitoramento e planejamento desse crescimento, Multiplataforma, Virtualização, Tunning, Capacitação e muitos outros.

E isso é apenas parte de suas funções, o DBA deve se preocupar se as aplicações que rodam utilizando os bancos de dados foram criadas dentro dos padrões, que o banco exige, com tabelas modeladas, quantidade de índices nas aplicações, usuários que as utilizarão, enfim uma série de outros fatores que podem, e muito, atrapalhar seu desempenho. Digo "seus", pois à medida que crescem o volume dos bancos de dados crescem também os tipos de plataformas e de versões a serem administradas.

Hoje a grande maioria dos DBAs tem que gerenciar ambientes de múltiplos bancos de dados e o seu mais novo desafio é estender seus conhecimentos a outros tipos não conhecidos anteriormente pelo profissional.

Outro fator que esta se tornando cada vez mais comum é a virtualização. Com o grande crescimento de “datacenters” virtualizados, criou-se outro tipo de problema para se administrar banco de dados, que vão desde o planejamento da capacidade de seus servidores ao monitoramento da performance.

Performance, este é o grande desafio. Quem nunca ouviu "minha aplicação esta travada" ou ainda "nosso sistema está com problemas hoje", frases comuns que afetam diretamente os DBAs, pois todos acreditam ser deles a responsabilidade de uma aplicação rodar "a todo vapor". O constante monitoramento da performance de um banco de dados é a garantia que os usuários acessem os dados mais rápidos com facilidade e que o banco de dados utilize seus recursos de maneira eficiente.

Hoje temos uma carência de bons profissionais. Administradores de bancos de dados experientes sempre foram difíceis de encontrar, o treinamento é fundamental na sua formação e para quem deseja estar atualizado para o mercado. Apesar de esses fatores aumentarem os desafios do dia-a-dia, fornecedores de banco de dados têm trabalhado para que seus bancos sejam cada vez mais "autogerenciáveis", algo tremendamente positivo e com melhorias já notadas. Porém, a complexidade do ambiente de SGBD está aumentando e não parece ter um fim para a gestão e intervenção humana.

Independente desses desafios, espera-se que o DBA, sobrecarregado de trabalho, mantenha os sistemas de banco de dados essenciais disponíveis e otimizados para ter alta performance. O DBA de alta performance deve concentrar-se nas áreas fundamentais do gerenciamento de banco de dados, que são: Armazenamento, Capacidade e Performance.

Segundo Scott Walz, diretor sênior de produtos da Embarcadero, "Para cumprir essas metas, o DBA deve adotar uma estratégia e equipar-se com as ferramentas certas para enfrentar esses desafios, pois ainda há muito que aprender, compreender e dominar a cada novo lançamento de banco de dados".

segunda-feira, 26 de julho de 2010

Algumas dicas Uteis

Reproduzir arquivos de som WAV:


{ Inclua na seção uses: MMSystem }

PlaySound('C:\NomedoArquivodeSom.wav', 1, SND_ASYNC);

--------------------------------------------------------------------------------------------------------------

Enviar Arquivo para lixeira :

Inclua na seção uses: ShellApi

{ Coloque a procedure abaixo na seção implementation }

procedure ArqParaLixeira(const NomeArq: string; var MsgErro: string);
var
Op: TSHFileOpStruct;
begin
MsgErro := '';
if not FileExists(NomeArq) then begin
MsgErro := 'Arquivo não encontrado.';
Exit;
end;
FillChar(Op, SizeOf(Op), 0);
with Op do begin
wFunc := FO_DELETE;
pFrom := PChar(NomeArq);
fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
end;
if ShFileOperation(Op) <> 0 then
MsgErro := 'Não foi possível enviar o arquivo para a lixeira.';
end;

{ - Coloque um botão no Form;
- Altere o evento OnClick do botão conforme abaixo: }

procedure TForm1.Button1Click(Sender: TObject);
var
S: string;
begin
ArqParaLixeira('c:\Diretorio\Teste.doc', S);
if S = '' then
ShowMessage('O arquivo foi enviado para a lixeira.')
else
ShowMessage(S);
end;

--------------------------------------------------------------------------------------------------------------

Fechar o Windows:

{ Reinicia o Windows }
ExitWindowsEx(EWX_REBOOT, 0);

{ Desliga o Windows }
ExitWindowsEx(EWX_SHUTDOWN, 0);

{ Força todos os programa a desligarem-se }
ExitWindowsEx(EWX_FORCE, 0);

{ Você já observou a caixa "Propriedades", aquela que mostra
as propriedades de um arquivo no Windows Explorer, não
aparece na lista do Alt+Tab e tampouco na barra de tarefas?

Isto ocorre porque ela funciona como uma ToolWindow, enquanto
os demais aplicativos funcionam como AppWindow. Porém podemos
mudar o comportamento de nossos programas feito em Delphi
para que se comportem como uma ToolWindow também.

Para experimentar, crie um novo projeto e altere o
Project1.dpr como abaixo (não esqueça do uses):
}

program Project1;

uses
Forms, Windows,
Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

var
ExtendedStyle : Integer;
begin
Application.Initialize;

ExtendedStyle := GetWindowLong(Application.Handle, gwl_ExStyle);
SetWindowLong(Application.Handle, gwl_ExStyle, ExtendedStyle or
ws_Ex_ToolWindow and not ws_Ex_AppWindow);

Application.CreateForm(TForm1, Form1);
Application.Run;
end;

--------------------------------------------------------------------------------------------------------------

Obter nome do usuário e a empresa registrada no Windows:

Inclua na seção uses: Registry

{ Coloque um botão no form e altere seu evento OnCkick
como abaixo: }

procedure TForm1.Button1Click(Sender: TObject);
var
Reg: TRegIniFile;
S: string;
begin
Reg := TRegIniFile.Create('SOFTWARE\MICROSOFT\MS SETUP (ACME)\');
try
S := Reg.ReadString('USER INFO','DefName','');
S := S + #13;
S := S + Reg.ReadString('USER INFO','DefCompany','');
ShowMessage(S);
finally
Reg.free;
end;
end;    

Executar programa do DOS e fechá-lo em seguida

{ Coloque isto no evento OnClick de um botão: }

WinExec('command.com /c programa.exe',sw_ShowNormal);

{ Se quizer passar parâmetros pasta adicioná-los após o
nome do programa. Exemplo: }

WinExec('command.com /c programa.exe param1 param2',sw_ShowNormal);

domingo, 25 de julho de 2010

Como gravar posição do form no registro do windows e recuperá-lo



Caros amigos delphianos, esta dica é muito útil para quem precisa gravar a posição do formulário no registro do windows e assim quando o usuário for abrir aquele mesmo form ele irá buscar esta informações no registro do windows e chamar o form do mesmo jeito que o usuário visualizou pela ultima vez
Basta inserir no FormShow do form a seguinte linha de código:
// Recupera a posição da janela no registro do windows
GetRegWindowState(Self, '\Software\Software Teste\Teste\Cadastro\Form\CadTabPreco');

E para gravar as informações insira esta linha de código no FormClose do form. 
// Grava a posição do form para posterior recuperação no "FormShow" 
SetRegWindowState(Self,'\Software\Software Teste\Teste\Cadastro\Form\CadTabPreco');

Observação: Self: é o próprio objeto form que está sendo executado.
'\Software\Software Teste\Teste\Cadastro\Form\CadTabPreco': Caminho no registro do windows aonde será gravada as informações.



Curso de Delphi: 7.Consultas SQL