[Solucionado] Ayuda setparent y ubicacion

Iniciado por Cromatico, 22 Noviembre 2010, 19:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Cromatico

Hola de nuevoo :P
Una pregunta, yo estoy usando Setparent para incrustar mi formulario adentro de otro (este otro se encuentra en otro proceso)

Mi pregunta es, hay alguna forma de, luego de que ya este inscrustado, ubicarlo siempre en la misma posicion? Tengo que sacar las medidas del form del otro proceso para lograr esto?

Gracias!!

BlackZeroX

GetParent()

Antes de incrustarlo guarda el Origen (Hwnd Origen con GetPArent()).

Dulce Infierno Lunar!¡.
The Dark Shadow is my passion.

Cromatico

Mmmm creo que no es lo que busco, ese api creo que retorna el HWND, yo ya tengo el hwnd de el form principal donde quiero incrustarlo, e incluso se incrusta bien, pero lo que intento hacer es luego de incrustarlo, moverlo a la posicion X, Y de ese form, nose si me explico...
Por ejemplo, una ves incrustado en el form del otro proceso, centrarlo en el medio del mismo...

Gracias!!

Dessa

#3
Cita de: Cromatico en 22 Noviembre 2010, 19:34 PM
Mi pregunta es, hay alguna forma de, luego de que ya este inscrustado, ubicarlo siempre en la misma posicion? Tengo que sacar las medidas del form del otro proceso para lograr esto?

mmm... no se luego de incrustrar, si fuera propiante un control de la aplicacion externa se podria cambiar de tamaño o posicion con SetWindowPos, pero este no es caso, creo que el Hwnd de la ventana de tu aplicación no va a figurar como hijo de la aplicación externa (aunque lo incrustes)

Cita de: Cromatico en 22 Noviembre 2010, 19:34 PM
Mi pregunta es, hay alguna forma de, luego de que ya este inscrustado, ubicarlo siempre en la misma posicion? Tengo que sacar las medidas del form del otro proceso para lograr esto?

No se si hay alguna forma directa de hacerlo, pero para saber la posicion y tamaño de una aplicacion externa podes usar GetWindowRect con esas dimenciones tratá de centrar tu formulario desde el codigo, probalo ( pero nunca lo hice con un Form incrustado)    

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Type RECT
   Left As Long: Top As Long: Right As Long: Bottom As Long
End Type

Dim TR As RECT

"LEFT" = TR.Left * 15
"TOP" = TR.Top * 15
"WIDTH " = TR.Bottom * 15 - TR.Top * 15
"HEIGHT"= TR.Right * 15 - TR.Left * 15





Adrian Desanti

Cromatico

Hola Dessa gracias por contestar!!!

Me funcionó  lo que me dijiste y lo hice de la siguiente manera:
ret = hwnd del form externo
strings = WidthExt y HeighExt
+2720 y -4950  Son los dos valores que le sume y reste para ubicarlo en la posicion que yo queria no en el centro :P

Call SetParent(Form2.hWnd, ret)
Form2.Show
Dim TR As RECT
Call GetWindowRect(ret, TR)
WidthExt = TR.Bottom * 15 - TR.Top * 15
HeighExt = TR.Right * 15 - TR.Left * 15
Form2.Move ((WidthExt - Form2.Width) \ 2) + 2720, ((HeightExt - Form2.Height) \ 2) - 4950

Saludos y gracias!!!

Dessa

Buenísimo, tenia dudas si podia servir, creo que puse al reves el retorno de HEIGHT y WIDTH,  :xD :xD :xD , sería así:

"LEFT" = TR.Left * 15
"TOP" = TR.Top * 15
"HEIGHT"= TR.Bottom * 15 - TR.Top * 15
"WIDTH" = TR.Right * 15 - TR.Left * 15


Saludos
Adrian Desanti

Cromatico

jjajajaja ya me parecia raro, porque no quedaba muy muy en el centro ya que el form no es un cuadrado perfecto, pero igual me servia ya que siempre lo posicionaba en las mismas coordenadas.

Entonces ya corregido me quedo:

ret = hwnd del form externo
strings = WidthExt y HeighExt
+1230 y -3500  Son los dos valores que le sume y reste para ubicarlo en la posicion que yo queria no en el centro

Call SetParent(Form2.hWnd, ret)
Form2.Show
Dim TR As RECT
Call GetWindowRect(ret, TR)
WidthExt = TR.Right * 15 - TR.Left * 15
HeightExt = TR.Bottom * 15 - TR.Top * 15
Form2.Move ((WidthExt - Form2.Width) \ 2) + 1230, ((HeightExt - Form2.Height) \ 2) - 3500

Gracias nuevamente!