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 29-02-2016
rmendoza83 rmendoza83 is offline
Miembro
 
Registrado: ago 2006
Posts: 50
Poder: 18
rmendoza83 Va por buen camino
Obtener Nombre de la Unidad en Uso

Buenos Dias compa;eros, un saludo cordial a todos.

Queria saber si alguno dispondra de una funcion que obtenga el nombre de la unidad en uso (UnitName), investigando en internet vi algo relacionado a la unidad RTTI que trabaja en base a esto, pero por falta de tiempo queria ver si ya alguien por aqui tendra alguna desarrollada! Estoy terminando un modulo de tratamiento de errores y quisiera incorporar en en log esta cadena para mejor soporte de usuarios.

Gracias.
Responder Con Cita
  #2  
Antiguo 29-02-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿No te sirve extraerla de GetCurrentDirectory?

Saludos.
Responder Con Cita
  #3  
Antiguo 29-02-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por escafandra Ver Mensaje
¿No te sirve extraerla de GetCurrentDirectory?
Creo que el compañero se refiere a que, en una excepción, por ejemplo, poder mostrar el nombre de la unidad donde se produjo el error.

LineComment Saludos
Responder Con Cita
  #4  
Antiguo 29-02-2016
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.

Podrías usar RTTI, por ejemplo:
Código Delphi [-]
unit uException;

interface

uses SysUtils;

type
  TAppExceptHandler = class(TObject)
  public
    procedure Handle(Sender: TObject; E: Exception);
  end;

var
  AppExceptHandler: TAppExceptHandler;

implementation

uses TypInfo, Dialogs;

procedure TAppExceptHandler.Handle(Sender: TObject; E: Exception);
var
  Ptd: PTypeData;
begin
  Ptd := GetTypeData(Sender.ClassInfo);
  if Assigned(Ptd) then
    ShowMessage(Format('Se produjo un error en %s%s%s',[Ptd^.UnitName, #10, E.Message]))
  else
    //...
  ;
end;
end.

Código Delphi [-]
program Project1;

uses
  Forms,
  uException in 'uException.pas',
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  Application.OnException := AppExceptHandler.Handle;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

Forzar errores en distintas unidades :
Código Delphi [-]
unit Unit1;
...
type
  TForm1 = class(TForm)
    Button1: TButton;   
    Button2: TButton;
    Button3: TButton; 
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
...
  
implementation

uses Unit2, Unit3;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Visible := False;
  Edit1.SetFocus;  // Asignar foco a ctrl invisible
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self); // TStrings.LoadFromFile
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Form3 := TForm3.Create(Self); // ADOQuery sin configurar
end;

...

Resultado:


Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 01-03-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Estupendo Daniel! Una pregunta, esta información (unit name) ¿viene en cualquier RTTI o sólo en las últimas versiones de Delphi?

LineComment Saludos
Responder Con Cita
  #6  
Antiguo 01-03-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡Qué monstruo! y lo fácil que parece.
Responder Con Cita
  #7  
Antiguo 01-03-2016
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 roman.

UnitName ya está definido en el tipo TTypeData en En Delphi 7, desconozco si lo está en versiones anteriores.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 01-03-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Gracias! No recordaba haberlo visto, pero qué bueno que lo aclaras.

LineComment Saludos
Responder Con Cita
  #9  
Antiguo 01-03-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Pues en Delphi 2010, la clase TObject ya dispone del siguiente metodo de clase:


Código Delphi [-]
  TObject = class
  public
    class function UnitName: string;

La cual retorna el nombre de la unidad del tipo de clase en cuestion, y siendo que todo deriva de TObject

Asi que esto basicamente funciona:

Código Delphi [-]
ShowMessageFmt('UnitName %s', [TObject.UnitName]);
ShowMessageFmt('UnitName %s', [TForm1.UnitName]);
ShowMessageFmt('UnitName %s', [DescendienteDeTObject.UnitName]);
Responder Con Cita
  #10  
Antiguo 01-03-2016
rmendoza83 rmendoza83 is offline
Miembro
 
Registrado: ago 2006
Posts: 50
Poder: 18
rmendoza83 Va por buen camino
Hola Saludos a todos! exactamente lo que me muestra ecfisa es lo necesito! Lo revisare a fondo! Gracias compa;ero!!!
Responder Con Cita
  #11  
Antiguo 01-03-2016
rmendoza83 rmendoza83 is offline
Miembro
 
Registrado: ago 2006
Posts: 50
Poder: 18
rmendoza83 Va por buen camino
Ahora bien, que seria mas recomendable? utilizar una sola unidad para el control de errores? o hacer el control propiamente dentro de cada código en los bloques try...except que manejo? de esta manera esta bastante simplificada y esta totalmente adaptable a mi proyecto, aunque básicamente como lo vengo haciendo lo que necesitaba conocer era la linea de código de GetTypeData que me obtiene el apuntador con toda la información de donde se esta ejecutando el código en cuestión. Yo estoy trabajando con BDS 2006, que opinan?
Responder Con Cita
  #12  
Antiguo 09-03-2016
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 290
Poder: 21
elrayo76 Va por buen camino
Como recomendación te puedo decir que el try..except lo tienes que hacer. Igualmene puede llamar a tu código cuando se produce eun errror que tienes atrapado y ahí decidir que mostrar de acuerdo al error.

Cuando tenemos centralizada la funcionalidad para atrapar los errores, lo que hacemos muchos es mediante el código de error que le pasamos personalizamos el mensaje que se quiere mostrar. Des esta forma en todos los lugares donde se de el mismo error siempre saldrá el mismo mensaje. Eso si, tienes que saber que tipo de error dio ese código porque puede que dos errores de distintos tipos tengan el mismo código.

Si quieres puedes mandar otro parámetro mas a esa función para escribir algo mas que necesites en algún lugar particular. Esto es una primera ayuda, despues tu puedes ir complicandola lo mas que necesites.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
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
Nombre de la Unidad activa riqui73 C++ Builder 11 15-07-2010 14:49:33
En una instalación en CITRIX obtener nombre unidad C: de mi PC Jose Manuel Conexión con bases de datos 0 23-04-2010 18:41:09
Detectar Nombre unidad donde se inserto CD JuanErasmo API de Windows 11 27-04-2007 22:09:20
Saber nombre de la unidad de CD rex Varios 2 18-08-2005 23:16:08
Cambiar el nombre de la unidad de DD? danytorres Varios 1 05-02-2004 07:07:58


La franja horaria es GMT +2. Ahora son las 13:12:15.


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