Ver Mensaje Individual
  #1  
Antiguo 01-03-2017
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Reputación: 18
anubis Va por buen camino
almacenar forms abiertos en un listbox

Buenas,

quizá sea una pregunta de "perogrullo" pero me estoy matando la cabeza con este tema.

Tengo una aplicacion en la que los forms se abren como show en un panel principal sin problema. Puedo maximizar, minimizar, cerrar etc.
Gracias a este maravilloso foro y su ayuda.

Viendo otros post que preguntan sobre saber que forms estan abiertos, intente implementar eso mismo y cargarlos en un listbox, asi, cuando tuviera algun form "oculto" podria mostrarlo en primer plano.

Pues bien, seguro que es una tonteria pero no hay forma.

Tengo esto

Código Delphi [-]
procedure TPrincipal.tbutton_inventariosClick(Sender: TObject);
begin
  if not assigned(finventarios) then
  begin
  finventarios:=tfinventarios.Create(application);
  finventarios.Parent:=CONTENEDOR;
  finventarios.Show;
   formularios_abiertos;
  end
  else
  begin
   end;
end;

Ahi, lo que hago es preguntar si el formulario ha sido asignado y sino crea uno. Ya cuando lo cierro se libera (para no abrir el mismo 2 veces).
CONTENEDOR es un panel donde lo abro.
formularios_abiertos es donde hago lo siguiente:

Código Delphi [-]
procedure tprincipal.formularios_abiertos;
var
 i:integer;
begin
  listbox1.Clear;
  for i:= Screen.FormCount -1 downto 0 do
    if screen.Forms[i].Showing then
       if (screen.forms[i].Caption<>'Principal') and (screen.forms[i].caption<>'acceso') then
    listbox1.Items.Add(screen.Forms[i].Caption);

Funcionar funciona, porque, si hago click en una de las lineas del listbox me muestra el form, lo unico malo es que los forms estan guardados de forma inversa en el listbox y me muestra el ultimo.
Si, es porque la i va en descendente y el listbox lo guarda en ascendente. Eso lo entiendo

El chiste es que si lo pongo al reves, al seleccionar el ultimo formulario del listbox me acaba tirando un error y no precisamente de index -1.

Tambien intente usar un array para guardar los forms y luego pasarlos al listbox pero es el mismo resultado.

No debe ser complicado pero ....

Gracias.
Responder Con Cita