Lazarus

Other Languages => Spanish => Topic started by: daragor on October 16, 2021, 04:53:13 pm

Title: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: daragor on October 16, 2021, 04:53:13 pm
Amigos de lazarus recurro a uds despues de haber buscado en este foro spanish una solucion certera el tema
Estoy usando un spktoolbar (que para mi le faltan muchas cosas por mejorar) y quiero.. que al hacer clic en un boton que llama o abre un form, de alguna manera NO permita que se vuelva a abrir el mismo form, de hecha hasta podria NO permitir q se abra ningun otro form, solo el activo...

cabe aclarar que uso el metodo Show y no Showmodal, porque estoy trabajando con paneles... entonces si yo abro ese form con showmodal en un panel del form principal, esta perfecto, pero no puedo hacer clic en ningun lado! queda bloqueado todo, si pudiera solucionar esto ya seria una solución valida a lo planteado.

... en fin acudo a su experiencia para brindarme una solución de paso que quede en el foro como referencia

muchas gracias!
Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: Edson on October 16, 2021, 07:39:00 pm
Hola.

¿Por qué no usas una bandera booleana como "FormularioAbierto"?
Esta bandera la puedes activar en el evento OnLoad() y desactivarla (ponerla a FALSE) en el evento OnClose().

Luego, antes de abrir cualquier formulario, el código debe verificar el estado de "FormularioAbierto" para ver si se permite o no abrir otro formulario.
Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: PINO72 on October 17, 2021, 04:00:59 pm
Buenas tardes.

Consulta la asignación de la variable que alberga el formulario, si está ya asignada (assigned(<variable-formulario>), utiliza el evento <variable-formulario>.bringtofront y si no está asignada creas el formulario por primera vez.

Para que funcione correctamente, tienes que liberar en memoria la variable utilizada con FreeAndNil(<variable-formulario>).


Saludos.
Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: daragor on October 18, 2021, 04:31:22 pm
Gracias por sus respuestas muchachos, he visto todo tipo de propuestas en diversos foros, .. he optado por la opcion simple del compañero Edson

Creo una variable global, setteo en vacia, cada vez q abro un form le coloco el nombre, y listo.. al cerrar el form vuelvo la variable a vacia.

Code: Pascal  [Select][+][-]
  1. procedure Tf_main.newplayerBTNClick(Sender: TObject);
  2. begin
  3.   if abierto = '' then // ninguno
  4.   begin
  5.     // Configs
  6.     abierto:= 'Agregar Jugador';
  7.     f_amjug:=Tf_amjug.Create(self);
  8.     f_amjug.txt_info.Caption:= 'Agregando un Nuevo Jugador/ra';
  9.     f_amjug.Parent:= Panel1;
  10.     f_amjug.Show;
  11.   end else
  12.      ShowMessage('La Pantalla :'+abierto+': ya se encuentra abierta.');
  13. end;
  14.  

Cabe aclarar que este codigo siemple tambien impediría que se abra otro formulario, no solo el mismo, es decir no se abre ningun otro mientras haya uno abierto. Claro que el codigo lo pueden adaptar a sus necesidades, es mas facil de lo que pensé.

A mi lo que me gustaria es transformarlo en una función para usar de manera mas simple en el codigo, si alguien tiene ganas bienvenido sea!

Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: BlueIcaro on October 18, 2021, 09:47:18 pm
Hola, en lugar de usar una variable, puedes localizar el formulario, en el caso que no esté creado, lo creas, sino lo vuelves a mostrar.
Algo así:
Code: [Select]
procedure TForm1.Button1Click(Sender: TObject);
var
  F: TForm2;
  T: TComponent;
begin
  t := Form1.FindComponent('Form2');
  if t <> nil then
  begin
    with T as TForm do
    begin
      Show;
    end;
  end
  else
  begin
    F := Tform2.Create(Self);
    F.Show;
  end;
end;                           
Con esto te ahorras tener una variable por formulario que crees.
Saludos
/BlueIcaro
P.D. Es un código de ejemplo, lo ideal sería comprobar que el componente encontrado es un formulario. Y alguno "seguridad" más, como usar try finnally
Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: daragor on November 09, 2021, 12:23:49 pm
Gracias por el aporte BlueIcaro!
Title: Re: Solicito consejo, que método usan para no abrir 2 veces el mismo formulario
Post by: f-javier on December 23, 2021, 12:44:46 pm
Yo no tengo los formularios en auto-create y los gestiono de la siguiente manera:

procedure TformularioPrincipal.OpcionItemCompaniasClick(Sender: TObject);
begin
  if not Assigned(formularioCompanias) then
     formularioCompanias := TFormularioCompanias.Create(Application);
  formularioCompanias.Show;
end;

Si no está creado, lo crea y lo muestra. Si está creado, sólo lo muestra.
TinyPortal © 2005-2018