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 05-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Herencia visual y variables públicas

Amigos, soy novato en Delphi y quisiera hacerles una pregunta, genero dos formularios base donde en cada uno de ellos pongo una programación base que utilizaré.
Luego de uno heredo visualmente los formularios modales y del otro heredo visualmente los formularios no modales.
El problema se suscita cuando quiero acceder a por ejemplo un objeto TEdit de un formulario desde otro formularios. Pongo el formulario que deseo acceder en el use de la unidad y luego cuando le asigno un valor al TEdit:

Form1.edit.text := valor

curiosamente este edit no recibe el valor que asigno, es como si no hubiese asignado nada. Cosa que no me sucede cuando trabajo con formularios no heredados.

¿Alguien me puede decir que estoy haciendo mal?
Responder Con Cita
  #2  
Antiguo 05-11-2008
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
Necesitas dar un poco más de información, por ejemplo, ¿cómo creas los formularios? Si usas Form1 := TForm1.Create(Application) no sé de donde viene el problema pero si usuas TForm1.Create(Application).Show el problema es que Form1 es nil, no puedes referenciarlo mediante la variable pública.

mmmmhhh no sé si me he explicado.
Responder Con Cita
  #3  
Antiguo 05-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Es justamente lo que hago, ¿cómo puedo arreglar ese problema?
Responder Con Cita
  #4  
Antiguo 05-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Pues así como lo explicas, la verdad no se te puede ayudar mucho...

Si pones algo de código tal vez podramos ver mejor donde está tu problema...



Saludos...
Responder Con Cita
  #5  
Antiguo 05-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

¿Estás seguro que Form1 es una variable que apunta al formulario que deseas?

Ahora, algo que yo hago cuando quiero usar formularios a los que les mando valores para mostrar es crear propiedades públicas que hagan esa función:

Código Delphi [-]
type
  TForm1 = class(TForm)
    // Componentes
  private
    function GetNombre: string;
    procedure SetNombre(const Value: string);
  public
    property Nombre: string read GetNombre write SetNombre;
  end;

implementation

function TForm1.GetNombre: string;
begin
  Result := Edit1.Text
end;

procedure TForm1.SetNombre(const Value: string);
begin
  Edit1.Text := Value
end;

Así ya puedo hacer algo como:

Código Delphi [-]
begin
  with TForm1.Create(nil) do
    try
      Nombre := 'Filomeno';
      if ShowModal = mrOk then
        ShowMessage(Nombre)
    finally
      Free
    end
end;

Espero te sirva...



Saludos...
Responder Con Cita
  #6  
Antiguo 05-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Esta es la forma como creo el formulario:

class procedure Tf_sName.MostrarVentana(ATag : Integer);
var
i : Integer;
f : TForm;
begin
LockWindowUpdate(Application.MainForm.Handle);
try
for i := Screen.FormCount - 1 downto 0 do begin
f := Screen.Forms[i];
if(f is Self) then begin
if(f.WindowState = wsMinimized) then
f.WindowState := wsNormal;
f.BringToFront;
Exit;
end;
end;
f := Create(Application);
f.Tag := ATag;
f.Show;
finally
LockWindowUpdate(0);
end;
end;
Responder Con Cita
  #7  
Antiguo 05-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Cita:
Empezado por rarratia Ver Mensaje
Esta es la forma como creo el formulario:

Código Delphi [-]
class procedure Tf_sName.MostrarVentana(ATag : Integer);
var
 i : Integer;
 f : TForm;

begin
  LockWindowUpdate(Application.MainForm.Handle);
  try
    for i := Screen.FormCount - 1 downto 0 do begin
      f := Screen.Forms[i];
      if (f is Self) then begin
        if (f.WindowState = wsMinimized) then
          f.WindowState := wsNormal;
        f.BringToFront;
        Exit;
      end;
    end;
    f := Create(Application);
    f.Tag := ATag;
    f.Show;
  finally
    LockWindowUpdate(0);
  end;
end;
Según tu código, solo creas y muestras la forma, pero en ningún momento la asignas a una variable de objeto que siga "viva" fuera del método...

Así que si haces algo como Form1.Edit1.Text := Valor, obviamente no va a pasar nada (bueno si, un error de violación de memoria )...


Por cierto, cuando pongas código usa las etiquetas [ DELPHI ] [ /DELPHI ] (sin los espacios en blanco) para que este se vea mejor, fijate en la diferencia entre el código en el quote de este mensaje y el que tu pusiste...

Saludos...
Responder Con Cita
  #8  
Antiguo 06-11-2008
rarratia rarratia is offline
Miembro
 
Registrado: sep 2004
Posts: 50
Poder: 20
rarratia Va por buen camino
Ahora entiendo, si la Class Function esta definida en los formularios padres de donde se heredan todos los demás debo en el evento create colocar lo siguiente:

Código Delphi [-]
Form1 := Self;
Responder Con Cita
  #9  
Antiguo 06-11-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Hola...

Esto que comentas, si bien puede solucionar tu problema, no es muy recomendable hacerlo.

Lo mejor sería que el método de clase sea la que devuelva ese valor:

Código Delphi [-]
class procedure TParentForm.ShowWindow(ATag: Integer; var Reference);
var
  i: Integer;
  AForm: TForm;

begin
  LockWindowUpdate(Application.MainForm.Handle);
  try
    for i := Screen.FormCount - 1 downto 0 do
    begin
      AForm := Screen.Forms[i];
      if (AForm = Reference) then
      begin
        if (AForm.WindowState = wsMinimized) then
          AForm.WindowState := wsNormal;
        AForm.BringToFront;
        Exit
      end
    end;
    AForm := Create(Application);
    AForm.Tag := ATag;
    AForm.Show;
    Reference := AForm
  finally
    LockWindowUpdate(0)
  end
end;

De esta forma puedes hacer algo como:

Código Delphi [-]
var
  Form1: TForm1;

begin
  TForm1.ShowWindow(1, Form1)
end;


Saludos...
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
Conexion Remota (IP PÚBLICAS) JAI_ME Varios 5 20-05-2008 23:11:00
Problema herencia visual en form diegofhernando OOP 8 19-05-2008 16:41:33
Herencia visual en formularios... diegofhernando OOP 4 18-04-2008 10:54:05
Herencia visual con TFrames y otros asuntos walrus OOP 6 19-09-2004 02:38:12
No se ven controles en herencia visual Sirkius OOP 10 07-06-2004 22:25:32


La franja horaria es GMT +2. Ahora son las 07:01:54.


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