Ver Mensaje Individual
  #15  
Antiguo 25-03-2016
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por aguml Ver Mensaje
...Ahora que he puesto esa linea aparece una excepcion al mostrar el menu del systrayicon. El problema es que no hay ningun form activo al ser el unico y estar oculto y el componente hace uso de este codigo:
Código PHP:
void __fastcall TSysTrayIcon::ShowMenu()
{
   if(
FPopupMenu == NULL) return;

   
TPoint point;
   
GetCursorPos((tagPOINT*)&point);

   try
   {
      if (
Screen->ActiveForm->Handle != NULL)
         
SetForegroundWindow(Screen->ActiveForm->Handle);
   }
   catch (...)
   {
   }

   
FPopupMenu->Popup(point.xpoint.y);

El caso es que ActiveForm vale NULL y da una excepcion y no la pasa ni con el catch correctamente.
He hecho un chapú para solucionarlo que es hacer en el evento OnCreate del form Form1->Show() y Form1->Hide() y con eso ya hay un form activo y no falla pero durande unas decimas aparece y desaparece el form y no quiero que pase eso.
Efectivamente la función falla cuando Application->ShowMainForm = false porque en ese caso Screen->ActiveForm == NULL
He aprovechado para corregir eso y ampliar esa funcionalidad de forma sencilla.
Código PHP:
// Esto hará que la App arranque escondida, no visible en la barra de tareas y si en el SysTray 
__fastcall TForm1::TForm1(TComponentOwner)
   : 
TForm(Owner)
{
   
Application->ShowMainForm false;
   
SysTrayIcon1->Hide true;
   
SysTrayIcon1->Visible true;

El enlace del componente actualizado lo tienes aquí


Saludos

Última edición por escafandra fecha: 25-03-2016 a las 18:08:30.
Responder Con Cita