Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema con Aplicacion MDI (https://www.clubdelphi.com/foros/showthread.php?t=24359)

Thales 17-08-2005 21:32:40

Problema con Aplicacion MDI
 
Muy buenas.
Veréis, tengo una aplicacion MDI en la que hay abierta una ventana hija con una rejilla de datos. He colocado un combobox en un toolbar que tengo en la cabecera a fin de controlar el cambio de un parámetro en la consulta que se utiliza para mostrar los datos en la rejilla, pero el caso es que cuando hago click en ese combo la rejilla de datos se queda bloqueada y no puedo cambiar el registro activo.
Desbloquearlo es tan fácil como hacer click en otra ventaja hija y luego volver a la primera o hacer click por ejemplo en el escritorio y luego volver a la ventana, pero como os podéis imaginar esto es un engorro.
Agradecería que me indicárais como corregir este efecto desagradable.

Muchas gracias y un saludo

Lepe 18-08-2005 12:05:55

Si cambias un parámetro de la consulta, tendrás que cerrar y abrir de nuevo la consulta para que se actualice el Grid.

Que tal hacer eso en el OnChange o en el Onclick del TcomboBox?

Un saludo

Thales 18-08-2005 12:47:59

Ante todo gracias por responder.
El problema no es el cambio del parámetro de la consulta en si, pues esto lo hace bien, el problema es que el grid tras el cambio se queda bloqueado.
De hecho si el combo está vacío y no se utiliza ningún evento del mismo se sigue bloqueando el dbgrid justo después de hacer click en él. Yo creo que se debe tratar de algún problema con las aplicaciones MDI y los controles editables que se ponen en el MDIForm. He probado a cambiar el el ComboBox por un DBEdit y sigue pasando lo mismo: con sólo hacer click en el control ya no puedo volver a la ventana hija normalmente (no puedo moverme por sus registros).
De nuevo pido ayuda por si a alguien más le ha pasado lo mismo y me puede indicar alguna manera de evitar el problema.

Un saludo
Thales

Lepe 18-08-2005 16:29:45

Si el Tcombobox es para una ventana determinada, debería estar en la ventana hija, no en el MDIForm.

Más bien me inclino a que sea un efecto colateral de tu programa. Dificil de encontrar.... Por supuesto.

Así es imposible encontrar cual es el fallo. :( Esperemos que alguien entienda bien lo que te sucede y pueda ayudarte.

Thales 18-08-2005 17:42:54

He generado una aplicación con los mínimos elementos posibles y que muestran el mal comportamiento que describo. Más abajo pongo un enlace para descargarla, el fichero sólo ocupa 9,55 KB. No puedo poner aquí ningún código pues los componentes van sin código alguno.

http://personales.ya.com/jondalar/mdi.zip

En lo que respecta a la razón para incluir el combo en la cabecera y no en las ventanas hijas, es porque el mismo lo utilizan todas las ventanas hijas (unas 10 en total en el programa original)

Un saludo
Thales

Lepe 19-08-2005 11:04:00

Es curioso el comportamiento, solo se puede volver al Grid, minimizando la ventana hija y despues restaurandola.

Parece que ocurre cuando el control adquiere el foco y lo mantiene, por eso da lo mismo que sea un Tcombobox, TEdit, TButton.

Como son 10 ventanas hijas, quizás no te valga, pero usando TActionCoolbar, y poniendo el combo en la ventana hija, al maximizar la ventana hija, el ActionCoolbar se fusiona con el existente en la ventana padre, y no tiene tal efecto.

De hecho, poniendo el combo en la ventan hija no tiene el efecto raro.

yusnerqui 19-08-2005 14:40:31

Hola
 
Hace tiempo en estos mismos foros me dieron esta solución:

En el evento Deactivate de los formularios hijos pones:

Código Delphi [-]
  DefocusControl(DBGrid1,false)

Espero esto te funciones.

Saludos

Thales 19-08-2005 15:31:07

Acababa de dar con la misma solución que me indicas tras mucho investigar en la ayuda de delphi: y consistia en quitar el foco y luego volvérselo a dar al dbgrid de la ventaja hija desde el evento closeup del combo, pero la solución que me das de quitar el foco al grid desde el evento ondeactivate me parece mejor. Muchas gracias. En efecto funciona.

Un saludo
Thales


La franja horaria es GMT +2. Ahora son las 19:55:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi