Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Cromatico en 22 Noviembre 2010, 19:34 pm



Título: [Solucionado] Ayuda setparent y ubicacion
Publicado por: Cromatico en 22 Noviembre 2010, 19:34 pm
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!!


Título: Re: Ayuda setparent y ubicacion
Publicado por: BlackZeroX en 22 Noviembre 2010, 20:28 pm
GetParent()

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

Dulce Infierno Lunar!¡.


Título: Re: Ayuda setparent y ubicacion
Publicado por: Cromatico en 22 Noviembre 2010, 22:18 pm
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!!


Título: Re: Ayuda setparent y ubicacion
Publicado por: Dessa en 22 Noviembre 2010, 23:57 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)

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







Título: Re: Ayuda setparent y ubicacion
Publicado por: Cromatico en 23 Noviembre 2010, 02:18 am
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!!!


Título: Re: [Solucionado] Ayuda setparent y ubicacion
Publicado por: Dessa en 23 Noviembre 2010, 02:59 am
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


Título: Re: [Solucionado] Ayuda setparent y ubicacion
Publicado por: Cromatico en 23 Noviembre 2010, 04:20 am
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!