PDA

Ver la Versión Completa : mostrar una u otra form segun boton pulsado


jsc
12-08-2011, 07:32:30
he llegado a conseguir lo que quiero pero quisiera todavia reducir más código
a ver si podeis ayudarme

adjunto un ejemplo tonto para ver lo que quiero conseguir (delphi 7)

pulsando el boton 1 se muestra form2
pulsando el boton 2 se muestra form3

se podria reducir el codigo

if (sender as TButton) = form1.Button1 then form := TForm2.Create (Form2) ;
if (sender as TButton).caption = form1.Button2 then form := Tform3.Create (Form3) ;
if (sender as TButton).caption = form1.Button3 then form := Tform4.Create (Form4) ;

de manera que
Código:
form:=TForm2.Create(Form2)
valdria para todos los forms?
algo asi:

form := ('T'+variable).Create(variable)

donde "variable" seria por ejemplo el caption del boton; en este caso, form2, form3,form4

podria hacerse algo ó lo máximo que puede reducirse es como en el ejemplo que he puesto?

he hecho pruebas pero luego me da problemas al acceder a componentes de la form que se muestra, con el codigo que tenga dicha form
pongo ejemplo tonto:


procedure inicializarvariables () ;
begin
//codigo
Form2.edit1.clear ;
end;

procedure TForm2.Form2.OnCreate (sender:Tobject)
begin
Form2.Button1.caption := 'hola'
end;

procedure TForm2.Form2.OnShow (sender:Tobject)
begin
//codigo cuando se muestra la form
inicializarvariables () ;
end;


gracias de antemano

jsc
12-08-2011, 08:26:45
si sustituyo el codigo por este otro:

procedure TForm2.Form2.OnCreate (sender:Tobject)
begin
Button1.caption := 'hola'
end;

procedure TForm2.Form2.OnShow (sender:Tobject)
begin
edit1.clear ;
end;

no me da problemas; ahora bien si llamo a una funcion es donde vienen los problemas

procedure inicializarvariables () ;
begin
Form2.edit1.clear ; {claro esta que no puedo poner edit1.clear porque no reconoce el edit1}
end;

procedure TForm2.Form2.OnShow (sender:Tobject)
begin
inicializarvariables () ;
end;

por lo tanto deduzco que el problema esta cuando accedo a los componentes de la form, haciendo referencia con su propio nombre;

Form2."nombre componente" etc...

pero a la hora de programarlo si lo compilo no da problemas

espero estar explicandome
alguna ayuda ? en t

jsc
12-08-2011, 09:08:10
bueno,
finalmente lo he conseguido con este codigo:

unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm2 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

implementation

{$R *.dfm}

procedure inivar (form:tobject);
begin
with (form as tform2) do
begin
Label1.Caption := 'esto es label 1' ;
Label2.caption := 'esto es label 2' ;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var form2 : tobject ;
begin
inivar (form2) ;
// label1.Caption := 'esto es label 1' ;
// label2.caption := 'esto es label 2' ;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
with (sender as tform2) do
label1.Caption := 'hola' ;
end;

end.


alguien sabria decirme si de esta manera al tener tantas referencias... el programa pudiera volverse loco en algun momento y lanzar excepciones, si consumiria más memoria... ?
gracias
adjunto el proyecto pruebas para mas detalles