Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Convertir Un TObject a String? (https://www.clubdelphi.com/foros/showthread.php?t=68558)

Jhonjhon_123 21-06-2010 05:48:29

Convertir Un TObject a String?
 
Hola!

miren, tengo un ListView en el cual uso Item.SubItems.Objects[0] para guardar datos adicionales, para esto hago:

Código Delphi [-]
Item.SubItems.Objects[0] := TObject('Texto X');

Ahora lo ke kiero hacer es volver a combertir eso a String y mostrarle en un ShowMessage.

Como lo haria?

Gracias!

BrunoBsso 21-06-2010 06:05:42

Código Delphi [-]
var
  S:String;
begin
S := Item.SubItems.Objects[0] as String;
end;
Así debería funcionarte.
También podés verificarlo antes, con if (Item.SubItems.Objects[0] is String) then.
Espero que sirva. Sino, avisame así no me equivoco yo cuando lo necesite

Jhonjhon_123 21-06-2010 06:10:34

Hola, puse esto:

S: String;
begin

S := LV_Cat.Selected.SubItems.Objects[0] as String;

showMessage(S);

pero me manda un error:

')' expected but ';' found

ke pasa hay?

BrunoBsso 21-06-2010 08:57:08

Ahí te está diciendo que pusiste un ";" donde debería ir un ")".
Mostrame el pedazo de código que te da error y te digo.

maeyanes 22-06-2010 18:37:22

Hola...

Vaya, no había leido bien este tema...

En Delphi, el tipo de datos string no es una clase, así que hacer algo como LV_Cat.Selected.SubItems.Objects[0] as string no es correcto.

Para hacer lo que necesitas tendrías que crear una nueva clase que internamente maneje un string, y entonces si, guardar objetos de esta clase en la propiedad mencionada. Algo como:

Código Delphi [-]
type
  TString = class
  private
    FStr: string
  public
    property Str: string
      read FStr
      write FStr;
  end;

// Agregamos un objecto TString a la lista:
var
  Str: TString;

begin
  Str := TString.Create;
  Str.Str := 'Mi cadena';
  Item.SubItems.Objects[0] := Str;
end;

// Leemos el "String" guardado
var
  S: string;

begin
  S := TString(LV_Cat.Selected.SubItems.Objects[0]).Str
end;

// Al cerrar la forma que contiene el TListView tendrías que hacer algo como:
var
  I: Integer;

begin
  for I := 0 to Pred(LV_Cat.Selected.SubItems.Count) do
    LV_Cat.Selected.SubItems.Objects[0].Free
end;

También puedes checar este link: http://delphi.about.com/od/vclusing/..._addobject.htm



Saludos...

delphi.com.ar 22-06-2010 19:05:37

La verdad que no me gusta nada lo que estas haciendo, te estas garantizando MemoryLeak. Si quieres guardar mas información, ya que no puedes utilizar una columna "invisible" porque no existe tal propiedad, la VCL te propone utilizar el campo Data del TListItem, mismo el TListView dispone del evento OnDeletion para que liberes la información almacenada en ese puntero en el caso de ser necesario.

Saludos!


La franja horaria es GMT +2. Ahora son las 06:46: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