Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

pantalla fantasma

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: pantalla fantasma Responder citando

Hola a todos... desarrollando una aplicación tuve un problema cuando teniendo una pantalla principal desplegaba un form secundario que se mantenía activo junto con la pantalla principal detrás, espero se entienda. En ocaciones seleccionaba por equivocacion la pantalla principal y despues nunca podía volver a ver la pantalla secundaria apesar que la volvía a llamar no se que pasa... como puedo hacer para que quede como ventana independiente y que se vea en la barra del tareas?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola, no se si te he entendido bien, pero si lo que quieres es que aparezca un nuevo botón en la barra de tareas por cada ventana que creas:

- Pon la siguiente declaración en la clase del Form en cuestión en la parte privada por ejemplo:
Código:
//--- .h
private:   // User declarations

    void __fastcall CreateParams(TCreateParams& Params);

- Y luego añade la implementación de la misma:
Código:
//--- .cpp
void __fastcall TcontactoFrm::CreateParams(TCreateParams& Params)
{
    TForm::CreateParams(Params);

    // Pone un boton en la barra de tareas para esta ventana
    Params.ExStyle |= WS_EX_APPWINDOW;

    // Hace la ventana hija del escritorio
    Params.WndParent = GetDesktopWindow();
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas, levanto esta consulta de hace ya mucho tiempo, debido a que en RAD2010 ocurre un error extraño.

Os pongo en situación:

Tengo puesto el mismo código que muestra _Leo para que a la hora de abrir cualquier formulario, me añada un botón en la barra de tareas.

Esto me ha funcionado sin problemas, hasta que he exportado el programa a RAD2010.

Ahora, cuando hago la llamada, me aparece el formulario y desaparece automáticamente poniendose por detras del formulario principal.
Si quito esta llamada funciona correctamente
Si hago ShowModal en lugar de Show me funciona correctamente.

¿Existe alguna solucion para que fuerce que el formulario aparezca por delante sin tener que ser la ventana modal?

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A mi me sigue funcionando correctamente, al menos la prueba que acabo de hacer en Windows 7. Lo has probado en un proyecto vacio para descartar que no sea otra cosa de tu proyecto ?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias _Leo, pero se me ha olvidado incluir una cosa importante.
Estoy usanto un TRibbon en lugar de un TMenu.

A ver si por ahí...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

rockman2003 escribió:
Estoy usanto un TRibbon en lugar de un TMenu

Aun así me sigue funcionando correctamente..
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pues.... tienes razón, he creado un nuevo proyecto y funciona a la perfección.

Voy a ver que tiene mi proyecto que hace esto tan raro

Gracias _Leo
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Pues... parece ser que no solo me pasa a mi
http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_24894002.html

Casualmente es lo mismo que me pasa a mi... y la respuesta que obtiene es que abra con ShowModal en lugar de Show (Esto no me vale a mi)

En fin...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Después de probar con más tranquilidad he visto que realmente ocurre lo que dices si se llama al formulario desde una acción del ribbon.. aunque no usando cualquier control..

Y echando un vistazo en el código fuente del mismo veo cual es la línea que provoca este comportamiento:
Código:
// Línea 1509 del archivo RibbonActnCtrls.pas
procedure TRibbonBaseButtonControl.Click;
begin
  inherited;
  SetFocus(Application.MainForm.Handle);  <---
end;

Y para sobrescribir este método sin tener que retocar el archivo original basta con añadir lo siguiente por ejemplo en cualquier parte del código del Form principal:
Código:
void __fastcall TRibbonBaseButtonControl::Click(void)
{
    Actnctrls::TCustomButtonControl::Click();
}
(¡Importante! para que funcione tenemos que tener deshabilitado en las opciones de nuestro proyecto: "Build with runtime packages")

Solo he hecho una prueba rápida para ver si afecta a otras cosas... si tu lo pruebas más detenidamente avísame si ves que afecta a otras cosas e intentamos buscar otro método.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Eres un crack _Leo, increible, no me dejas de sorprender.

Muchas gracias _Leo, funciona de nuevo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.