PDA

Ver la Versión Completa : Ocultar botones distintos form


The Cid James
31-07-2013, 13:23:09
Bueno voy a ser lo mas claro posible para plantear mi problema, estoy trabajando en una aplicación con varios form para no entrar en detalles y explicar exactamente de que se trata lo voy a plantearcon un ejemplo mas practico y conocido.
Mas o menos seria lo siguiente, en una form tengo un listado de pongamosle productos (con TDBgrid), y en la otra lo que necesito seleccionar es el producto para lo cual he usado un botón el cual selecciona el producto en la form donde se encuentra el listado, ahora bien quiero que ese botón solo se muestre únicamente cuando accedo mediante el form 2 (donde llamo al form 1 cuando deseo seleccionar un item) y no cuando solo quiero visualizar los productos dado que el botón no seria útil

Desde ya muchas gracias

movorack
31-07-2013, 15:44:22
Hola,

Puedes colocar un parámetro que indique si debe desplegar o no el botón en cuestión y así cuando lo llames desde el formulario indicado lo activas y desde otro no lo activas.

Nota: Pase como 5 minutos tratando de entender lo que escribiste porque además de no estar claro, la redacción no ayuda y escribir en un solo párrafo empeora las cosa... no se quien es el del foro que dice que esto no es un móvil. Así que tranquilo escribe cuanto quieras.

Spynosa
31-07-2013, 17:06:08
puedes poner esto

si estamos en el form2
form3.tag := 2;
form3.showmodal;

en el fom3

if tag = 2 then
boton.visible := false;

y antes de llamarlo de otros formulario
form3.tag := 0;

Casimiro Notevi
31-07-2013, 17:17:50
Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

Spynosa
31-07-2013, 17:56:55
ok
Gracias Casimiro por la observación, no se editar el mensaje para cambiarlo, la proxima vez.

movorack
31-07-2013, 18:05:55
Personalmente no me gusta mucho la solución con el tag. Prefiero agregar una propiedad "MostrarBotonX" ya que es mas especifica en su uso que "form.tag".

La razón por la que prefiero la propiedad es que al final podríamos tener que en una parte del código usamos el tag para x y en otra parte el tag para y cuando pudimos haber especificado ese funcionamiento desde la clase.

Pero como cada quien mata las pulgas a su modo...

ecfisa
31-07-2013, 18:34:22
Hola.

Otra opción:

Form2: (El que contiene el TButton a ocultar)

...
type
TForm2 = class(TForm)
Button1: TButton;
private
public
class procedure ShowForm(const aVisible: Boolean);
end;
....

implementation

class procedure TForm2.ShowForm(const aVisible: Boolean);
begin
if not Assigned(Form2) then
Form2 := TForm2.Create(nil);
Form2.Button1.Visible := aVisible;
Form2.ShowModal; // (o Show)
end;
...



Form1:

...
begin
TForm2.ShowForm(False); // (True para visualizar)
...
end;


Saludos :)

The Cid James
01-08-2013, 14:03:22
Hola.

Otra opción:

Form2: (El que contiene el TButton a ocultar)

...
type
TForm2 = class(TForm)
Button1: TButton;
private
public
class procedure ShowForm(const aVisible: Boolean);
end;
....

implementation

class procedure TForm2.ShowForm(const aVisible: Boolean);
begin
if not Assigned(Form2) then
Form2 := TForm2.Create(nil);
Form2.Button1.Visible := aVisible;
Form2.ShowModal; // (o Show)
end;
...



Form1:

...
begin
TForm2.ShowForm(False); // (True para visualizar)
...
end;
av

Saludos :)

Primero que nada gracias por su tiempo a toos, he intentado usar este código pero no lo entiendo... (soy nuevo en esto)

En la primera parte del código que es donde contiene el botón en que momento estoy haciendo que el botón pase a no mostrarse :confused: porque al usar el código el botón sigue mostrándose cuando abro la form que contiene el botón

ecfisa
01-08-2013, 16:15:39
Hola.

Te adjunto un ejemplo para que puedas revisarlo con tranquilidad.

Saludos :)

The Cid James
01-08-2013, 16:33:44
Hola.

Te adjunto un ejemplo para que puedas revisarlo con tranquilidad.

Saludos :)

Muchas gracias revise el ejemplo y vi que tiene un check box para que el boton se vea yo lo que ando buscando es que si abro el form1 el boton no se muestre, pero si doy clic al boton desde el form2 al abrir el form1 si se muestre pero sin seleccionar nada (que sea automatico)
aqui dejo el boton que llama al form 1 (listadoitems)
procedure Tfdonacion.cBuscarClick(Sender: TObject);
begin
fmodulo.qlistadoitems.Active := true;
fmodulo.qlistadoitem.ParamByName('categoria').AsString := '%';
fmodulo.qlistadoitem.Refresh;
tfListadoitem.Create(self).ShowModal;
desde ese botón abro el formulario donde tengo la lista, donde este el botón seleccionar para seleccionar desde el dbgrid y que este botón traspase la categoría en este caso
el botón seleccionar
fdonacion.eitems.Text := fmodulo.qlistadoitems['categoria'] + ',' + ' '
+fmodulo.qlistadoitems['nombre'];
fdonacion.idmiembro := fmodulo.qmiembros['id_miembro'];
Como verán el botón me pasa esos datos a la form2 donde los empleo de otra forma por lo cual no sirve de nada cuando la form dos no esta activa esperando esos datos


A mi se me ocurrio lo siguiente



procedure TfListadoitms.FormCreate(Sender: TObject);
begin
if fdonacion.bvisible = True then
begin
bseleccionar.Visible := true;
end
else
begin
bseleccionar.visible := false;
end;
end;

en el form2
public
evisible : boolean;
procedure Tfdonacion.FormCreate(Sender: TObject);
begin
bvisible := true;

procedure Tfdonacion.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bvisible := false;
end;



Pero al copilar me tira error en el form1 no se si esta bien planteado

ecfisa
01-08-2013, 16:53:52
Muchas gracias revise el ejemplo y vi que tiene un check box para que el boton se vea yo lo que ando buscando es que si abro el form1 el boton no se muestre
Hola.

Puse TCheckBox en el ejemplo a fin de que pudieras verificar de forma simple el funcionamiento del código, en la práctica pasarías como argumento el valor False cuando no desees que se visualize.

Saludos. :)

The Cid James
01-08-2013, 17:33:12
Hola.

Puse TCheckBox en el ejemplo a fin de que pudieras verificar de forma simple el funcionamiento del código, en la práctica pasarías como argumento el valor False cuando no desees que se visualize.

Saludos. :)

A ver si asi me doy a entender un poquito mejor,
Si acceso al form 2 directamente (he aquí la razón de todos mis males) el boton tambien se ve :(

Te adjunto lo que me mandaste pero con un menu para acceder a los form

NOTA: No se como pasarte el ejemplo, exedo por 20kb el limite de adjuntos y no me deja ponerte enlaces externos

ecfisa
01-08-2013, 18:16:28
Hola.

Recibí bién tu ejemplo por pm.

Fijate que incluí el método de clase ShowForm para que la creación se haga dentro del mismo código del form.

No tenes que llamar a Form2 así:

procedure TForm4.Formulario22Click(Sender: TObject);
begin
tform2.Create(self).ShowModal; // NO
end;


Tenes que llamarlo de igual modo que lo hace Form1:

procedure TForm4.Formulario22Click(Sender: TObject);
begin
TForm2.ShowForm(False); // False = No visible
end;


Saludos. :)

The Cid James
01-08-2013, 19:06:37
Excelente muchísimas gracias ahora creo que comprendo un poco mas el código que me pasaste, y como asignar el estado me puede servir para varias cosas que tengo pensado hacer pero honestamente no encontraba la forma.

Muchísimas gracias a todos los que cedieron su tiempo en ayudar