Tengo estos cursor en forma de formularios que necesito para estar en la Cima de todo, todo el tiempo…

FormStyle ya está fsStayOnTop

Puedo usar este código:

 SetWindowPos(tempCursor.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE );

y este (aunque no sé exactamente lo que hace):

procedure TCursorFrm.CreateParams(var Params: TCreateParams);
const
   WS_EX_NOACTIVATE = $8000000;
begin
   inherited;
   Params.ExStyle := Params.ExStyle + WS_EX_NOACTIVATE;
end;

pero todavía no puedo conseguir que mis formas de estar en la Cima de TMenuItems.
¿Cómo puedo hacer que mis formas de mantenerse en la cima de todo?

InformationsquelleAutor Dian | 2010-07-14

5 Comentarios

  1. 4

    Este tiene que ser el mejor, o peor, pieza de trucos voy a publicar.

    1. Conjunto de su FormStyle a ser fsStayOnTop (Este paso no será necesario)
    2. Caída de un TTimer en el formulario y establezca el intervalo de 100
    3. En el evento OnTimer coloque el código siguiente:

      si son visibles, a continuación,
      SetWindowPos(Auto.Manejar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE o SWP_NOMOVE o SWP_NOACTIVATE);

    Estoy usando esto en uno de mis proyectos y parece que funciona bien.

    • Wow. funciona! muy chapucero pero funciona. Gracias. 😀
    • Busqué en el diccionario y ‘chapucero’ no describe con precisión cómo hacky este hack es. Necesitamos una nueva palabra para esto.
  2. 4

    Creo que es tan bueno como usted va a obtener. Si el formulario se alojó en la parte superior de menús, a continuación, los usuarios no podrán ver un menú cuando se abrió. Hacer algo como eso, especialmente cuando el sistema no hacerlo disponible a través de cualquier medio fácil, fronteras en la malicioso, o al menos se siente de esa manera. Usted no quiere que sus usuarios a pensar que su programa es malicioso, así que mi consejo sería que no intente hacer esto en primer lugar.

    • Bueno, se supone que para ser un cursor (varios cursores para varios ratones), por lo que debe ser en la parte superior. Es un poco raro que el cursor está detrás de los MenuItems. 🙁 (Ah, y no creo que los usuarios se piensa que es dañino, ya que no en todos los aspecto de una forma regular, se ve como un regular cursor)
    • Oh, es un cursor? en ese caso, ¿por qué estás tratando de implementar un cursor con un forma? estoy seguro de que hay una manera más sencilla. No estoy seguro de lo que forma es, pero no tiene que ser una…
    • Porque me sugirieron en otra pregunta y, con toda justicia, que funciona bastante bien excepto por el Menú problema. Mi primer intento fue el de la pintura el cursor en la Pantalla de lona, fue una pesadilla (montones y montones de problemas). No he encontrado otra manera aparte de esos dos.
    • Ummm… ¿»cursor» estar por encima de mi pantalla completa juegos? Entonces… maldición! 😀
    • jajaja! No, los cursores sólo estará presente cuando mi aplicación (que es un múltiplo de usuario de escribir y de opción múltiple de la aplicación) se está ejecutando.
  3. 2

    Rápido, un poco chapucero revisión: Llame a este de un Temporizador, 10 veces por segundo:

    BringWindowToTop(Handle)

    Sólo lo he probado y funciona! Tal vez usted puede encontrar una manera de hacer que sea menos «fuerza bruta», pero no estoy seguro de cómo.

    • Probé (como usted sugiere) con un temporizador. No puedo acceder al Menú más, cuando hago clic en el Menú, se muestran los Elementos de una fracción de segundo y luego se va.
    • Qué «Elementos»? Es el menú de desaparecer? Si es así, por favor, mostrar algo de código, tal vez usted está de alguna manera robar el foco en el menú? En mi prueba simplemente he hecho un «estar encima» de la ventana y haga clic en un editor de texto, causando un menú emergente para mostrar exactamente por la forma. Funcionó como se esperaba, el menú no desaparece; por supuesto, yo no estaba tratando de emular a una secundaria cursor del ratón…
    • Sí, los MenuItems desaparecer. Coloca esta: BringWindowToTop(Cursor[I].El asa) en un bucle que se ejecuta cada segundo. Sí, yo creo que me voy a robar el foco en el menú.
    • ¿Por qué estás haciendo eso en un bucle for? Colocar un temporizador en algún lugar, establecer el intervalo de «100» y la llamada BringWindowToTop a partir de ahí. Y el problema de foco, si de hecho eso es lo que pasa, es un problema diferente.
    • Es un bucle for, porque los cursores almacenados en una matriz (de registros… el cursor se asigna a un usuario concreto por lo tanto un registro específico). Y sí, roba el foco desde el Menú y en el MainForm.
  4. 2

    Creo que usted puede mirar en DirectX. Creo que permite superposiciones sobre la imagen principal. Usted puede abrir en no exlusive modo y sorteo de superposición sobre el escritorio. Pero NO estoy seguro de ello. Sólo una conjetura.

Dejar respuesta

Please enter your comment!
Please enter your name here