FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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? |
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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:
Así ya puedo hacer algo como:
Espero te sirva... Saludos... |
#4
|
|||
|
|||
Es justamente lo que hago, ¿cómo puedo arreglar ese problema?
|
#5
|
|||
|
|||
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... |
#6
|
|||
|
|||
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; |
#7
|
|||
|
|||
Hola...
Cita:
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... |
#9
|
|||
|
|||
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:
De esta forma puedes hacer algo como:
Saludos... |
#10
|
|||
|
|||
Bien, entonces para formularios modales ¿podríamos tener algo así?
|
#11
|
|||
|
|||
Me faltó algo:
|
#12
|
|||
|
|||
Hola...
En tu método de clase liberas la forma que creas, así que al salir de la función, Reference tendrá un valor no válido. En este caso sería mejor solo hacer algo como:
Si te fijas, el método de clase no recibe ningún parámetro y solo devuelve el resultado de ModalResult... Saludos... |
#13
|
||||
|
||||
maeyanes, ¿usas Self en un procedimiento de clase?, supongo que se te ha ido el dedo ¿no?
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#14
|
|||
|
|||
Hola...
Nop, no se me ha ido el dedo. En un método de clase, Self representa a la clase. Esto es Self = TParentForm y en una clase descendiente, por ejemplo TShowNombreForm, Self sería igual a TShowNombreForm. Cita:
Saludos... |
#15
|
|||
|
|||
Pero si es necesario el ATag para poder decidir lo que hacer dentro del formulario ShowModal, cómo paso el ATag????
|
#17
|
|||
|
|||
pero es una función de clase y el objeto aún no se crea, ¿cómo consigo acceder al atributo Tag?
|
#18
|
|||
|
|||
No conseguiré acceder al tag desde el formulario ShowModal, vendrá en 0
|
#19
|
|||
|
|||
Hola...
Claro que si podrás:
Saludos... |
#20
|
|||
|
|||
recuerda que este código está en el formulario Padre y que heredo de él un formulario hijo, luego cuando ejecuto esta función de clase que es un método del padre, pero lo ejecuto del formulario visual hijo, me aparece tag=0
es raro. |
|
|
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 |
|