Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-07-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Envio errores (Delphi4) a través del correo electrónico

Hola, tengo una aplicación hecha en Delphi 4, y quisiera saber como podría hacer para conseguir que cuando se produce un error de cualquier tipo, automaticamente el programa copie la pantalla con el error y active el correo electrónico para enviarmelo.

Un saludo
Jose Manuel
Responder Con Cita
  #2  
Antiguo 20-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Lo de enviar un correo es facil con las Indy (incluso tienes un ejemplo de como hacerlo). Las Indy las encontraras para D4 y superior en http://www.nevrona.com/Indy/download/index.html

El tema de enviar una copia de la pantalla, ya no te sabria decir, pero, de hecho, en la pantalla de error que salta, lo unico que indica es el error producido, que eso sí que es facil capturarlo

Código:
try
except
   on E: Exception do
       EnviaMensajeCorreo(E.Message);
end;
Donde EnviaMensajeCorreo es la funcion que envia el correo y que se le pasa por parametro un string que contiene el error producido en la aplicación

Espero te sirva
Responder Con Cita
  #3  
Antiguo 21-07-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Gracias por la respuesta, pero el problema que le veo es que debo poner un "try.. except" en cada procedure de mi aplicación y serían muchisimos.

Lo ideal sería una formula que una vez producido el error en cualquier parte de la aplicación, copiase la pantalla y la pegase a un correo electrónico listo para enviarla, pero sin tener que escribir el "try.. except" en cada procedure, function, etc,

... bueno, a no ser que lo ideal fuese escribir estas lineas "try..except" en todas las procedure, function, etc,

En clipper había una función que hacia lo que yo digo, una sola función gestionaba todos los errores.

Un saludo
Jose Manuel
Responder Con Cita
  #4  
Antiguo 21-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Puedes utilizar el OnException del TApplication o TApplicationEvents. Te recomiendo leer la ayuda de estas clases.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 21-07-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Gracias de nuevo, creo que he solucionado esta parte de "TApplicationEvents" y tambien la del envío del correo electrónico, pero no sé como copiar la pantalla a un fichero JPG, para poder anexarlo al correo.

Un saludo
Jose Manuel
Responder Con Cita
  #6  
Antiguo 21-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Aquí te muestra como hacer todo lo que tu pides
http://www.clubdelphi.com/foros/show...=&threadid=794

Pero como para "molestar" un poquito, también te recomiendo este hilo, donde no esta todo lo del anterior, pero el código es bastante mas prolijo (y no es porque es mío!!! )
http://www.clubdelphi.com/foros/arch...ic.php?t=19728
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #7  
Antiguo 21-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Posteado originalmente por delphi.com.ar
Aquí te muestra como hacer todo lo que tu pides
http://www.clubdelphi.com/foros/show...=&threadid=794

En el caso del primer link recomendado por delphi.com.ar, me parece que la implementación tiende a perder memoria, pues hay un objeto llamado str que se crea y nunca es liberado.

Además, puede perder recursos al no utilizar composiciones try/finally

Te recomiendo tener cuidado con él.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #8  
Antiguo 21-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por jachguate
[b]En el caso del primer link recomendado por delphi.com.ar, me parece que la implementación tiende a perder memoria, pues hay un objeto llamado str que se crea y nunca es liberado.
Por eso de la segunda recomendación... Solo tendría que pasar el BMP a JPEG!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #9  
Antiguo 22-07-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Gracias otra vez, ya he conseguido copiar la imagen en un JPG pues eso es lo que necesitaba para anexar al email, pero tengo un problema, en la imagen que copia no aparece el mensaje del error, en su lugar aparece un cuadro en blanco, yo querria que la copia de la pantalla fuera de todo lo que está en ella, incluido el mensaje del error.

Bueno gracias de nuevo y un saludo, ya casi lo tengo...
Jose Manuel
Responder Con Cita
  #10  
Antiguo 23-07-2003
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
No se donde la estas capturando, pero si lo haces en el OnException de la aplicación, no necesitas que el error se vea en la imagen, pues podes obtenerlo con e.Message.

Suponiendo que e es la variable Exception que recibis en el método.

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #11  
Antiguo 23-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Puedes usar la función que te he pasado de esta forma:
Código:
WindowToBitmap( GetDesktopWindow, Image1.Picture.Bitmap );
Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #12  
Antiguo 24-07-2003
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
Hola,

He utilizado para copiar la pantalla el siguiente procedimiento, pero esto tiene el problema que cuando realiza la copia, si hay una ventana superpuesta, lo normal en mi caso, ya que llamo a este procedimiento cuando hay un error, se guarda solo la pantalla principal no apareciendo la del mensaje de error y en su lugar queda un recuadro en blanco.

La solución puede ser hacer la copia de la pantalla antes de que aparezca en pantalla el mensaje del error, y pasar al correo electronico el texto del mensaje del error, pero como pasar el texto de la exception a una variable de texto.


Un saludo
Jose Manuel
.................................................

procedure TfVerDiarios.AppException(Sender: TObject; E: Exception);
var
strPath : string;
Errorchar;
begin
Application.ShowException(E);
strPath:=ExtractFileDir(Application.ExeName)+'\';
CrearImg(strPath,'imgtmp.jpg', fverDiarios, error); //Creamos la imagen
end;



procedure CrearImg(_path: string; _file:string; _form:TCustomForm; _except:Pchar);
var
imag: TImage;
jpg: TJpegImage;
desktop: TCanvas;
begin

texto:= 'Si Ud. lo desea puede enviar a través del correo electrónico esta incidencia'+#13+
'explicando brevemente el error producido; al correo que Ud. envie se adjuntará'+#13+
'automáticamente una copia de la pantalla del error.'+#13+#13+
'¿ Quiere enviar la incidencia (S/N) ?';

if Application.MessageBox( pchar(texto),'Envío incidencia por correo electrónico',
MB_OKCANCEL + MB_DEFBUTTON1) <> IDOK then exit;

imag:=TImage.Create(_form);
imag.Width:=screen.Width;
imag.Height:=screen.Height;
desktop:=TCanvas.Create;
with DeskTop do
Handle := GetWindowDC (GetDesktopWindow) ;

with Imag.Canvas do
CopyRect (Rect (0, 0, screen.Width, screen.Height),DeskTop,Rect (0, 0, screen.Width, screen.Height));

jpg:=TJPegImage.Create;
jpg.Assign(imag.Picture.Bitmap);
imag.Free;
jpg.CompressionQuality:=25; //Calidad del JPEG
jpg.Compress; //Comprimimos la imagen
jpg.SaveToFile(_path+_file);
jpg.Free;
desktop.Free;
EnvioMailError(_path+_file, _except);
end;
Responder Con Cita
  #13  
Antiguo 24-07-2003
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Posteado originalmente por Jose Manuel
La solución puede ser hacer la copia de la pantalla antes de que aparezca en pantalla el mensaje del error, y pasar al correo electronico el texto del mensaje del error, pero como pasar el texto de la exception a una variable de texto.
Esta todo dicho, solo tendrías que poner Application.ShowException(E); como última línea en el evento AppException.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 07:14:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi