Forum > Spanish

Solicito consejo, que método usan para no abrir 2 veces el mismo formulario

(1/2) > >>

daragor:
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!

Edson:
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.

PINO72:
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.

daragor:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---procedure Tf_main.newplayerBTNClick(Sender: TObject);begin  if abierto = '' then // ninguno  begin    // Configs    abierto:= 'Agregar Jugador';    f_amjug:=Tf_amjug.Create(self);    f_amjug.txt_info.Caption:= 'Agregando un Nuevo Jugador/ra';    f_amjug.Parent:= Panel1;    f_amjug.Show;  end else     ShowMessage('La Pantalla :'+abierto+': ya se encuentra abierta.');end;  
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!

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

--- End code ---
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

Navigation

[0] Message Index

[#] Next page

Go to full version