Capturar erro e salvar em JPEG como...?

18/05/2008

3

Olá pessoal eu achei essa dica e como simular um Print Screen e estrou interessado em colocar em meu sistema. Mas...

Eu gostaria de que essa função seja ativada assim que acontecer um erro no sistema, e salva-se como JPEG no diretório do sistema e se possível com dada e hora...

Como resolver....?


procedure TForm1.Button1Click(Sender: TObject);
begin
keybd_event(VK_PRINT, 0, 0, 0);
keybd_event(VK_PRINT, 0, KEYEVENT_KEYUP, 0);
end;


Simular Print Screen 2
keybd_event(vk_snapshot,0, 0, 0); {Tela Toda}
keybd_event(vk_snapshot,1, 0, 0); {Janela Ativa}


Responder

Posts

18/05/2008

Max2006

Procurei no from e achei...

No Datamodule eu fiz assim...
function T_dmIntercambio.CapturaTelaJpg: TJpegImage;
var
dc : hdc;
cv : TCanvas;
aux : TBitmap;
begin

Result := TJPEGImage.Create;

aux := TBitmap.Create;
aux.Height := Screen.Height;
aux.Width := Screen.Width;

dc := GetDC(0);
cv := TCanvas.Create;
cv.Handle := dc;

//--Define o tamanho da imagem
aux.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),cv,
Rect(0,0,Screen.Width,Screen.Height));
cv.Free;
ReleaseDC(0,dc);

//-- Compacta o BMP para JPEG
Result.Assign(aux);
Result.Compress;

end;


E no componente Time eu achei isso....

S := \´F\´+FormatDateTime(\´yymmdd.hhnn\´,now)+\´.jpg\´;
CapturaTelaJpg.SaveToFile(\´C:\\hookteclas\\fotoshook\\\´+S);
end;

Alterei assim....
Na propriedade post erro da query eu coloquei assim...
S := ´F´+FormatDateTime(´yymmdd.hhnn´,now)+´.jpg´;
_dmIntercambio.CapturaTelaJpg.SaveToFile(´D:\OSCM\ERROS\´+S);

O sistema rodou...

Mas está certo...?

Será que vai ficar granvando direto ou so se o erro for executado novamente?

Tenho que colocar em todos os eventos de todas as querys do sistema?

Há alguma forma mais prática?


Responder

19/05/2008

Webjoel

Olá!

De início faça acontecer o erro e verifique! Mas de antemão pra isso funcionar você precisa colocar a função/procedure no ´main´ do seu projeto, na tela principal, se a sua não funcionar, use essa, é a que eu uso!

//procedure para salvar tela de erro

procedure TForm1.FotoErro(Sender: TObject; E: Exception);
var
  bmp : TBitmap;
  jpeg : TJPEGImage;
  dia,mes,ano,hora,min,seg, mseg : word;
begin
  bmp := TBitmap.Create;
  Clipboard.Clear;
  keybd_event(vk_snapshot,0, 0, 0);
  Application.ProcessMessages;
  bmp.LoadFromClipboardFormat(CF_BITMAP,clipboard.GetAsHandle(CF_BITMAP),0);
  jpeg := TJPEGImage.Create;
  jpeg.Assign(bmp);
  DecodeDate(now,ano,mes,dia);
  DecodeTime(now,hora,min,seg,mseg);
  jpeg.SaveToFile(ExtractFilePath(Application.ExeName) + inttostr(dia) + ´.´ + inttostr(mes) + ´.´ + inttostr(ano) + ´.´ + inttostr(hora) + ´.´ + inttostr(min) + ´.´ + inttostr(seg) + E.Message + ´.jpg´);
  jpeg.Free;
  bmp.Free;

  MessageDlg(E.Message + #1313 +´Contate o Suporte Técnico!´,mtError, [mbOK], 0);
end;

>> modo de usar

//declare nos Uses: ClipBrd, Jpeg;

//Colocar no OnCreate do Form principal:

Application.OnException := FotoErro;
[/code]


Responder

19/05/2008

Max2006

Mas essa sua função eu tenho que colocar num timer... correto?


Responder

19/05/2008

Webjoel

Não, não... é só colocar ali no local onde indiquei, o OnException da aplicação cuidará disto, sempre que haver uma excessão ele dispara a procedure!

Boas Compilações!


Responder

19/05/2008

Max2006

Já entendi no Oncreat já resolve...

Valeu....


Responder