sexta-feira, 17 de julho de 2009

Imagem de cabeçalho dinâmica no Rave Reports

Você tem o seu sistema, emite relatórios em Rave Reports e precisa customizar o relatório para atualização dos cabeçalhos de relatório a cada novo cliente? E porque não usar cabelhos com imagens e atribui-las dinamicamente ao Rave em tempo de execução? - Neste post veremos como passar para o Rave, através de parâmetros o caminho de um Bitmap que deverá ser carregado em tempo de execução e ser exibido como sendo o cabeçalho do relatório.

Inciando pelo Rave, crie um novo documento de relatórios, crie uma estrutura utilizando os componentes Region e Band e adicione um componente Bitmap Component. Acessando agora o Event Editor do Bitmap, selecione o evento onBeforePrint e insira seguinte linha de código:

function Bitmap1_OnBeforePrint(Self: TRaveBitmap);
begin
Bitmap1.FileLink := Raveproject.getparam('pImagem');
end OnBeforePrint;


Obs.: Clique em compile e certifique-se que o código seja aceito pelo Rave.

O código faz com que o caminho seja atribuido para a imagem em tempo de execução de acordo com o valor recebido no parâmetro "pImagem" que deverá ser criado na propriedade Parameters do relatório.

Agora criando a aplicação Delphi, adicione os componente RvProject e RvSystem, faça a configuração dos mesmos (ver configurações), adicione um componente OpenDialog para localizar o Bitmap e adicione um botão vinculando a ele o seguinte código que irá atribuir o arquivo selecionado ao parâmetro e exibir o relatório:


procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Filter := 'Bitmap (*.bmp)|*.bmp';
if OpenDialog1.Execute then
begin
RvProject1.Open;
RvProject1.SelectReport('Report1',False);
RvProject1.SetParam('pImagem',OpenDialog1.FileName);
RvProject1.Execute;
end;
end;


Pronto, execute agora a aplicação e clique sobre o botão, localize a imagem do cabeçalho na extensão .bmp e veja que a mesma é exbida no relatório do Rave Reports. Na sua aplicação, crie uma seção de parâmetros em alguma tabela do banco de dados ou mesmo no arquivo de configurações *.INI (ver configurações) e mantenha o caminho do cabeçalho de relatório sempre salvo. Abraço e até o próximo post.

segunda-feira, 13 de julho de 2009

Listando programas instalados

Já pensou em fazer um aplicativo capaz de listar todos os programas instalados em seu computador? E associar os devidos ícones a cada um dos programas instalados? Neste post irei mostrar a criação de uma rotina bem simples capaz de lhe exibir a lista de todos os programas que você possui instalados ai no seu Windows associando os icones correspondentes a cada um deles.

Para começar, crie uma nova aplicação Delphi for Win32 e adicione ao formulário principal um componente Button alterando a propriedade Align para "alTop", um Label com a propriedade Align para "alBotton", um ListView organizado como "alClient" e também um componente ImageList e adicione neste uma imagem que será utilizada como imagem Default caso não seja possível encontrar o ícone do programa listado.


Acessando a unit de código do aplicativo, declare uma procedure chamada "ListaProgramasInstalados" e a seguir use as teclas Shift+Ctrl+C para fazer a implementação da mesma e adicione o código a seguir que se encontra comentado de acordo com as funcionalidades dos principais blocos que serão executados:

Obs.: declare as uses Registry e Shellapi.


procedure TForm1.ListaProgramasInstalados;
Var
List:TStringList;
Registry : TRegistry;

I:Integer;

Icon : TIcon;

DisplayName, DisplayIcon:String;
Item:TListItem;

begin

{ Cria objeto para pesquisa no registro do Windows }
Registry := TRegistry.Create;

{ Cria uma objeto para listagem dos programas }

List := TStringList.Create;

{ objeto para associar os icones aos programas }

Icon := TIcon.Create;

try
with
Registry do
begin
RootKey := HKEY_LOCAL_MACHINE;

if
OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall',False) Then

Begin

{ obtem a lista de nomes dos programas instalados }
GetKeyNames(List);
CloseKey;

End;
{ percorre a lista de programas e busca o ícone para associá-lo }
for i:=0 to List.Count-1 do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+List[i],False);
DisplayName := ReadString('DisplayName');
DisplayIcon := ReadString('DisplayIcon');
if DisplayName <> '' then
begin
{ faz a associação do ícone ao programa }
Item := ListView1.Items.Add;
Item.Caption := DisplayName;
if DisplayIcon <> '' then
begin
Icon.Handle := ExtractIcon(HInstance,PAnsiChar(DisplayIcon),0);
Item.ImageIndex := ImageList1.AddIcon(Icon);
end else
Item.ImageIndex := 1;
end;
CloseKey;
End;
end;
Finally

{ limpa os objetos da memória }
Registry.Free;

List.Free;

Icon.Free;

end;
end
;


Por final, adicione ao evento OnClick do botão o código a seguir fazendo com que o procedimento seja executado e os programas listados, exibindo no Label a quantidade de programas que estão aparecendo na listagem.

procedure TForm1.Button1Click(Sender: TObject);
begin
ListaProgramasInstalados;
Label1.Caption := IntToStr(ListView1.Items.Count)+' programas instalados em seu computador.';

end;

Execute o aplicativo e clique sobre o botão para visualizar seu funcionamento. Abraço q até o próximo post.