Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-04-2008
donsenior donsenior is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
donsenior Va por buen camino
Mostrar Form pero Desactivado

Hola! mi primer post...
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 (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!
Responder Con Cita
  #2  
Antiguo 14-04-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 14-04-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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:
Código Delphi [-]
 Form2.Show;
 Form1.SetFocus;

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 .

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 14-04-2008
donsenior donsenior is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
donsenior Va por buen camino
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

En resumen, SetFocus lamentablemente no me sirve...

Gracias por la respuesta!
Saludos
Responder Con Cita
  #5  
Antiguo 14-04-2008
donsenior donsenior is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
donsenior Va por buen camino
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:

Código Delphi [-]
  GetCursorPos(P);
  SPIndex:= PieChartSeries.GetCursorValueIndex;

  if (SPIndex > -1) then
  begin
    if (SPIndex <> PieChartSeries.Tag) then
   //Si cambio de serie actualizo los datos del "Hint"
    begin
      PieChartSeries.Tag:= SPIndex;
      SPName:= PieChartSeries.XLabel[SPIndex];
      HintForm.Hide;
      HintForm.SetHeader(SPName); 
     //SetHeader es un metodo propio que setea un Label
      end;
    end;
    HintForm.Left:= P.X;
    HintForm.Top:= P.Y;
    HintForm.Show
  end
  else
    HintForm.Hide

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
Responder Con Cita
  #6  
Antiguo 14-04-2008
donsenior donsenior is offline
Registrado
 
Registrado: mar 2008
Posts: 4
Poder: 0
donsenior Va por buen camino
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:
Código Delphi [-]
  public
    { Public declarations }
    procedure ShowNoActivate;
    procedure HideNoActivate;
  end;

procedure THintForm.ShowNoActivate;
begin
  Windows.ShowWindow(Handle, SW_SHOWNOACTIVATE);
  Windows.ShowWindow(Panel1.Handle, SW_SHOWNOACTIVATE);
  Windows.ShowWindow(Panel2.Handle, SW_SHOWNOACTIVATE);
  Windows.ShowWindow(Panel3.Handle, SW_SHOWNOACTIVATE);
  //Hay que hacer un ShowWindow por cada panel que contenga el Form
end;

procedure THintForm.HideNoActivate;
begin
  Windows.ShowWindow(Handle, SW_HIDE);
end;

Como decía, no se si estará muy bien, pero funciona

Si alguien sabe de alguna forma mejor, o piensa que esta forma tiene algún defecto por algun motivo, me gustaría saberlo...

Saludos!
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
Abrir archivo de Word pero incrustado en Form mak8888 Servers 10 14-11-2007 17:33:15
Se puede mostrar Memo en Dbgrid pero sin campor persistentes? Alfredo OOP 0 23-01-2006 18:38:14
como mostrar una ventana pero con diferentes botones Nelly Varios 1 06-01-2006 18:35:17
win xp pro '' desactivado restaurar sistema ' botones67 Windows 3 26-01-2005 12:31:08


La franja horaria es GMT +2. Ahora son las 10:42:12.


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