Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-08-2004
morfeo21 morfeo21 is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 22
morfeo21 Va por buen camino
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;
Responder Con Cita
  #2  
Antiguo 17-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por morfeo21
My pregunta es porque razón me emite error al querer asignarlo de esa manera?
¿Qué error te emite? ¿En qué momento? ¿Al compilar o al ejecutar?

// Saludos
Responder Con Cita
  #3  
Antiguo 17-08-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-08-2004
morfeo21 morfeo21 is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 22
morfeo21 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 17-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:

Código Delphi [-]
if Length(Formularios) > 0 then
begin
  SetLength(Forma, Length(Formularios));

  for i := Low(Formularios) to High(Formularios) do
    Forma[i] := Formularios[i];
end;

// Saludos
Responder Con Cita
  #6  
Antiguo 17-08-2004
morfeo21 morfeo21 is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 22
morfeo21 Va por buen camino
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
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


La franja horaria es GMT +2. Ahora son las 00:51:34.


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