Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como vaciar un variant? (https://www.clubdelphi.com/foros/showthread.php?t=54499)

Cheerpipe 20-03-2008 20:48:31

Como vaciar un variant?
 
Eso, como puedo tomar un variant y transformarlo en vacio??

PD: asignarle nil no funciona.

keyboy 20-03-2008 20:57:59

Código Delphi [-]
V := Unassigned;

Bye

Cheerpipe 20-03-2008 21:26:08

grcias por tu respuesta, pero no es exactamente lo que bsco.

Lo que es funcion hace es poner un valor nulo segun convencion y el tipo de variante

Si el variant es entero, le asignara 0, si es sring, '', si es objeto nil etc etc.

Lo que busco es algo radical y la verdad no muy correcto desde el punto de vista de la programacion. Lo que busco es transformar el variant en un tipo nulo o vacio, es decir, no cambiar su valor, si no cambiar el tipo de variatnte.

Bueno, la cosa es que al parecer delphi no hace eso pero las apis de windows si.

Dejo la funcion que me hice para tomar un variant de cualquier tipo y volvelrlo nulo.

Código Delphi [-]
function emptyVar: Variant;
  procedure _VarChangeType(var V: TVarData);
  begin
    VariantChangeType(V,V,0,varNull);
  end;
begin
  _VarChangeType(TVarData(Result))
end;

En mi caso lo use porque tengo algunos componentes ke tienen valores de tipo Variante, los cuales toman valores numericos, ransformando al variant en numero. En ciertos casos, necesito borrar estos valores, y a diferncia de un string en el ke puedo usar '' para borrar el contenido, si uso un 0 este sigue visualizandose en el componente, era por eso que yo necesitaba volvelo a un estado nulo (o sin forma).

La funcion funciona perfectamente. Tambien se puede usar para transformar un variant a otros tipos de datos.

keyboy 21-03-2008 03:11:15

Todo esto que pones lo hace delphi perfectamente. Y no es lo mismo Null (lo que tú haces) a un variant vacío.

Esta es la función Null delphi:

Código Delphi [-]
function Null: Variant;
begin
  _VarNull(TVarData(Result));
end;

procedure _VarNull(var V: TVarData);
begin
  _VarClear(V);
  V.VType := varNull;
end;

que, como ves, cambia el tipo de variant.

Bye

Cheerpipe 25-03-2008 17:53:52

Cita:

Empezado por keyboy (Mensaje 274452)
Todo esto que pones lo hace delphi perfectamente. Y no es lo mismo Null (lo que tú haces) a un variant vacío.

Esta es la función Null delphi:


Código Delphi [-]
function Null: Variant;
begin
_VarNull(TVarData(Result));
end;

procedure _VarNull(var V: TVarData);
begin
_VarClear(V);
V.VType := varNull;
end;





que, como ves, cambia el tipo de variant.

Bye


Lo primero que probe fue null, pero por algun motivo, el contenido del variant se transformaba a 0


La franja horaria es GMT +2. Ahora son las 14:45:04.

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