Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   punteros o array dinámico (https://www.clubdelphi.com/foros/showthread.php?t=67907)

jonmendi 13-05-2010 11:31:59

punteros o array dinámico
 
Hola!
estoy haciendo una pequeña aplicación que lee datos de tipo record de unos ficheros y luego tiene que interactuar con estos datos.
Mi duda es: ¿es mejor que cargue estos datos en un array dinámico o uso punteros? ¿Qué os sugiere vuestra experiencia?
Muchas gracias!

Un saludo,
Jon

Ñuño Martínez 13-05-2010 13:12:50

Te recomiendo que uses las clases TList o TObjectList. Los punteros son liosos si no sabes perfectamente cómo funcionan, y aun así tienes que andarte con mil ojos para no meter la pata. Las listas dinámicas no ofrecen la flexibilidad de una clase ni por asomo. No es que TList ni TObjectList sean la panacea, pero funcionan muy bien, oyes.

Busca información sobre las dos clases que te recomiendo, que creo que por aquí las hemos comentado.

Neftali [Germán.Estévez] 13-05-2010 14:05:36

También puedes utilizar un array dinámico, pero al igual que Ñuño, te desaconsejo los punteros, por lo lioso.

jonmendi 13-05-2010 15:05:27

gracias a ambos!
yo he solido usar los punteros con frecuencia, pero a pesar de ello, creo que son un lío :D. Leeré sobre TList, y si no convence, array dinámico y a correr!

Muchas gracias monstruos!

Un saludo,
jon

Ñuño Martínez 13-05-2010 16:50:43

Un pequeño apunte:

Si sólo vas a añadir elementos a la lista y sólo vas a destruirlos al final todos "a la vez", entonces con un array dinámico tienes de sobra. TList y TObjectList están diseñados más bien para cuando vas a estar añadiendo, quitando, moviendo, limpiando, ordenando, etc.

jonmendi 17-05-2010 09:49:05

Gracias Ñuño!
efectivamente, van a ser "destruidos todos a la vez". Probaré con el array dinámico.

Muchas gracias,

Un saludo,
jon

rojo raton 03-10-2011 06:42:29

problemita para extraer un objeto de una lista
 
he hecho una clase que permite administrar un array de Tobject utilizando punteros(similar a TobjectList). Mi idea era hacer un array dinámico que me permitiese almacenar objetos del mismo tipo, por ejemplo, una lista de botones, o una lista de labels, etc. Hasta ahí va bien el asunto, pero me he trabado en lo siguiente: supongamos que ya tengo generada la lista de botones, pero cuando quiero extraer o leer un item de la lista, que es un objecto de la clase(tobject) y almacenarlo en un objeto de la clase Tbutton, me lanza un error y dice que son tipos incompatibles.
Es decir, me permite almacenar una instancia de la clase Tbutton en una variable de tipo Tobject pero no me permite lo opuesto. Espero q se haya entendido , saludos.

ecfisa 03-10-2011 09:01:46

Hola rojo raton y bienvenido a los foros de Club Delphi. :)

Siempre conviene abrir un nuevo hilo para tu consulta ya que incrementa las posibilidades de obtener respuestas.
También ayuda mucho agregar las declaraciónes y la parte del código que está generando el problema. (Demás está decir que exponer exáctamente el mensaje de error que estás recibiendo, es una de las mejores orientaciones a quién está leyendo tu mensaje)

Según entiendo de tu consulta, tenés declarado un array de TObject (llamémosle ObjArray), en el que has almacenado algunos TButtons y el problema se te presenta cuando queres trabajar con alguna propiedad de ObjArray[n] como si del TButton almacenado se tratara.

Si no te comprendí mál, creo que tendrías que moldear el elemento ObjArray[n] al tipo con el cuál querés trabajar. Es decir y simplificando mucho:
Código Delphi [-]
...
var
  ObjArray: array of TObject;
// Se supone los TButtons ya cargados.

...
var
  s: string;
begin
  s:= TButton(ObjArray[n]).Caption;
  TButton(ObjArray[n]).Caption:= 'Nuevo Caption';
  ...
Otro ejemplo:
Código Delphi [-]
var
  bt: TButton; 
begin
  bt:= TButton.Create(Self);
  try
    bt:= TButton(ObjArray[n]);
    bt.Caption:= 'Nuevo Caption';  
  ...

Por último, como siempre aconsejamos a los recién llegados, te invito a que leas la Guía de estilo, un conjunto de sugerencias para que todos podamos entendernos mejor.

Un saludo.

rojo raton 03-10-2011 15:15:27

Has entendido mi problema!!! y tu respuesta es correcta. Eternamente agradecido, no sabia de que forma moldear una instancia de Tobject a un objeto en particular.
Si, me olvidé de leer la guia de estilo :( ahora le echo un mirada.
Gracias ecfisa!!. un abrazo.

Ñuño Martínez 03-10-2011 15:50:49

Hola.

Otra forma de "moldear" que me gusta más es usar "AS":
Código Delphi [-]
s:= (ObjArray[n] AS TButton).Caption;
Es exactamente lo mismo, pero a mi me gusta más. De la otra forma parece que estás llamando a una función. Pero esto ya son gustos personales.

rojo raton 03-10-2011 17:07:15

Si, pareciera que estás llamando a una función pero me doy cuenta que en realidad es algo así como "mirar" una instancia de Tobject como si fuese un objeto Tbutton. Bueno ambas maneras de hacerlo funcionan de maravilla.


La franja horaria es GMT +2. Ahora son las 10:47:33.

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