Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Trabajando con formularios (https://www.clubdelphi.com/foros/showthread.php?t=58179)

vlanka24 11-07-2008 06:12:11

Trabajando con formularios
 
!Hola a todos...! Tratare de explicar que es lo que quiero hacer, cualquier comentario se los agradecere.

En un formulario tengo un botón para cada opción... BtUsuario, BtTrabajador, BtRespaldo etc... entonces si quiero realizar una operacion solo utilizo el nombre del botón eliminando la parte de Bt y así se a que tabla voy hacer referencia... Hasta aquí todo funciona perfecto, me muestra la información correcta y elimina los registros que deben ser..

Lo que quiero hacer es que al pulsar en un botón llamado BtNuevo me lleve a un formulario (este sera según lo que tenga seleccionado), por decir si tengo activado la parte de usuarios debe mandarme al Formulario con el nombre de FmUsuarios y si estuviera seleccionado la parte de trabajador debe mandar al Formulario de FmTrabajador... Todos los formularios que pretendo utilizar quedan agregados en el Uses de la forma.

Esto intento hacerlo de la siguiente manera...

procedure TFmABC.BtNuevoClick(Sender: TObject);
begin
TForm('Fm' + LbLetrero.Caption).Show;
end;


El error que marca es de tipo Access violation, pero no tengo idea de como solucionarlo.

Bueno se que podria utilizar condiciones de que si el LbLetrero es igual a X pues me mande al FmX.Show, pero es justo lo que trato de evitar... :D

Espero que me haya explicado, de antemano gracias...

Neftali [Germán.Estévez] 11-07-2008 09:33:42

Se trata de buscar el formulario a partir de su nombre, y si lo encuentras visualizarlo.

Se me ocurre que se puede hacer a partir de TApplication:

Código Delphi [-]
var
  f:TForm;
  c:TComponent;
  sName:string;
begin
  sName := 'Fm' + LbLetrero.Caption;
  c := Application.FindComponent(sName);

  // encontrado?
  if Assigned(c) then begin
    TForm(c).Show;
  end;

O a partir de la clase TScreen:
Código Delphi [-]
var
  sName:string;
begin
  sName := 'Fm' + LbLetrero.Caption;

  // recorrer los forms
  for i := 0 to (Screen.FormCount - 1) do begin
    if (AnsiCompareText(Screen.Forms[i].Name, sName) = 0) then begin
      Screen.Forms[i].Show;
      Break;
    end;
  end

Es eso?

coso 11-07-2008 09:35:17

Hola,

echale un vistazo a la funcion FindComponent

saludos

vaya, se me adelanto Neftali

vlanka24 11-07-2008 15:55:20

Listo.!!
 
Gracias Neftali y Coso...!!

Gracias a sus aportaciones pude resolverlo y el resultado fue el siguiente:

procedure TFmABC.BtNuevoClick(Sender: TObject);
begin
With TForm(Application.FindComponent('Fm' + LbLetrero.Caption)) do
Show;
end;

Neftali [Germán.Estévez] 14-07-2008 10:18:12

Cita:

Empezado por vlanka24 (Mensaje 299580)
...y el resultado fue el siguiente...

Yo pondría alguna comprobación....
Si por alguna razón el form no se encuentra, tu aplicación va a hacer unos "fuegos artificiales" dignos de ver...

vlanka24 14-07-2008 21:20:42

Tienes razón Neftalí... Hasta ahora no me ha marcado ningún error, pero es factible a que suceda; agregare alguna comprobación.

¡Gracias.! :)


La franja horaria es GMT +2. Ahora son las 01:28:18.

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