Tiempo de Ejecución

Para los que programamos en Delphi, aqui estan las respuestas
[[ FORO CERRADO DEBIDO A QUE YA LA INFORMACION YA NO ES VIGENTE ]]
Skywalker01
Mensajes: 68
Registrado: Mar Jul 09, 2013 10:31 pm

Tiempo de Ejecución

Mensajepor Skywalker01 » Dom Feb 09, 2014 8:23 pm

Hola a todos la duda que les planteo no tiene nada que ver con la F.E, espero me puedan ayudar, soy un poco novato en esto de Delphi, programo en Delphi XE

les planteo mi duda:

Tengo un Pagecontrol al cual le añado en tiempo de ejecución Tabhseets o pestañas, creo de 1 a n pestañas en el Pagecontrol dentro del los Tabsheets también genero 1 DBGrid, un Clientdatset y un datasource asociados al Dbgrid (por cada Tabsheet) todos ellos también generados en tiempo de ejecución, lo que quiero hacer es agregar datos desde unos cuadros de texto al Clientdataset del Tabsheet que esté activa en ese momento, evidentemente puedo saber cuál tabsheet está activa en el momento pero a la hora de querer agregar datos al Clientdataset no sé cómo hacer referencia a él. es decir en tiempo de diseño pues Clientdataset1.Append y listo pero ¿cómo hacer referencia a un componente en runtime?

Sé cómo se llama cada componente puesto que al crearlos en runtime les asigné un nombre, y también sé cuál utilizar de acuerdo al Tabhseet activo pero no sé cómo hacer referencia a él.


Se me ocurre que en el evento onshow del Tabhseet capturar el Clientdataset que le asigné (por así decirlo) al Tabsheet. pero no doy una.


saben si existirá alguna función que me regrese una variable Tobject dándole de parámetro el nombre del componente (string)

he estado intentando con TClientdataset(sender).xxxxxx

gracias de antemano.

Avatar de Usuario
Dado
Mensajes: 15762
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Tiempo de Ejecución

Mensajepor Dado » Dom Feb 09, 2014 9:13 pm

Seguramente estas perdiendo el "pointer" y no lo estas guardando.............

En terminos generales se debe hacer asi para crear en tiempo de ejecucion (hay metodos mas eficientes, pero este es preferido para novatos) :

var DBGridArray = array [1..30] of DBGrid;

Suponiendo que quieres crear el DBGrid de la pestaña numero 3 entonces harias :

DBGridArray[3] := TDBGrid.Create;

Si quieres crear el DBGrid de la pestaña 5 :

DBGridArray[5] := TBDGrid.Create;

Y bueno, ya puedes accesar cualquier DBGrid de cualquier pestaña, tambien te sirve para destruirlos cuando termines con ellos

for n:=0 to numerodepestañas-1 do
DBGridArray[n].Free;

Ahora, lo que tu pides tambien se puede, lo que debes usar es lo que se llama "Data Type Cast" con el operador "as", pero tendrias que ciclar por TODOS los componentes para encontrar el que buscas :

for n := 0 to AForm.ComponentCount-1 do
if (AForm.Components[n] is TDBGrid) then
if (AForm.Components[n] as TDBGrid).name = 'nombredelcomponentequebuscas' then..........

Por ultimo, NADA DE ESTO ES NECESARIO, mira checa mi programa de facturacion SAFARI, en la parte de recibos de reparacion tengo exactamente lo que tu intentas hacer, en ese modulo pueden registrar de 1 a 100 aparatos de reparacion y el programa genera tabsheets por cada aparato y muestra la informacion individual, REVISALO y si eso es mas o menos lo que intentas hacer me avisas y te puedo a$esorar con un poco de codigo.

Para hacer la prueba en el Safari primero entra a [Recibos de reparacion] luego a [Hacer Recibos] llena datos y le das clic a [Agregar], repite lo de [Agregar] unas 3 veces y al ultimo clic en [Grabar], luego entra a [Consulta General] ahi estan las pestañas creadas "en tiempo de ejecucion" una pestaña por cada aparato que registraste
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

Skywalker01
Mensajes: 68
Registrado: Mar Jul 09, 2013 10:31 pm

Re: Tiempo de Ejecución

Mensajepor Skywalker01 » Dom Feb 09, 2014 9:30 pm

Perfecto, muchas gracias Dado, lo reviso y te digo

Gracias!


Volver a “Delphi”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados