Autor Tema: Posición de un formulario  (Leído 1291 veces)

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

pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Posición de un formulario
« en: Agosto 27, 2015, 08:35:53 pm »
Buenas y santas para todos! tengo un inconveniente que supongo es una cosa básica, pero me está dando dolor de cabeza. Tengo un usercontrol en un form hijo (está dentro de un mdi y maximizado ambos), hago click en dicho usercontrol y llamo a otro form (no child), al cual le digo que se ubique debajo del usercontrol, es decir, le paso los siguientes parámetros:
Código: (VB) [Seleccionar]
formu.top=usercontrol.top + usercontrol.height
formu.left=usercontrol.left
y el problema está en que dicho formulario se ubica mucho mas arriba del user control y mucho mas a la izquierda.

Alguien sabe??? debería usar apis para obtener las coordenadas de la pantalla directamente???
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Posición de un formulario
« Respuesta #1 en: Agosto 27, 2015, 09:54:55 pm »
Estimado pedroesca:

  Prueba con este usercontrol: http://leandroascierto.com/foro/index.php?topic=2494.msg13400#msg13400

hace el efecto que quieres dar sin tanto jaleo por la posicion, pero usa el usercontrol dentro de tu proyecto, no uses el OCX.

Saludos Cordiales

_____________________________
Sé un poco de todo y mucho de nada... ;)

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Posición de un formulario
« Respuesta #2 en: Agosto 28, 2015, 09:39:19 am »
Hola yo con este codigo hago para centrar cualquier form o un picture y darle la posicion donde tiene que quedar con el xTop

Código: (VB) [Seleccionar]
Private Sub Form_Load()
   
    Call CENTRAR_VENTANAS(Me, 10000, 5000, -1500)

End Sub

En un Modulo

Código: (VB) [Seleccionar]
Public Sub CENTRAR_VENTANAS(frm As Form, Width As Long, Heigth As Long, xTop As Long)
   
    frm.Width = Width
    frm.Height = Heigth
   
    isq = (MDIForm1.Width - frm.Width) / 2
    If isq < 0 Then isq = 0
        arr = (MDIForm1.Height - frm.Height) / 2
    If arr < 0 Then arr = 0
   
    frm.Left = isq - 150
    frm.Top = arr - xTop
   
End Sub
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +150/-8
    • Ver Perfil
Re:Posición de un formulario
« Respuesta #3 en: Agosto 28, 2015, 07:37:57 pm »
Hola Pedro el motivo por el cual te lo pone mas arriva es porque tenes que tener en cuenta el borde del mdi, cuando vos consultas el formu.top te devuelve = 0 ya que en su ventana padre(mdi) esta en 0 despues el usercontrol tiene un valor en base a su padre ahora el nuevo formulario a mostrar se rige en vase a la pantalla en general poreso te aparece mas arriva, no se si me explico, bien ahora como se resuelve esto, sumar el borde del mdi no siempre es la solucion menos haciendo a ojo porque segun la configuracion local hay cambios despues puede haber o no un menu y si mostrars una barra de herramienta tambien varia el resultado

asi que resumiendo yo utlizaria el api GetWindowRect  y le pondria una propiedad hwnd al usercontrol y te ahoras muchos dolores de cabeza esa te tira la posta de la posición del usercontrol con respecto a la pantalla.

PD no tengo el visual, espero no confundirme.


pedroesca

  • Megabyte
  • ***
  • Mensajes: 206
  • Reputación: +19/-0
  • "El conocimiento es libre"
    • Ver Perfil
Re:Posición de un formulario
« Respuesta #4 en: Agosto 31, 2015, 08:11:23 am »
Hola a todos! gracias por las sugerencia, pero Leandro tiene razón, implementé tal cual como lo dice:
en el usercontrol le agregué la propiedad "hwnd" y la rutina para ubicar el form es la siguiente
Código: (VB) [Seleccionar]
Public Sub UbicarFORM(ByVal hWndRelativeTo As Long, ByVal X As Long, ByVal y As Long)
    Dim rc As RECT, rcBt As RECT
    If m_fbt_hWnd > 0 Then Exit Sub
    With Me
         m_hWndRelativeTo = hWndRelativeTo
         m_fbt_hWnd = .hWnd
         GetWindowRect hWndRelativeTo, rc
         GetWindowRect m_fbt_hWnd, rcBt
         
         If (rc.Left * Screen.TwipsPerPixelX) + X + 45 > Screen.Width Then
            X = X - (((rc.Left * Screen.TwipsPerPixelX) + X + 45) - Screen.Width)
         End If
         
         If (rc.Top * Screen.TwipsPerPixelY) + y + .Height + 45 > Screen.Height Then
            y = y - (((rc.Top * Screen.TwipsPerPixelY) + y + .Height + 45) - Screen.Height)
         End If
         
         .Move (rc.Left * Screen.TwipsPerPixelX) + X, (rc.Top * Screen.TwipsPerPixelY) + y
         
         SetWindowPos .hWnd, HWND_TOPMOST, core_HOME.UcSCaption.Left, 0, 0, 0, _
                      SWP_NOACTIVATE Or _
                      SWP_NOMOVE Or _
                      SWP_NOSIZE Or _
                      SWP_SHOWWINDOW Or _
                      SWP_NOOWNERZORDER
   
    End With
End Sub
----
'LA LLAMO ASÍ
ubicarFORM UC.hWnd, UC.Width - UC.Width, UC.Height
"Si yo tengo una idea, tú otra, y la compartimos, ambos tendremos DOS ideas"