Autor Tema: Como hacer para que un form se mantenga siempre adelante en un MDI  (Leído 5986 veces)

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

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Hola tengo un Proyecto MDI desde el que necesito abrir un form (no hijo) y quiero que no se oculte si por error se hace clik afuera, ademas desde este form se abre otro que deberia pegarse al lado y comportarse de igual manera (ver la imagen)


Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Albertomi

  • Gigabyte
  • ****
  • Mensajes: 281
  • Reputación: +153/-0
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #1 en: Abril 02, 2013, 09:03:36 pm »
Estimado Bazooka

Este formulario quieres que quede delante de todos los formularios (OnTop) o solo delante del formulario MDI?

Saludos, desde algún lugar de Lima - Perú
Saludos, desde algún lugar de Lima-Perú

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #2 en: Abril 02, 2013, 09:32:57 pm »
Solo delante del mdi porque siempre se habre solo el que est
a a la izquierda
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #3 en: Abril 02, 2013, 10:54:08 pm »
Hola bazooka, lo que tienes que hacer es cuando llamas al form1 pasarle el padre (ojo no tiene que ver a mdi al o que me refiero)

por ejemplo dentro del form mdi

Form1.show, , ME

el ME se refiere al form mdi

en cuando a la derecha o izquierda no tengo ahora el vb, pero si no es con mdi.left + hijo.left +  hijo.width seguramente con alguna api se puede.

Saludos.




lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #4 en: Abril 08, 2013, 07:30:04 pm »
Creo que podrian fusionarse dos ejemplo con api pero no he podido hacerlo me refiero a

Siempre visible
Código: (VB) [Seleccionar]
'Constantes para pasarle a la función Api SetWindowPos - Siempre visible
Const SWP_NOMOVE = 2
Const SWP_NOSIZE = 1
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


Private Sub Form_Load()
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub


Y a este otro que mantiene el form siempre dentro del mdiForm aunque el form no sea mdiChild
Código: (vb) [Seleccionar]
Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Command1_Click()
Dim Ret As Long
    Ret = Module2.SetParent(form1.hwnd, MDIForm1.hwnd)
    form1.Show
End Sub
« última modificación: Abril 08, 2013, 07:32:03 pm por lucius »

lucius

  • Gigabyte
  • ****
  • Mensajes: 263
  • Reputación: +6/-5
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #5 en: Abril 08, 2013, 07:40:46 pm »
Leandro nose si basuka probo pero a mi me sale "Numero de argumentos erroneo o asignacion de propiedad no valida"

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #6 en: Abril 08, 2013, 07:42:39 pm »
Leandro nose si basuka probo pero a mi me sale "Numero de argumentos erroneo o asignacion de propiedad no valida"

Si el formulario esta en Mdchild=True te error !!!
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #7 en: Abril 09, 2013, 03:02:50 am »
perdón con una coma menos

Form1.show , ME 

tengo entendido que el form1 no es mdichild = true

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #8 en: Abril 09, 2013, 11:24:38 am »
No no es Mdchild  = True pero si lo fuera llamarlo asi Form1.show , ME   Da error!! a eso me referia
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Como hacer para que un form se mantenga siempre adelante en un MDI
« Respuesta #9 en: Abril 09, 2013, 03:18:23 pm »
Bien, ahora entiendo lo estas llamando desde el form(Editor de carton) entones hace esto

dentro del form (Editor de carton) pone este codigo

Código: (vb) [Seleccionar]
Option Explicit
Private Declare Function ClientToScreen Lib "user32.dll" (ByVal hwnd As Long, ByRef lpPoint As POINTAPI) As Long
Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type


Private Sub Command1_Click()
    Dim tRECT As RECT
    Dim PT As POINTAPI
    ClientToScreen Me.hwnd, PT
    GetWindowRect Me.hwnd, tRECT
    Form1.Move (tRECT.Left + (tRECT.Right - tRECT.Left)) * Screen.TwipsPerPixelX, (PT.y - (PT.y - tRECT.Top)) * Screen.TwipsPerPixelY
    Form1.Show , MDIForm1
End Sub

cambia el nombre command1 por el nombre de tu boton.
Saludos.