Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 31-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Corregido
Responder Con Cita
  #42  
Antiguo 31-10-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Corregido
Gracias


Saludos.
Responder Con Cita
  #43  
Antiguo 31-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Gracias escafandra. Parece que tú has sido el único con la sensibilidad suficiente para entender mis penas.

"Bucearé" en tu código y te cuento.

Gracias de nuevo y un saludo
__________________
Be water my friend.
Responder Con Cita
  #44  
Antiguo 31-10-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Gracias escafandra. Parece que tú has sido el único con la sensibilidad suficiente para entender mis penas.
Eso me ha herido, que uno también tiene su corazoncito
Responder Con Cita
  #45  
Antiguo 31-10-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Amigo escafandra.

El ejemplo que me has propuesto hace más de lo que yo necesitaba, he usado la parte del código que mantiene el formulario principal al fondo de los demás y me sirve a la perfección, era lo que estaba buscando (aunque os parezca raro, bueno, yo es que soy un tío raro ).

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Eso me ha herido, que uno también tiene su corazoncito
No te pongas triste, ven que te dé un chillaito.... ayyyyyyyyyyyyyyyyyyyyyyyyy.... :P

Gracias a todos por vuestra atención y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #46  
Antiguo 31-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver, no entiendo. Yo iba por el mismo camino que escafandra (aunque no tan completo)

Cita:
Empezado por roman Ver Mensaje
Ok. Ahí te va una aproximación a lo que quieres:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure WMMouseActivate(var Message: TWMMouseActivate); message WM_MOUSEACTIVATE;
  end;

implementation

procedure TForm1.WMMouseActivate(var Message: TWMMouseActivate);
begin
  Message.Result := MA_NOACTIVATE;
end;
y sin embargo, mi opción la descartaste. Probando el código de escafandra noto que tampoco permite seleccionar opciones del menú. ¿Entonces?

Me siento ofendido, ja, ja

// Saludos
Responder Con Cita
  #47  
Antiguo 31-10-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
...mi opción la descartaste. Probando el código de escafandra noto que tampoco permite seleccionar opciones del menú. ¿Entonces?...
Bueno quizás mi código tiene dos partes. Una muy similar al tuyo y otra con otra filisofía. Newtron se quedó con la segunda:
Código Delphi [-]
// Interceptamos los mensajes de MainForm
procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
{    
    WM_MOUSEACTIVATE:
    begin
      if Lo(Message.lParam) = HTCAPTION then
         Message.Result := MA_NOACTIVATEANDEAT
      else
         Message.Result:= MA_NOACTIVATE;
      exit;
    end;
}
    WM_WINDOWPOSCHANGED:
    begin
      // Aseguramos que MainForm esté siempre detrás
      SetWindowPos(Handle, GetBackForm(self).Handle, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
      exit;
    end;
  end;
  inherited WndProc(Message);
end;

Esta segunda si permite accionar el menú pero tiene un efecto visual un poco "raro" en PCs mas antiguos.


Saludos.
Responder Con Cita
  #48  
Antiguo 31-10-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Ok. Entonces la parte del MouseActivate sale sobrando ¿no?

¿Cuál es el efecto raro en pcs viejos?

// Saludos
Responder Con Cita
  #49  
Antiguo 01-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
¡Ah! Ok. Entonces la parte del MouseActivate sale sobrando ¿no?
Bueno, relativamente. Si lo escribimos de la siguiente manera, funcionan los menús:
Código Delphi [-]
procedure TForm1.WndProc(var Message: TMessage);
begin
  case Message.Msg of
    WM_MOUSEACTIVATE:
    begin
      if Lo(Message.lParam) = HTMENU then
         Message.Result:= MA_ACTIVATE
      else if Lo(Message.lParam) = HTCAPTION then
         Message.Result := MA_NOACTIVATEANDEAT
      else
         Message.Result:= MA_NOACTIVATE;
      exit;
    end;
    WM_WINDOWPOSCHANGED:
    begin
      // Aseguramos que MainForm esté siempre detrás
      SetWindowPos(Handle, GetBackForm(self).Handle, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
      exit;
    end;
  end;
  inherited WndProc(Message);
end;

Cita:
Empezado por roman Ver Mensaje
¿Cuál es el efecto raro en pcs viejos?
El efecto es que si el PC es lento se aprecia sutilmente que la ventana principal se activa y luego se va hacia atrás. Se aprecia una aparición rápida y fugaz de los bordes del MainForm si se solapan con ventanas secundarias. Es por eso que incluí WM_MOUSEACTIVATE, con sus efectos secundarios, y el motivo por el que anuncié que no me terminaba de convencer.

Saludos.
Responder Con Cita
  #50  
Antiguo 01-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por escafandra Ver Mensaje
Bueno quizás mi código tiene dos partes. Una muy similar al tuyo y otra con otra filisofía. Newtron se quedó con la segunda:
Exacto, de esta manera simulo que tengo formularios mdi, puedo seleccionar opciones del menú y las ventanas siguen al frente. Si te estorba alguna ventana porque se quede encima de alguna opción del menú la puedes mover o minimizar.

La razón de no usar mdi es porque yo uso un formulario propio que necesita crearse y asignarle una serie de propiedades antes de hacer el show, con los formularios mdi se ejecuta el show en el momento de crearlos. No sé si esto lo hubiera podido solucionar pero este y otros problemas los vería duros de resolver, era más fácil buscar la solución al tema de los menús.
__________________
Be water my friend.
Responder Con Cita
  #51  
Antiguo 02-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Amigo escafandra.

Esto se ha quedado estupendamente pero hay un pequeño detalle que rompe mi "paz interior" y es que si tengo un formulario abierto encima del menú y minimizo el menú, al volver a maximizarlo el formulario se queda detrás del menú. ¿Hay forma de arreglar eso?

Gracias y un saludo.
__________________
Be water my friend.
Responder Con Cita
  #52  
Antiguo 02-11-2011
Avatar de José Luis Garcí
[José Luis Garcí] José Luis Garcí is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Las Palmas de G.C.
Posts: 1.372
Poder: 23
José Luis Garcí Va camino a la fama
Una pregunta newtron, porque no pones una variable, que antes de entrar en el menu, o sea al peder el active un Form, grave el nombre del form, con lo cual al salir de la acción del menu abra el form guardado en la variable, vamos es una idea.
__________________
Un saludo desde Canarias, "El abuelo Cebolleta"
Responder Con Cita
  #53  
Antiguo 02-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por José Luis Garcí Ver Mensaje
Una pregunta newtron, porque no pones una variable, que antes de entrar en el menu, o sea al peder el active un Form, grave el nombre del form, con lo cual al salir de la acción del menu abra el form guardado en la variable, vamos es una idea.
Bueno, una opción sería recorrer los formularios abiertos y traerlos al frente pero preguntaba al hilo de lo que estabamos tratando si había alguna forma de evitar ese comportamiento variando algo de lo que ya hay.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #54  
Antiguo 02-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por newtron Ver Mensaje
Amigo escafandra.

Esto se ha quedado estupendamente pero hay un pequeño detalle que rompe mi "paz interior" y es que si tengo un formulario abierto encima del menú y minimizo el menú, al volver a maximizarlo el formulario se queda detrás del menú. ¿Hay forma de arreglar eso?

Gracias y un saludo.
Haber si te entiendo. ¿Dices que si tienes un formulario abierto delante del Form Principal (al que tu, perece ser, llamas menú) y minimizas el Form Principal, al restaurarlo éste tapa al Form secundario?

Con el ejemplo que he usado eso no ocurre , es posible que no te entienda bien o que tengas incluidas cosas en tu código distintas a las mías.

Saludos.
Responder Con Cita
  #55  
Antiguo 03-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Solucionado.

El problema es que tenía ya redireccionado los mensajes del programa y no podía usar tu código tal cuál entonces puse la instrucción para pasar el formulario principal al fondo en el evento "activate" pero claro, este evento no se dispara al volver al formulario después de minimizarlo, he capturado el evento OnRestore y ahí si que me funciona.

Gracias y un saludo
__________________
Be water my friend.
Responder Con Cita
  #56  
Antiguo 03-11-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Si quieres simplificarte, no trabajes con los eventos VCL, captura el mensaje WM_WINDOWPOSCHANGED con un procedimiento tal que así:

Código Delphi [-]
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED; 
//.......................

procedure TForm1.WMWindowPosChanged(var Message: TWMWindowPosChanged);
begin
    SetWindowPos(Handle, GetBackForm(self).Handle, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;

Sería el equivalente al código que anteriormente puse, sólo que lo hice en el WndProc(var Message: TMessage); para manejar varios mensajes en un sólo procedimiento.


Saludos.
Responder Con Cita
  #57  
Antiguo 03-11-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.473
Poder: 21
newtron Va camino a la fama
Estupendo.

Gracias.
__________________
Be water my friend.
Responder Con Cita
  #58  
Antiguo 10-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
Hola, ya sé que este hilo es muy antiguo, pero es que un enlace reciente de Newtron me ha llevado hasta aquí.

No sé si entiendo bien lo que Newtron quería, pero ¿No hubiera bastado con dejar el formulario principal (llamado menú) con su propiedad FormStyle en fsNormal y establecer esa propiedad en fsStayOnTop para todos los demás formularios?

Un saludo
Responder Con Cita
  #59  
Antiguo 10-03-2013
ricardopl65 ricardopl65 is offline
Miembro
 
Registrado: nov 2008
Posts: 25
Poder: 0
ricardopl65 Va por buen camino
Intenta esto

Se me ocurre que puedes poner esto en el formulario que tiene el menu


Código Delphi [-]
protected     
procedure CreateParams(var Params: TCreateParams); override;  

 procedure TMiForm.CreateParams(var Params: TCreateParams);
 begin   
inherited CreateParams(Params);  
with Params do   
begin     
ExStyle := ExStyle or WS_EX_NOACTIVATE;     
WndParent := GetDesktopwindow;   
end;


De esta manera el formulario nunca gana el foco, es decir no se activa
Responder Con Cita
  #60  
Antiguo 10-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
Hola Ricardo, el código que pones no impide que el formulario principal menú adquiera el foco. Por lo menos en las pruebas que he hecho. De todas formas, lo que creo que buscaba Newtron es que el formulario principal no se colocara por encima de los demás formularios de la aplicación, tapandolos, pero que sí mantuviera su capacidad de uso.

Ya encontraron una solución satisfactoria. Si he resubido el hilo (con más de un año) es porque tenía la impresión de que eso mismo se podía conseguir de una manera más simple.

Un saludo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Orden formularios newtron Varios 10 06-10-2011 14:03:37
Paneles en Orden ...... Efren2006 OOP 9 11-06-2010 12:36:02
Splash screen ,o splashscreen ,o form o ventana de inicio ,o orden de formularios Peterman C++ Builder 2 29-05-2007 19:46:22
Orden en TIBDataset barman Conexión con bases de datos 6 27-11-2003 10:40:25
Orden en TIBDataset barman Firebird e Interbase 6 24-11-2003 21:26:00


La franja horaria es GMT +2. Ahora son las 08:24:45.


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
Copyright 1996-2007 Club Delphi