quinta-feira, 26 de maio de 2011

Capturar Imagem do Form e transformar em JPG

Salve galera, estou estendendo meu dia hoje, ou melhor, minha madrugada para compartilhar uma dica talvez não tão importante, mas que em casos iguais a este que me fez usar o recurso, pode ser interessante. Tenho uma situação de um sistema onde ocorrem casos do cliente dizer "...mas eu tinha colocado o valor certo, foi o sistema que alterou", e já cansado de procurar pelo dito erro no sistema, vou passar a desconfiar do usuário e dar um "Print" no formulário dele a hora que ele salvar e guardar o jpg, ou seja, vou capturar a imagem do form, transformar em jpg e salvar no diretório do sistema. Se ele apagar os arquivos, bom, ai acho que é possível interpretar que ele está assumindo a culpa, caso contrário, vou ter pelo menos uma prova que ele digitou mesmo o valor correto e voltar a bater cabeça procurando o erro no sistema.

A solução é bem simples, declare nas uses a classe "jpeg" e em seguida crie uma função ou adicione o código no próprio botão "Salvar", conforme segue abaixo:

procedure TfrmReservas.BitBtn2Click(Sender: TObject);
var
JpgSave: TJPEGImage;
begin
{aqui minha rotina de salvar o registro, cálculos, atualiza estoque, reserva quantidades, etc...}
//Cria um objeto do tipo Jpeg
JpgSave := TJPEGImage.Create;
try
//Captura a imagem do form
JpgSave.Assign((frmReservas as TForm).GetFormImage);
//Verifica se existe o diretório para salvar a imagem, se não existir, é criado
if not DirectoryExists(ExtractFilePath(Application.ExeName)+'jpg') then
CreateDir(ExtractFilePath(Application.ExeName)+'jpg');
//Salva a imagem no diretório, usando como nome o próprio código do registro salvo no banco
JpgSave.SaveToFile(ExtractFilePath(Application.ExeName)+'jpg\'+LblNumReserva.Caption+'.jpg');
finally
//Limpa objeto da memória
FreeAndNil(JpgSave);
end;
End;

Pronto, após isso, ao executar o sistema e clicar sobre o botão onde o código foi adicionado, observe que uma pasta jpg foi criada no mesmo diretório do executável do sistema e que lá estará o print do formulário. O print a seguir é da tela do sistema onde implementei a função, trata-se da reserva de sementes de grãos para associados de um sindicato, onde o sistema faz uma projeção do estoque disponível e vincula um associado à quantidade solicitada.

Espero que tenha ajudado, abraços.