Cita:
Empezado por elrayo76
Buenas a todos,
Tengo una aplicación con un TreeView el cual se carga desde un archivo. Mientras se carga el archivo se abre un formulario que tiene una barra de progreso que se va incrementando. El formulario de la barra de progreso lo abro en no modal para que se pueda ir ejecutando el código del formulario principal.
El tema es que esa misma barra de progreso la uso para cuando se hace click sobre alguno de los nodos del TreeView y se carga un ListView que está también en el formulario principal.
Ahora es donde viene el problema. Lo que sucede es que se ve como la barra de progreso se muestra y se actualiza, el Listview se carga perfecto pero al terminar la carga el formulario principal es como que se pone por detrás de todo lo que se tenga abierto (puede ser el entorno de Delphi)
Les pongo algo de código de como llamo al formulario con la barra de progreso al hacer click en un nodo y se carga el ListView.
Código Delphi [-]
frmProgressBar := TfrmProgressBar.Create(nil);
try
frmProgressBar.Init('Leyendo archivo', 0, 1); frmProgressBar.Message := 'Carga del ListView'; frmProgressBar.Show;
frmProgressBar.UpdateProgress(intEndRecord - intStartRecord);
if (intRecord mod 1000) = 0 then
begin
frmProgressBar.Message := Format('Cargando el ListView... %s', [intRecord]);
frmProgressBar.UpdateProgress(intRecord - intStartRecord);
end;
finally
frmProgressBar.Release;
end;
Esto es todo. Espero que se entienda y sino es así me lo hacen saber.
Saludos,
El Rayo
|
El problema que se presenta es que después de cargar el ListView, el formulario principal se coloca detrás de todo lo que se tenga abierto, incluyendo el entorno de Delphi. Esto puede deberse a que el formulario de la barra de progreso se abrió en modo no modal y no se cerró correctamente después de que se cargó el ListView.
Para solucionar este problema, se puede cerrar el formulario de la barra de progreso después de cargar el ListView. Para hacer esto, se puede llamar al método Close() del formulario de la barra de progreso después de cargar el ListView. Además, se puede cambiar el modo en que se abre el formulario de la barra de progreso a modal para evitar que el usuario interactúe con el formulario principal mientras se carga el ListView.
Aquí hay un ejemplo de cómo se puede modificar el código para cerrar el formulario de la barra de progreso después de cargar el ListView y abrir el formulario de la barra de progreso en modo modal:
Código Delphi
[-]frmProgressBar := TfrmProgressBar.Create(nil);
try
frmProgressBar.Init('Leyendo archivo', 0, 1); frmProgressBar.Message := 'Carga del ListView'; frmProgressBar.ShowModal;
frmProgressBar.UpdateProgress(intEndRecord - intStartRecord);
if (intRecord mod 1000) = 0 then
begin
frmProgressBar.Message := Format('Cargando el ListView... %s', [intRecord]);
frmProgressBar.UpdateProgress(intRecord - intStartRecord);
end;
finally
frmProgressBar.Close; end;
En este ejemplo, se llama al método ShowModal() en lugar de Show() para abrir el formulario de la barra de progreso en modo modal. Después de cargar el ListView, se llama al método Close() del formulario de la barra de progreso para cerrarlo.