![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
|
Formularios creados por referencia
Llamo a un formulario con:
Código:
FormaClase:=TFormClass(GetClass('TExp'+inttostr((Sender as TToolButton).Tag)));
if FormaClase<>nil then
begin
Forma:=FormaClase.Create(Self);
Forma.ShowModal;
Forma.Free;
end;
|
|
#2
|
||||
|
||||
|
Si las variables, son comunes entre todos tus formularios, puedes crear TAbstractForm o similar, del que hereden todos estos formularios y en lugar de hacer el cast a esta clase. Otra opción es usar RTTI, te recomiendo buscar en el histórico del foro.
Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#3
|
||||
|
||||
|
También podes simplemente hacer un cast de la forma... o tener una variable del tipo adecuado..
y hacer luego: Código:
Forma.Metodo; Forma.Variable := Valor; o bien (Forma as TForm1).Metodo; (Forma as TForm1).Variable := Valor; ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#4
|
||||
|
||||
|
Cita:
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#5
|
||||
|
||||
|
Cita:
// Saludos |
|
#6
|
||||
|
||||
|
Creo que depende de las habilidades del programador. Si son dos o tres clases, y el programador no sabe, no puede o no tiene tiempo de crear una clase base de la que hereden las demás... puede adoptar esta solución (que no es la ideal, por supuesto).
Hasta luego. ![]()
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
#7
|
||||
|
||||
|
Cita:
// Saludos |
|
#8
|
|||
|
|||
|
Código:
Forma.Metodo; Forma.Variable := Valor; o bien (Forma as TForm1).Metodo; (Forma as TForm1).Variable := Valor; El caso es que los formulario llamados son diferentes entre ellos y necesito pasarles tres variables, que siempre son las mismas y de recuperar el valor que tienen despues del showmodal. |
|
#9
|
||||
|
||||
|
Cita:
Código:
var
MiObjeto: OleVariant;
begin
{Prueba esto, vas a ver que compila}
MiObjeto.MandarFruta;
end;
¿Cómo haría lo tuyo? Código:
unit MiCustomForm;
type
TMiCustom = class(TForm)
published
property Propiedad1....
property Propiedad2....
end;
Código:
TForm1 = class(TMiCustom) .. [quote=cervexa]Forma.Metodo; Forma.Variable := Valor; [quote] Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#10
|
||||
|
||||
|
Holap,
en este hilo http://www.clubdelphi.com/foros/showthread.php?t=7307 explico como hacer algo muy parecido mediante interfaces... espero te sirva ![]()
__________________
E pur si muove |
|
#11
|
|||
|
|||
|
A pesar de la sabiduría que me supone Román mi ignorancia es maxima. Despues de intentar todo lo que se me sugiere, no consigo aprobechar vuestros consejos.
He llegado hasta aqui: He creado un formulario y lo he añadido al proyecto: Código:
type
TExpTramites = class(TForm)
private
FCodigo:Integer;
FTexto:String;
public
{ Public declarations }
published
property Codigo:Integer Read FCodigo write FCodigo;
property Texto:String Read FTexto write FTexto;
end;
Código:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,UExpTramites;
type
TExpTra999 = class(TExpTramites)
Button1: TButton;
procedure Button1Click(Sender: TObject);
Código:
procedure TExpedientes.ToolButton1Click(Sender: TObject);
var FormaClase : TFormClass;
Forma : TExpTramites;
begin
FormaClase:=TFormClass(GetClass('TExp'+inttostr((Sender as TToolButton).Tag)));
if FormaClase<>nil then
begin
Forma:=FormaClase.Create(Self);
Forma.codigo:=1;
Forma.ShowModal;
Forma.Free;
end;
end;
initialization
RegisterClass(TExpTramites);
RegisterClass(TExp999);
|
|
#12
|
||||
|
||||
|
Sería bueno saber porqué no compila.. ¿Cuál es el error?
PD: Te recomiedo crear el tipo de referencia de clase propio: Código:
TExpFormClass = class of TExpTramites;
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#13
|
|||
|
|||
|
Código:
TExpFormClass = class of TExpTramites; |
|
#14
|
||||
|
||||
|
Para hacer eso, tienes que usar herencia visual.
File \ New \ (Buscar la paleta con el nombre del proyecto) \ (Buscar el Formulario ) Saludos!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
|
|
#15
|
|||
|
|||
|
Gracias por la ayuda.
|
![]() |
|
|
|