Autor Tema: Incrustar form minimizado dentro de StatusBar - vb6  (Leído 4553 veces)

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

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Incrustar form minimizado dentro de StatusBar - vb6
« en: Julio 15, 2011, 07:08:42 pm »
Como puedo colocar un formulario sea un form normal o un MDIchild en el StatusBar por que normalmente quedan flotando en la esquina inferior izquierda y no dentro del statusbar, ademas me gustaria algo como el estilo de windows 7, tengo en true la propiedad showintaskbar.

Nunca me habia percatado de algo asi pero me estan pidiendo eso y yo ando por las nubes.


Solo encontre este ejemplo pero no logro correrlo con los MDI aparte de estar incrustandose un control mas no un form.
http://www.recursosvisualbasic.com.ar/htm/listado-api/92-setparent-incrustar-progressbar-statusbar.htm

Edito por que creo que no me explique muy bien
« última modificación: Julio 15, 2011, 08:18:04 pm por fx700 »

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Incrustar form en barra de tareas - vb6
« Respuesta #1 en: Julio 15, 2011, 07:40:35 pm »
Hola si tienes la propiedad ShowInTakbar= True y te pasa eso creo que una vez lidie con ese asunto y es por que al Formulario lo abría desde el procedimiento SubMain () , si en tu caso lo haces asi intenta cambiar desde el inicio del proyecto al form en custion y chequea!

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

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:Incrustar form minimizado dentro de StatusBar - vb6
« Respuesta #2 en: Julio 16, 2011, 11:03:30 pm »
Con este codigo el nombre y el icono del form quedan en el statusbar, pero el objeto form sigue siendo hijo del MDIForm, ojala te sirva  ;)

En el formulario MDI pone este codigo

Código: (vb6) [Seleccionar]
Option Explicit

Private Sub MDIForm_Load()

With StatusBar1
     .Panels.Clear

     .Panels.Add 1, , "Panel 1"
     .Panels.Add 2, , "Panel 2"
     
End With

End Sub

Private Sub StatusBar1_PanelClick(ByVal panel As ComctlLib.panel)
Dim i As Long

If Len(panel.Tag) > 0 Then

   For i = 0 To Forms.Count - 1
   
       If Forms(i).Name = panel.Tag Then
          Forms(i).WindowState = vbNormal
          Forms(i).Visible = True
          StatusBar1.Panels.Remove panel.Index
          Exit For
       End If
       
   Next
   
End If

End Sub

Y en el formulario MDIChild pone este codigo

Código: (vb6) [Seleccionar]
Option Explicit

Private Sub Form_Resize()

If Me.WindowState = vbMinimized Then

   Dim sbPanel As ComctlLib.panel
   
   Me.Visible = False
   
   With MDIForm1.StatusBar1.Panels
   
        Set sbPanel = .Add(.Count + 1, , Me.Caption, , Me.Icon)
       
        With sbPanel
             .Tag = Me.Name
             .ToolTipText = "Formulario incrustado"
        End With
       
   End With
   
End If

End Sub

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Re:Incrustar form minimizado dentro de StatusBar - vb6
« Respuesta #3 en: Julio 17, 2011, 04:18:12 pm »
Hola lolabyte funciona muy bien tu idea, lo unico es que si se habre x veces el mismo form se generan x paneles, aunque espero solucionar eso de alguna forma, saludos

Lolabyte

  • Bytes
  • *
  • Mensajes: 35
  • Reputación: +15/-0
    • Ver Perfil
Re:Incrustar form minimizado dentro de StatusBar - vb6
« Respuesta #4 en: Julio 17, 2011, 07:46:12 pm »
Hay nuevas actualizaciones disponibles, descargue ya!  :P

En el MDIForm

Código: (vb6) [Seleccionar]
Option Explicit

Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Declare Function TrackPopupMenuEx Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal hWnd As Long, ByVal lptpm As Any) As Long
Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ExtractIconEx Lib "shell32.dll" Alias "ExtractIconExA" (ByVal lpszFile As String, ByVal nIconIndex As Long, phiconLarge As Long, phiconSmall As Long, ByVal nIcons As Long) As Long
Private Declare Function DestroyIcon Lib "user32" (ByVal hIcon As Long) As Long

Private Type POINTAPI
    x As Long
    y As Long
End Type

Const MF_CHECKED = &H8&
Const MF_APPEND = &H100&
Const TPM_LEFTALIGN = &H0&
Const MF_DISABLED = &H2&
Const MF_GRAYED = &H1&
Const MF_SEPARATOR = &H800&
Const MF_STRING = &H0&
Const TPM_RETURNCMD = &H100&
Const TPM_RIGHTBUTTON = &H2&

Private Sub MDIForm_Load()

With StatusBar1
     .Panels.Clear

     .Panels.Add 1, , "Panel 1"
     .Panels.Add 2, , "Panel 2"
     
End With

Dim f As Form

Form1.Caption = "Form1 original"

Set f = New Form1
f.Caption = "Form1 copia 2"
f.Show

Set f = New Form1
f.Caption = "Form1 copia 3"
f.Show

End Sub

Private Sub StatusBar1_PanelClick(ByVal panel As ComctlLib.panel)
Dim i As Long, j As Long, bRemove As Boolean, v
Dim lRet As Long
Dim hMenu As Long, pt As POINTAPI

If Len(panel.Tag) > 0 Then

   v = Split(panel.Tag, ";")
   
   hMenu = CreatePopupMenu()

   For i = 1 To UBound(v) - 1 Step 2
   
        AppendMenu hMenu, MF_STRING, v(i + 0), CStr(v(i + 1))
       
   Next
     
   GetCursorPos pt
   lRet = TrackPopupMenuEx(hMenu, TPM_LEFTALIGN Or TPM_RETURNCMD Or TPM_RIGHTBUTTON, pt.x, pt.y, Me.hWnd, ByVal 0&)
   
   DestroyMenu hMenu

   If lRet > 0 Then
   
      For i = 0 To Forms.Count - 1
   
          If Forms(i).hWnd = lRet Then
             Forms(i).WindowState = vbNormal
             Forms(i).Visible = True
             
             panel.Tag = v(0) & ";"
             bRemove = True
             
             For j = 1 To UBound(v) - 1 Step 2
             
                 If lRet <> v(j + 0) Then
                 
                    panel.Tag = panel.Tag & v(j + 0) & ";" & v(j + 1) & ";"
                    bRemove = False
                   
                 End If
                 
             Next
             
             If bRemove Then
                StatusBar1.Panels.Remove panel.Index
             End If

             Exit For
             
          End If
       
      Next
   
   End If
   
End If

End Sub

Y en el MDIChild esto

Código: (vb6) [Seleccionar]
Option Explicit

Private Sub Form_Resize()
Dim i As Long, bFound As Boolean, v

If Me.WindowState = vbMinimized Then

   Dim sbPanel As ComctlLib.panel
   
   Me.Visible = False
   
   With MDIForm1.StatusBar1.Panels
   
        bFound = False
       
        For i = 1 To .Count
       
            v = Split(.Item(i).Tag, ";")
       
            If UBound(v) <> -1 Then
               If v(0) = Me.Name Then
                  bFound = True
                  Exit For
               End If
            End If
           
        Next
       
        If bFound Then
       
           Set sbPanel = .Item(i)
           
           sbPanel.Tag = sbPanel.Tag & Me.hWnd & ";" & Me.Caption & ";"
           
        Else
       
           Set sbPanel = .Add(.Count + 1, , Me.Name, , Me.Icon)
       
           With sbPanel
                .Tag = Me.Name & ";" & Me.hWnd & ";" & Me.Caption & ";"
                .ToolTipText = "Formulario incrustado"
           End With
       
        End If
       
   End With
   
End If

End Sub

Ahora aparece un menu con los nombres de los formularios del mismo tipo  ;D

fx700

  • Kilobyte
  • **
  • Mensajes: 95
  • Reputación: +4/-2
    • Ver Perfil
Re:Incrustar form minimizado dentro de StatusBar - vb6
« Respuesta #5 en: Julio 17, 2011, 09:25:26 pm »
Por fin! salio la version 2.0, la estaba esperando :P, esta bueno lo del menu.

En la consulta anterior me referia a que si hago por ejemplo 5 veces Form1.show entonces se creaban 5 paneles aunque realmente solo existe un Form1 y eso era lo que queria evitar, osea hacer equiz veces Form1.show y siempre permanesta 1 solo panel correspondiente al form1.

Repito, excelente lo del menu lo podria utilizar cuando ya no quede espacio para colocar mas paneles, me refiero al ancho de pantalla y evitar scroll's.
« última modificación: Julio 17, 2011, 09:32:52 pm por fx700 »