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 16-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Duda con Try... Except

Hola a todos de nuevo, saludos...

Estoy teniendo un pequeño problema con la función Try... Except, os pongo el código:

Código Delphi [-]
try
    principal.memo1.Lines.Add(CalcHash(principal.labedit1.Text,haSHA1));
    principal.Memo1.Lines.SaveToFile(principal.labEdit2.Text+ '\'+' Archivo Hash.crc');
  except
    on EFCreateError do
      begin
        showMessage ('Unidad seleccionada no valida. Selecciona una unidad' +
        chr(13)+'de disco duro local que sea accesible.');
        exit;
      end;
  end;

El problema aparece cuando por ejemplo selecciono una unidad de DVD que no tiene disco. Y lo que pasa es que antes de capturar el error y mostrar mi mensaje, me tira un mensaje de propio de delphi. Y mi duda es ¿cómo puedo hacer que solo salga mi mensaje de error sin mostrar ni antes ni después el mensaje de error de delphi?

Espero haberme explicado bien. Gracias y un saludo.
Responder Con Cita
  #2  
Antiguo 16-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola danielmj.

Intenta de este modo:
Código Delphi [-]
var
  Error: LongWord;
begin 
  Error := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    try
      principal.memo1.Lines.Add(CalcHash(principal.labedit1.Text,haSHA1));
      principal.Memo1.Lines.SaveToFile(principal.labEdit2.Text+ '\'+' Archivo Hash.crc');
    except
      raise Exception.Create('Unidad seleccionada no valida. Selecciona una unidad' +
        chr(13)+'de disco duro local que sea accesible.');
    end;
  finally
    SetErrorMode(Error);
  end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 16-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Buenas ecfisa,

andes de nada gracias por responder, acabo de probar tu código pero sigo con el mismo problema, de echo ahora ni tan siquiera muestra mi mensaje, simplemente se limita a mostrar 3 veces el mensaje interno de error de delphi.

De la otra forma, hay veces que va bien y otras no.

Saludos.
Responder Con Cita
  #4  
Antiguo 16-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Es extraño... Con DVD insertado o si él, no me muestra el mensaje de sistema, sólo el especificado en el código.

Por si te ayudara en algo, te adjunto la prueba que hice con Delphi 7 en Windows 8.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip danieljm.zip (3,5 KB, 6 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-10-2013
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola ecfisa,

acabo de probar el archivo adjunto que me has enviado y va perfecto, no sé por que usando el mismo codigo en mi aplicacion da error 3 veces... misterio. Lo miraré y estudiaré a ver que saco en claro.

Gracias y saludos.
Responder Con Cita
  #6  
Antiguo 17-10-2013
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.912
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Código Delphi [-]

    except
      raise Exception.Create('Unidad seleccionada no valida. Selecciona una unidad' +
        chr(13)+'de disco duro local que sea accesible.');
    end;

Saludos
No NO. Esta usando un except global!

Es mala idea capturar genericamente cualquier cosa y/o asumir que el error es "Unidad seleccionada no valida".

Que te hace pensar que esa es la REAL razon? La documentacion:

http://docwiki.embarcadero.com/Libra....EFCreateError

Cita:
EFCreateError is raised when an application unsuccessfully attempts to create a file. This can occur, for example, if a user specifies an invalid file name, or specifies the name of an existing file that cannot be overwritten because the user lacks appropriate access permission.
Muestra que puedan existir multiples causas.

Tu codigo EN NINGUN MOMENTO ESTA ASEVERANDO que la unidad seleccionada sea valida.

Osea, el mensaje es una contradiccion de lo que REALMENTE hace tu codigo.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 17-10-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
No NO.
¿Cómo lo harías?
Responder Con Cita
  #8  
Antiguo 17-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola mamcx.

El texto es copia del mensaje de danielmj, mi intención no era darle la solución definitiva al problema sino sugerirle como evitar el mensaje del sistema con SetErrorMode, (además de mostrarle que podía evitar el uso de Abort).

A diario, son muchos los problemas que leemos e intentamos solucionar y a veces no podemos dedicarle a cada uno todo el tiempo que desearíamos ...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 17-10-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Saliéndome un poco del planteo inicial de danielmj...

Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
var
  Device  : DWORD;
  U  : string;
  i  : Integer;
begin
  Device := GetLogicalDrives;
  for i := 1 to 32 do
    if Device shr i and 1 = 1 then
    begin
      U:= Chr(Ord('A') + i) + ':';
      if GetDriveType(PChar(U)) in [DRIVE_REMOVABLE, DRIVE_FIXED] then
        ComboBox1.Items.Add(U);
    end;
  ComboBox1.ItemIndex := 0;
end;


function DriveReady(Drv: string): Boolean;
var
  MaxLen, SysFlags: DWORD;
  SNumber: DWORD;
  OldErr,Error : DWORD;
  Msg   : string;
begin
  OldErr := SetErrorMode(SEM_FAILCRITICALERRORS);
  try
    if GetVolumeInformation(PChar(Drv+'\'),nil,0,@SNumber,MaxLen,SysFlags,nil,0) then
     Result:= True
    else
    begin
      Error := GetLastError;
      case Error of
          ERROR_INVALID_NAME       : Msg := 'Nobre de archivo, de directorio o etiqueta de volumen inválido';
          ERROR_PATH_NOT_FOUND     : Msg := 'Ruta no encontrada';
          ERROR_TOO_MANY_OPEN_FILES: Msg := 'Demasiados archivos abiertos';
          ERROR_ACCESS_DENIED      : Msg := 'Acceso denegado';
          ERROR_WRITE_PROTECT      : Msg := 'Unidad protegida contra escritura';
          ERROR_NOT_READY          : Msg := 'La unidad no esta lista';
          ERROR_NOT_DOS_DISK       : Msg := 'El disco especificado no puede ser accedido';
          ERROR_HANDLE_DISK_FULL   : Msg := 'Disco lleno';
          ERROR_INVALID_DRIVE,
          ERROR_BAD_UNIT           : Msg := 'No se puede encontrar la unidad especificada';
          // ...
       end;
       raise Exception.Create(Msg);
    end;
  finally
    SetErrorMode(OldErr);
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  if DriveReady(ComboBox1.Text) then
  begin
    // Guardar contenido del Memo
  end;
end;

Para contemplar mas errores revisa: System Error Codes

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
duda con ECO VCL.NET cmm07 .NET 4 03-03-2008 18:53:25
duda empty Varios 4 05-05-2004 16:56:07
duda vetustas Conexión con bases de datos 12 05-11-2003 19:54:22
duda sql vetustas SQL 5 04-11-2003 15:35:39
duda haffo Varios 3 17-10-2003 19:03:37


La franja horaria es GMT +2. Ahora son las 17:33:26.


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