| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Jue 16 Dic, 2010 7:31 pm Asunto: DBGrid y Windows 7 |
|
|
Hola,
Tengo un pequeño problema con una aplicación que hasta ahora todo funcionaba bien hasta que la he probado en Winwdows 7. El problema parece ser con el componente DBGrid, tengo un DBGrid que tiene asignado varios eventos entre ellos seria OnDblCkick y el OnTitleClick los que parece que tienen el problema con el Windows 7.
El problema en cuestion es cuando el usuario hace un doble click sobre el DBGrid y la aplicación pues en este evento abre otro formulario modal y cuando el usuario cierra este nuevo formulario parece ser que se ejecuta por arte de magia el evento OnTitleClick. Como decia en un inicio esto solo pasa con Windows 7 y lo hace siempre.
El evento OnTitleClick esta programa para ordenar el DBGrid en funcion de que columna se realice el click.
Esto me ha pasado en una instalacion en casa de un cliente, pero no lo he podido reproducir porque yo no tengo la suerte o 'desgracia' de tener Windows 7. Haber si alguien le a pasado y nos cuenta o lo puede reproducir.
Ya que resulta muy molesto en mi aplicación que te cambie el orden del DBGrid cada dos por tres sin venir a cuento.
Utilizo C++ Builder 6 y los componentes standard.
Muchas gracias de ante mano! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 16 Dic, 2010 8:03 pm Asunto: |
|
|
Haciendo una prueba rápida con el BCB6 sobre "Windows 7 Pro 64bits" no he podido reproducir el problema.
Al hacer doble-click sobre el DBGrid no se me dispara en ningún momento el evento "OnTitleClick", ni siquiera después de mostrar una ventana modal desde "OnDblClick".
Uploaded with ImageShack.us
(Aunque se vea el triangulito dibujado, en realidad es un TDBGrid normal. El número que se ve en la barra de título aumenta cada vez que se dispara el evento "OnTitleClick" para que se vea un poco más claro) |
|
| Volver arriba |
|
 |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Vie 17 Dic, 2010 5:03 pm Asunto: |
|
|
Hola Leo,
Yo he transmitido la impresion de lo que creo que fallaba cuando se ejecutaba esta aplicación en un Windows 7. Visualmente hacia eso cuando el usuario daba doble click, abria y cerraba se reordenaba por la columna que casualmente estaba el puntero del raton. El procedimiento de ordenar las columnas solo esta en el evento onTitleClick del DBGrid. Y nunca antes a pasado en otros Windows (2000, XP, 2003)
Pero como no he podido depurarlo tampoco se exactamente que mas puede estar sucediendo.
Me habian comentado que si utilizaba el componente XPManifest daba problemas con algunos componentes en Windows Vista y 7, pero yo no lo utilizo.
Cuando averigüe algo mas os cuento.
Muchas gracias. |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 27 Dic, 2010 12:49 pm Asunto: |
|
|
Leo,
Como haces para poner el triangulito en el titulo?
Un abrazo y feliz navidad.
Carlos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Lun 27 Dic, 2010 3:58 pm Asunto: |
|
|
| _Leo escribió: | https://cppbuilder.es/viewtopic.php?t=4621
Feliz Navidad, aunque este año veo menos lucecitas y menos decoración en las tiendas y en las calles.. |
Gracias Leo,
Es verdad, imagino que el ahorro hay llegado también a las lucecitas, bueno imagino que nos viene bien ahorrar un poco.
Un abrazo y que sigas siendo tan maquina como siempre.
Carlos |
|
| Volver arriba |
|
 |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Jue 08 Sep, 2011 3:48 pm Asunto: |
|
|
Hola,
Respecto a este post que inicie en su dia queria añadir que estaba equivocado y no se trata de un problema con Windows 7 como hice mención. La cuestión es que por cosas de las casualidades solo se habia reproducido el problema en pc's con Windows 7 y ademas intentando reproducir el mismo en otros equipos no hubo manera.
A dia de hoy todavia sigo con el problema sin resolver, pero finalmente he podido averiguar algun dato mas que me permite reproducir (no siempre) el problema que comentaba.
La cuestion es la misma, que no se porque se dispara un evento del DbGrid, el OnTitleClick.
Para entrar mas en detalle comentaros que es una aplicación tipo MDI y desde un formulario hijo que contiene el famoso dbgrid, cuando el usuario realiza doble click sobre el dbgrid la aplicación crea y muestra otro formulario hijo. Solo en los casos en que el segundo formulario hijo se muestra 'maximizado' al cerrar el mismo y eliminarlo cuando retorna al formulario desde el que se creo lanza el evento no deseado OnTitleClick (no siempre)
Decir que el evento OnTitleClick de este DbGrid no se llama en ningun otro lugar del codigo, solo cuando realiza click en el los titulos del DbGrid.
Se puede observar cuando se ha ejecutado el evento porque cambio el color del titulo en cuestion.
Pongo un enlace que he encontrado en otro foro que embarcadero que tambien comentan el bug existente en el dbgrid:
https://forums.embarcadero.com/thread.jspa?threadID=36057
Nota: Quizas tendria que iniciar un nuevo hilo puesto que el tema ha cambiado. |
|
| Volver arriba |
|
 |
Bitman Lt

Registrado: 30 Mar 2004Mensajes: 80
|
Publicado: Vie 09 Sep, 2011 9:12 am Asunto: |
|
|
Hola,
Una vez que he podido reproducir el problema me ha sido facil buscarle una solución. Como ya comentaba se trata de un pequeño bug en el componente DbGrid cuando se utiliza los eventos OnTitleClick y OnDblClick.
Este bug no sucede siempre que se programan estos eventos, en mi caso es al crear y mostrar un formulario MDIchild desde el evento OnDblClick del DbGrid, sobretodo cuando este formulario esta maximizado.
Os pongo un ejemplo muy simple pero que funciona para evitar este molesto problema.
| Código: |
void __fastcall TForm2::DBGrid1DblClick(TObject *Sender)
{
DBGrid1->Enable = false; // Inabilito el grid para evitar problema.
TForm3 *Form3 = new TForm3(this);
DBGrid1->Enable = true; // Vuelvo a habilitar el grid.
}
|
Muchas gracias a todos. |
|
| Volver arriba |
|
 |
|