Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-11-2007
blueicaro blueicaro is offline
Miembro
 
Registrado: abr 2005
Ubicación: España
Posts: 44
Poder: 0
blueicaro Va por buen camino
Unhappy Extraer datos de un tlist

Hola, tengo una estructura, como sigue
Código Delphi [-]
Type TComun = Record
  Nombre : String;  
  Tarea   : String; 
  Modulo : String;  
  Rutina : String;  
  Tipo   : String;  
  Scope  : String;  
end;
(...)
Comun : TComun

Cargo datos en comun, por ejemplo:
Código Delphi [-]
Comun.Nombre :='Hola';
Comun.Tarea := 'MiTarea'
(...)
Milista.Add(@Comun)
Pero como recupero los datos, ya que esta línea me da error:
Comun := Milista[1];
Me dice que TComun es incompatible con Pointer
Gracias por su tiempo
/BLueIcaro
Responder Con Cita
  #2  
Antiguo 18-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Digamos que el compilador no sabe que "Milista[1]" es del tipo "TComun", así que tienes que ayudarle un poquito, haciendo un "cast" de dicha variable, es decir, para que el asunto quede tal que así:

Código Delphi [-]
Comun := TComun(Milista[1]);

Vamos... no sé si estoy metiendo la pata...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 18-11-2007
blueicaro blueicaro is offline
Miembro
 
Registrado: abr 2005
Ubicación: España
Posts: 44
Poder: 0
blueicaro Va por buen camino
Ahys

Bueno, Dec, no metes la pata, porque aportas idea.
Pero el compilador se ha reído de mi de nuevo
Y me dice:
Cita:
Invalid type cast
/BLueIcar
Responder Con Cita
  #4  
Antiguo 18-11-2007
bpesoj bpesoj is offline
Registrado
 
Registrado: dic 2004
Posts: 9
Poder: 0
bpesoj Va por buen camino
Hola,
Un TList es una colección de punteros, de manera que cada elemento debe ser un puntero:
Código Delphi [-]
var
   elemento:^TComun;
   nombre:String;
begin
   elemento:=MyLista[0];  // saca el primer elemento de la lista...
   nombre:=elemento^.nombre;
   ....
   ....
end;

Espero te sirva.
Responder Con Cita
  #5  
Antiguo 18-11-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por blueicaro
Bueno, Dec, no metes la pata, porque aportas idea.
Pero el compilador se ha reído de mi de nuevo
Se agradece. Pero, es que me lo temía... A ver si lo que te comenta el compañero te apaña.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 18-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
¿asignaciones de registro así por la cara?

Eso siempre lo confundo, no sé si es una asignación de punteros, o delphi hace una copia entera de la memoria .

Yo te diría que usaras un TObjectList, y tu registro lo convirtieras en un TObject, es mucho más fácil de usar y parecido a delphi.
Código Delphi [-]
Type TComun = Class(TObject)
  public
  Nombre : String;  
  Tarea   : String; 
  Modulo : String;  
  Rutina : String;  
  Tipo   : String;  
  Scope  : String;  
end;

Para crear la lista:
var 
lista :TObjectList; // variable global del form.

procedure TForm1.Button1Click(Sender:TObject);
begin
  lista := TObjectList.Create(True); // creamos la lista en memoria
// y le decimos que al liberar la lista, libere tambien todos los objetos que tenga.
end;

procedure TForm1.btnAnadirObjetoClick(sender:Tobject);
var c:Tcomun
begin
   c:= TComun.Create;
   c.nombre := edit1.text;
   c.tarea := edit2.text;
   ...
   lista.Add(c); // y ahora se añade a la lista.
end;

procedure TForm1.BtnBuscarElPrimero(Sender:Tobject);
var uno:Tcomun;
begin
  if Assigned(lista) then // si la lista está creada
    if Lista.Count > 0 then // si tiene objetos dentro
      uno := TComun(lista[0]); // ahora si admite esto el compilador
   // porque son asignaciones de punteros
  // de hecho, no he creado el objeto "uno" con   uno := Tcomun.create por
  // esto mismo se sabe que son asignaciones de punteros
  

  ShowMessage(uno.nombre);
end;

procedure TForm1.FormClose(....);
begin 
  // fumigar la lista y todos los objetos que tenga 
  lista.free; 
end;

Edito: ahora recien veo el comentario de bpesoj, totalmente válido y muy muy similar a lo que yo expongo (ya que también uso punteros pero camuflados).

Ya tienes 2 opciones para elegir

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 18-11-2007 a las 23:46:19.
Responder Con Cita
  #7  
Antiguo 19-11-2007
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

Creo que la solución con TObjectList sería la más recomendable en este caso.
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
Problemas para extraer datos de la BD Nelly Varios 3 15-05-2007 20:28:36
Extraer datos DNI/PASS jdiazan Varios 3 30-08-2006 11:57:38
Como extraer datos de 3 tablas SQL MRang14 SQL 0 04-10-2004 21:29:21
Extraer datos de un dataset? Durbed Conexión con bases de datos 5 01-10-2004 16:40:30
extraer datos de una XML coletaum Varios 2 19-01-2004 13:22:09


La franja horaria es GMT +2. Ahora son las 14:39:19.


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