![]() |
Mostrar Form pero Desactivado
Hola! mi primer post... :p
Me preguntaba si alguien sabe como hacer un Form.Show pero que no se active. Tengo dos TForm, sean Form1 y Form2, mi idea es hacer una especie de Hint customizado (para ponerle Imagenes, Labels con colores, etc) , entonces en el OnMouseMove del Form1 hago Form2.Show pero esto, si bien me muestra el Form2, tambien lo activa desactivando el Form1, lo que da un efecto que no me gusta :mad: (en realidad tampoco es para tanto, pero si se puede solucionar...). Intenté usar Windows.ShowWindow(Form2.Handle, SW_SHOWNOACTIVATE) y casi funciona, pero me muestra el Form sin su contenido... En fin, si alguien se le ocurre algo, bienvenido! Gracias! |
Hola
Bienvenido al club. La verdad no termino de entender el concepto de lo que quieres hacer. Tal vez usando un panel en vez del form2 o usar un frame. La verdad si te explicas con mas detalle tal vez entendamos mejor el concepto. Saludos |
Haya varias formas:
- Heredar de la clase ThintWindow que es la clase original de delphi para mostrar los hints. De esta forma sólo tienes que hacer la ventana de hint y Delphi se encargará de activarla cuando haga falta mostrar el hint sobre un control. - Tal y como lo tienes pero en el evento OnMouseWheel añades:
Se notará un pequeño flash en la barra de título del Form2. Lo más sano es quitarle la barra de titulo al Form2 :D. Saludos |
La idea es que el "Hint" siga el cursor del Mouse, por eso uso el OnMouseMove para ir actualizando la posicion del "Hint". Usando SetFocus se produce flickering (Nota: el Form2.BorderStyle = bsNone).
Por otro lado la clase Hint de delphi tiene el metodo ActivateHintAt(...), pero yo lo que necesitaria es el metodo, por ejemplo, MoveHintAt(...) ya que el metodo anterior "cierra" cualquier Hint previamente activado, lo cual tambien produce una especie de flicker al llamarlo, porque se cierra y se vuelve a abrir en la nueva posicion, cuando lo que yo necesitaría es moverlo a la nueva posicion sin cerrarlo... Ademas usando un TForm como hint, le puedo agregar imagenes, paneles con bevels, etc, cosa que heredando un hint debería ser un experto en componentes para lograrlo, cosa que no soy :p En resumen, SetFocus lamentablemente no me sirve... Gracias por la respuesta! Saludos |
A ver si me puedo explicar un poco mejor... Tengo un TChart, al pasar el cursor por arriba de una serie pretendo mostrar una ventana con datos (Label de la serie, valor, alguna imagen, configurarle transparencia, etc). Esta ventana quiero que siga la posicion del mouse a medida que lo muevo, entonces hago lo siguiente en el OnMouseMove del chart:
Esto funciona bastante bien, el problema es que HintForm.Show desactiva el Form principal y HintForm.Hide, lo vuelve activar, lo cual produce un efecto que no me gusta (sobre todo si es un grafico de Barras ya que SPIndex:= BarChartSeries.GetCursorValueIndex casi siempre da < 0) Eso es todo, espero que se entienda :) |
Bueno finalmente lo logré, aunque no se si está muy bien ya que no tengo mucha ciencia al respecto sino más bien es algo empírico...
Lo que hice fue lo siguiente:
Como decía, no se si estará muy bien, pero funciona :p Si alguien sabe de alguna forma mejor, o piensa que esta forma tiene algún defecto por algun motivo, me gustaría saberlo... Saludos! |
La franja horaria es GMT +2. Ahora son las 07:34:34. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi