Ver Mensaje Individual
  #1  
Antiguo 20-04-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Extraer nombre de unidad en tiempo de ejecución.

Buenas foristas,

Llevo desde hace tiempo intentando obtener información sobre la unidad, u objeto en ejecución.
Viendo en CodeGear he encontrado un ejemplo sencillo de como extraer el nombre de la unidad donde está declarado la clase de un objeto. La función es sencilla:

Código Delphi [-]
function GetUnitName(argObject: TObject): string;
var
  ptrTypeData: PTypeData;
begin
  if (argObject.ClassInfo <> nil) then
  begin
    ptrTypeData := GetTypeData(argObject.ClassInfo);
    Result := ptrTypeData.UnitName;
  end;
end;

Lo que tengo pensando es determinar ciertos "permisos" para acceder a un dato. Veran... yo estoy declarando un form genérico el cual contiene un array de tamaño fijo (por el momento) del tipo variant. Mi idea es emplear ese array y estar evitando declarar variables. Entonces se me ocurrió la idea de darle la posibilidad de definir algo como "permisos" para acceder al contenido de las variables. Algo como public y private.

Tengo pensado hacer algo como:

// En algún momento anterior...
ElArray[4].Permiso = pPrivate;

Con esto estoy indicando que quiero que el contenido de la posición 4 sea privado para el form.

De tal modo que cuando haga esto:

ExtractValue(Index: integer, ToCopy: ¿?);

Siendo ExtractValue un procedimiento con el que cuenta la clase, Index es la posición del array a examinar y ToCopy alguna variable o propiedad de algún objeto.

Pueda determinar si ToCopy puede o no acceder al dato almacenado en la posición Index del array. De modo tal que si ToCopy está declarado en una unidad (si es una variable) o es una propiedad de algún objeto (instancia... claro está) declarado dentro de la unidad se le permita pasar dicho valor.
Pero claro... si ToCopy está en otra unidad... no se le permita acceder a este dato, arroyando una excepción.

Un planteo que se me estaba ocurriendo es tener dos arrays: uno para privado y otro para público...

Se que no es muy elegante hacer lo que pretendo.... sobre todo si es más sencillo hacer cosas como:

Código Delphi [-]
TForm1 = class(Tform)
....

public
  variable1: tipo;
  variable2: tipo;
private
  variable3: tipo;

....
end;

De modo que con un simple:

Código Delphi [-]
algo := form1.variable1;

Mi intención es evitarme estar declarando estas variable. Y Al mismo tiempo que las herencias de dicho Form puedan implementar mayores funciones, procedimientos... de acuerdo a la necesidad del momento.

Escucho alternativas.
Espero que se me haya entendido algo...

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita