Autor Tema: Sobre BorderStyle en tiempo de ejecucion  (Leído 2895 veces)

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

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Sobre BorderStyle en tiempo de ejecucion
« en: Junio 22, 2011, 02:02:38 pm »
Tengo un Datareport que tiene el BorderStyle en 0 desde las propiedades. Resulta que voy a usar ese mismo reporte pero ahora necesito mostrarlo con BorderStyle 1, en tiempo de ejecución, pero me sale el error (sin llegar siquiera a la linea MiReporte.BorderStyle = 1):

"La función de interfaz esta marcada como restringida, o la función usa un tipo de Automatizacion no admitido en Visual Basic" y googleando no encontré respuesta para entender y resolver esto.

Probe con un formulario que tiene el borderstyle en 1 y en tiempo de ejecución le mande
Form1.BorderStyle = 0
y no paso nada, no cambio nada.

Gracias

Detalle de requerimiento: Mi Datareport esta sin borde y lo pongo dentro de un picture con setparent. Necesito mostrar ese mismo reporte pero en otro modulo sin usar setparent asi que solo hago MiReporte.Show y al no tener controles ni nada no tengo manera de cerrarlo o manipularlo debidamente. Por eso pense en resolverlo volviendo a poner el BorderStyle a 1 o 2 para que pueda cerrar, minimizar, etc, pero me bota el error.
« última modificación: Junio 22, 2011, 07:57:30 pm por YAcosta »
Me encuentras en YAcosta.com

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Sobre BorderStyle en tiempo de ejecucion
« Respuesta #1 en: Junio 22, 2011, 08:07:23 pm »
que yo sepa la propiedad BorderStyle es solo ReadOnly en tiempo de ejecucion...para cambiarla tenes que usar apis como  SetWindowLong y demas...en internet podes verlo.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Sobre BorderStyle en tiempo de ejecucion
« Respuesta #2 en: Junio 22, 2011, 08:12:28 pm »
SetWindowLong  chevere, era todo lo que necesitaba para buscar resolverlo, gracias.
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Sobre BorderStyle en tiempo de ejecucion
« Respuesta #3 en: Junio 22, 2011, 08:30:13 pm »
Hola me temo que SetWindowLong  no funciona, si bien le pone todos los bordes y los box no funciona la cruz de cerrar X, si no me equivoco el data report funciona distinto a otras ventanas ya que el mismo reporte es un child de otra ventana y al setearle bordestyle = 0 este no crea la ventana padre,entonces creo que la solución mas pronta seria hacer un formulario vacio y haces un set parent a este formulario.

Prueva de ello
Código: [Seleccionar]
Option Explicit

Private Const WS_OVERLAPPED As Long = &H0&
Private Const WS_CAPTION As Long = &HC00000
Private Const WS_BORDER As Long = &H800000
Private Const WS_SYSMENU As Long = &H80000
Private Const WS_THICKFRAME As Long = &H40000
Private Const WS_MINIMIZEBOX As Long = &H20000
Private Const WS_MAXIMIZEBOX As Long = &H10000
Private Const WS_CLIPSIBLINGS As Long = &H4000000
Private Const WS_VISIBLE As Long = &H10000000

Private Const WS_OVERLAPPEDWINDOW As Long = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Private Const WS_TILEDWINDOW As Long = WS_OVERLAPPEDWINDOW
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const WS_EX_WINDOWEDGE As Long = &H100&

Private Const GWL_EXSTYLE As Long = -20
Private Const GWL_STYLE As Long = -16
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Declare Function SetWindowPos Lib "user32.dll" (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 Const SWP_NOMOVE        As Long = &H2
Private Const HWND_TOPMOST      As Long = -1
Private Const SWP_NOSIZE        As Long = &H1
Private Const SWP_SHOWWINDOW    As Long = &H40
Private Const SWP_FRAMECHANGED  As Long = &H20
Private Const SWP_HIDEWINDOW As Long = &H80
Private Const SWP_NOACTIVATE As Long = &H10

Private Sub Form_Load()
    SetWindowLong DataReport1.hwnd, GWL_STYLE, GetWindowLong(DataReport1.hwnd, GWL_STYLE) Or WS_TILEDWINDOW Or WS_CLIPSIBLINGS
    SetWindowLong DataReport1.hwnd, GWL_EXSTYLE, GetWindowLong(DataReport1.hwnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW Or WS_EX_WINDOWEDGE
    SetWindowPos DataReport1.hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE Or SWP_FRAMECHANGED
    DataReport1.Show
End Sub

otra opcion quizas es sublcasificar para detectar cuando se hace clic en el cerrar, pero bueno se va complicndo la cosa.
Saludos.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Sobre BorderStyle en tiempo de ejecucion
« Respuesta #4 en: Junio 22, 2011, 08:32:36 pm »
Muchas gracias Lea, voy a probar eso ahora. 

Saludos
Me encuentras en YAcosta.com