FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo
Hola a todos, amigos(as) del Foro.Necesito una ayuda con algo que se me presento y que lo necesito urgente..pues veran les explico:
Desde la unidad Proyecto.Dpr realizo lo sgte: .. ... begin Application.Initialize; Application.ShowMainForm:=False; Application.CreateForm(TFrmMenu, FrmMenu); Application.CreateForm(TFrm01010201,Frm01010201); Application.CreateForm(TFrm01010202,Frm01010202); FrmMenu.Ventanas([Frm01010201]); Application.ShowMainForm := true; Application.Run; End. Ahora les detallo: ventana es un procedimiento publico, que recibe los formularios ingresados atravez de su parametro de tipo array de TForm y lo que pretendo es pasar esos formularios a otro array declarado como privado en la unidad Menu con nombre Forma, como lo podran obsevar en las lineas posteriores. My pregunta es porque razón me emite error al querer asignarlo de esa manera?.Me pueden ayudar en esto o derrepente estoy haciendo mal las cosas.Gracias por todo de antemano. .. .... Private Forma:=Array of Tform; procedure Ventanas(const Formularios: Array Of TForm); var i :Integer; begin SetLength(Forma, High(Formularios)); for i:=Low(Formularios) to High(Formularios) do Begin Forma[i]:=Formularios[i]; End; end; |
#2
|
||||
|
||||
Cita:
// Saludos |
#3
|
||||
|
||||
Independientemente de que el proceso esté bien o mal, yo comprobaría el tamaño de Formularios antes de hacer el SetLength(Forma, ...), ya que si High(Formularios) está vacio, te dará error al asignarlo
For empty arrays, High returns –1. |
#4
|
|||
|
|||
Me muestra el siguiente Error
Project proyecto.exe raised exception class EAccessViolation with Message ' Access violation at address 40543B20'.Process stoped.Use Step or Run to continue
Pero me parece que tiene que ver algo con la funcion High para saber el tamaño maximo del array |
#5
|
||||
|
||||
Además de lo que dice Lepe lo cierto es que tu forma de asignar la longitud del arreglo es incorrecta; no me había percatado anteriormente.
En arreglos abiertos (como el que pasas como parámetro al procedimiento Ventanas) los índices siempre están basados en 0 de manera que High será la longitud del arreglo - 1. Tal como tienes el ejemplo que pones, al haber sólo un elemento High es igual a 0 lo que provoca la violación de acceso ya que el arreglo dinámico tendrá longitud 0. Puedes arreglar todo esto muy fácilmente cambiando High por Length pero haciendo la verificación que te indica Lepe:
// Saludos |
#6
|
|||
|
|||
Tenia mucha razón
Se los agradesco mucho amigos , ahora me doy cuenta del error que cometía
; pero con su ayuda ya puedo continuar |
|
|
|