Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   mostrar una u otra form segun boton pulsado (https://www.clubdelphi.com/foros/showthread.php?t=75307)

jsc 12-08-2011 07:32:30

mostrar una u otra form segun boton pulsado
 
1 Archivos Adjunto(s)
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
Cita:

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:
Cita:

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:

Cita:

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:
Cita:

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
Cita:

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;
Cita:

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

1 Archivos Adjunto(s)
bueno,
finalmente lo he conseguido con este codigo:
Cita:

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


La franja horaria es GMT +2. Ahora son las 06:35:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi