Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
AnimateWindow() y Position=poDesktopCenter

Hola cada dia un nuevo problema perdón si parece que soy dependienta, pero por mas que le busco no encuentro.
Mi problema en cuestión es el siguiente.
Necesito la Forma en el puro centro de la pantalla por lo cual hago lo sig.
en forma de diseño pongo la opción de la forma en position=poDesktopCenter
Cuando se muestra la forma tengo los efectos de AnimateWindow() el siguiente codigo
Código:
	Randomize();
	int is= Random(4);
	if(is==0)
		AnimateWindow( Handle, 400, AW_ACTIVATE || AW_SLIDE || AW_VER_POSITIVE );
	if(is==1)
		AnimateWindow( Handle, 400, AW_ACTIVATE || AW_SLIDE || AW_VER_NEGATIVE );
	if(is==2)
		AnimateWindow( Handle, 400, AW_CENTER);
	if(is==3)
		AnimateWindow( Handle, 400, AW_BLEND);
El error gráfico que provoca es el siguiente
aparece la forma en un lugar diferente al de poDesktopCenter (aparece en el lugar de diseño) después hace el efecto que corresponde y por ultimo centra la ventana
Quisiera centrar primero y despues efecto se podra?
__________________
El Software es como el Sexo, si es de gratis es Mejor
Responder Con Cita
  #2  
Antiguo 09-05-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
El problema es que Builder coloca como posición inicial la de diseño. Cuando seleccionas poScreenCenter Builder cambia a esa posición y luego muestra el Form. A nuestros ojos la ventana se creó en el centro aunque en realidad no fue así.

Para solventar el problema deberás colocar el Form donde te interesa (aunque no sea visible de momento) y luego aplicar AnimateWindow.

Te muestro un ejemplo simple:
Código:
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
  // Centro la ventana... 
  if(Position == poScreenCenter){
     Left = (Screen->Width - Width)/2;
     Top  = (Screen->Height - Height)/2;
   }
   AnimateWindow(Handle, 400, AW_ACTIVATE | AW_SLIDE | AW_HOR_POSITIVE);
}
Por cierto, no se si fue un error tipográfico o no, de todas formas aclaro que el operador or binario es una sola barra |. El or lógico son dos ||

Saludos.
Responder Con Cita
  #3  
Antiguo 09-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
Con respecto al problema sigue haciendo lo mismo aun después de poner tu código alguna sugerencia?
Muy cierto eso de || fue error de escritura.

Otra pregunta yo había visto Left = (Screen->Width - Width)/2; sin necesidad de decir que es Form1->Left
A como se le llama este uso y como funciona?
__________________
El Software es como el Sexo, si es de gratis es Mejor

Última edición por aams01 fecha: 09-05-2011 a las 17:33:12.
Responder Con Cita
  #4  
Antiguo 09-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
Talking

Gracias por Todo

Soy un mentiroso de lo peor ya funciona con una modificacion
Código:
Left = (Screen->Width - Width)/2;
     Top  = (Screen->Height - Height)/2;
	AnimateWindow( Handle, 400, AW_BLEND);
con solo retirar el if, y en modo diseño poner la position = poDesigned
__________________
El Software es como el Sexo, si es de gratis es Mejor
Responder Con Cita
  #5  
Antiguo 09-05-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 aams01 Ver Mensaje
Con respecto al problema sigue haciendo lo mismo aun después de poner tu código alguna sugerencia?...mmm, pues es curioso porque lo he probado en dos PCs con Builder 5 y en uno funciona como se esperaba y en el otro no.
Usemos pues la API:

Código:
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  // Centro la ventana...
  SetWindowPos(Handle, HWND_TOP, (Screen->Width - Width)/2, (Screen->Height - Height)/2, 0, 0, SWP_NOSIZE);
  AnimateWindow(Handle, 400, AW_ACTIVATE | AW_SLIDE | AW_HOR_POSITIVE);
}
Cita:
Empezado por aams01 Ver Mensaje
...Left = (Screen->Width - Width)/2; sin necesidad de decir que es Form1->Left
A como se le llama este uso y como funciona?
Eso es posible porque estamos en un método de la clase TForm1, el compilador sobreentiende que Left es Form1->Left. Desde un método ajeno a la clase no se puede hacer.

Quizás te interese esto como alternativa a AnimateWindow

Saludos.
Responder Con Cita
  #6  
Antiguo 09-05-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 aams01 Ver Mensaje
Gracias por Todo

Soy un mentiroso de lo peor ya funciona con una modificacion
Código:
Left = (Screen->Width - Width)/2;
     Top  = (Screen->Height - Height)/2;
	AnimateWindow( Handle, 400, AW_BLEND);
con solo retirar el if, y en modo diseño poner la position = poDesigned
No me di cuenta de este mensaje tuyo previo a mi respuesta...
Bueno, el condicional es para que se centre solo si Position es poScreenCenter. Si lo quieres centrar siempre, de todas todas, pues lo retiras y listo.

Mira mi mensaje anterior, la API suele ser una buena opción.

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
Ayuda con Animatewindow Jheysson13 Varios 3 10-09-2010 01:04:49
Ayuda con animatewindow kakesoft Varios 6 16-06-2006 22:15:39


La franja horaria es GMT +2. Ahora son las 23:20:35.


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