home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / Smart_Popu1764136302004.psc / frmBalloon.frm < prev    next >
Text File  |  2004-06-28  |  10KB  |  312 lines

  1. VERSION 5.00
  2. Begin VB.Form frmBalloon 
  3.    AutoRedraw      =   -1  'True
  4.    BackColor       =   &H00E1FFFF&
  5.    BorderStyle     =   0  'None
  6.    ClientHeight    =   1830
  7.    ClientLeft      =   0
  8.    ClientTop       =   0
  9.    ClientWidth     =   4815
  10.    ControlBox      =   0   'False
  11.    ForeColor       =   &H80000017&
  12.    Icon            =   "frmBalloon.frx":0000
  13.    LinkTopic       =   "Form1"
  14.    MaxButton       =   0   'False
  15.    MinButton       =   0   'False
  16.    ScaleHeight     =   122
  17.    ScaleMode       =   3  'Pixel
  18.    ScaleWidth      =   321
  19.    ShowInTaskbar   =   0   'False
  20.    Begin VB.Timer timAutoClose 
  21.       Enabled         =   0   'False
  22.       Left            =   3960
  23.       Top             =   1200
  24.    End
  25.    Begin VB.Image imgIconXP 
  26.       Height          =   240
  27.       Index           =   2
  28.       Left            =   720
  29.       Picture         =   "frmBalloon.frx":000C
  30.       Top             =   1320
  31.       Visible         =   0   'False
  32.       Width           =   240
  33.    End
  34.    Begin VB.Image imgIconXP 
  35.       Height          =   240
  36.       Index           =   1
  37.       Left            =   480
  38.       Picture         =   "frmBalloon.frx":0596
  39.       Top             =   1320
  40.       Visible         =   0   'False
  41.       Width           =   240
  42.    End
  43.    Begin VB.Image imgIconXP 
  44.       Height          =   240
  45.       Index           =   0
  46.       Left            =   240
  47.       Picture         =   "frmBalloon.frx":0B20
  48.       Top             =   1320
  49.       Visible         =   0   'False
  50.       Width           =   240
  51.    End
  52.    Begin VB.Image imgDisplayIcon 
  53.       Height          =   240
  54.       Left            =   120
  55.       Stretch         =   -1  'True
  56.       Top             =   120
  57.       Width           =   240
  58.    End
  59.    Begin VB.Label lblTitle 
  60.       AutoSize        =   -1  'True
  61.       BackColor       =   &H80000018&
  62.       BackStyle       =   0  'Transparent
  63.       Caption         =   "<Title>"
  64.       BeginProperty Font 
  65.          Name            =   "Tahoma"
  66.          Size            =   8.25
  67.          Charset         =   0
  68.          Weight          =   700
  69.          Underline       =   0   'False
  70.          Italic          =   0   'False
  71.          Strikethrough   =   0   'False
  72.       EndProperty
  73.       ForeColor       =   &H80000017&
  74.       Height          =   195
  75.       Left            =   480
  76.       TabIndex        =   1
  77.       Top             =   120
  78.       Width           =   645
  79.    End
  80.    Begin VB.Label lblText 
  81.       AutoSize        =   -1  'True
  82.       BackColor       =   &H80000018&
  83.       BackStyle       =   0  'Transparent
  84.       Caption         =   "<Caption>"
  85.       BeginProperty Font 
  86.          Name            =   "Tahoma"
  87.          Size            =   8.25
  88.          Charset         =   0
  89.          Weight          =   400
  90.          Underline       =   0   'False
  91.          Italic          =   0   'False
  92.          Strikethrough   =   0   'False
  93.       EndProperty
  94.       ForeColor       =   &H80000017&
  95.       Height          =   195
  96.       Left            =   120
  97.       TabIndex        =   0
  98.       Top             =   480
  99.       Width           =   795
  100.    End
  101. End
  102. Attribute VB_Name = "frmBalloon"
  103. Attribute VB_GlobalNameSpace = False
  104. Attribute VB_Creatable = False
  105. Attribute VB_PredeclaredId = True
  106. Attribute VB_Exposed = False
  107. 'I trimmed off and rewrote almost all of this code.
  108. 'But my original inspiration goes to Robert Morris
  109. 'for his PopUp Balloons example. You can find it on planet source code
  110. 'by searching for "Popup Balloons (2k/XP-style)"
  111. '
  112. 'Basically this determines the size and position of the form based on
  113. 'the text, and then turns the form into a rounded rectangle with a
  114. 'Balloon tip point (Yes I wrote that myself)
  115. 'Balloon tip position is based on where on the screen it will be displayed
  116. '
  117. 'Sorry this is all the comments, they distract me when I'm programming.
  118.  
  119. Option Explicit
  120.  
  121. Private Type POINTAPI
  122.     X As Long
  123.     Y As Long
  124. End Type
  125.  
  126. Private Type PointType
  127.     Point1 As POINTAPI
  128.     Point2 As POINTAPI
  129.     Point3 As POINTAPI
  130. End Type
  131.  
  132. Private Type LOGBRUSH
  133.         lbStyle As Long
  134.         lbColor As Long
  135.         lbHatch As Long
  136. End Type
  137.  
  138. Private Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
  139. Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As PointType, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
  140. Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
  141. Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
  142. Private Declare Function FrameRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
  143. 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
  144. Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
  145.  
  146. Private Const HWND_TOP = 0
  147. Private Const SWP_NOACTIVATE = &H10
  148. Private Const SWP_SHOWWINDOW = &H40
  149.    
  150. Private bBottom As Boolean
  151. Private bLeft As Boolean
  152.  
  153.  
  154. Friend Sub ShowBalloon(sTitle As String, sText As String, X As Long, Y As Long, Optional IStyle As IconStyle, _
  155.                        Optional iAutoCloseAfter As Integer = 0)
  156.  
  157.     Dim lHeight&, lWidth&, lTop&, lLeft&
  158.     
  159.     Me.BackColor = vbInfoBackground
  160.     lblTitle.ForeColor = vbInfoText
  161.     lblText.ForeColor = vbInfoText
  162.     
  163.     lblTitle.Caption = sTitle
  164.     lblText.Caption = sText
  165.     
  166.     If lblText.Width + 20 > ScaleX(Screen.Width / 2, vbTwips, vbPixels) Then
  167.         lblText.WordWrap = True
  168.         lblText.Width = ScaleX(Screen.Width / 2, vbTwips, vbPixels) - 20
  169.     End If
  170.     
  171.     If (lblTitle.Width + 20) > lblText.Width Then
  172.         lWidth = 40 + lblTitle.Width
  173.     Else
  174.         lWidth = 20 + lblText.Width
  175.     End If
  176.     lHeight = 45 + lblText.Height
  177.  
  178.     Select Case IStyle
  179.         Case ISTYLE_INFO: imgDisplayIcon.Picture = imgIconXP(0).Picture
  180.         Case ISTYLE_ERROR: imgDisplayIcon.Picture = imgIconXP(1).Picture
  181.         Case ISTYLE_WARNING: imgDisplayIcon.Picture = imgIconXP(2).Picture
  182.         Case Else
  183.             Me.imgDisplayIcon.Visible = False
  184.             Me.lblTitle.Left = imgDisplayIcon.Left
  185.     End Select
  186.         
  187.     lHeight = lHeight + 20
  188.     
  189.     If (Y - lHeight) > 0 Then
  190.         bBottom = True
  191.         lTop = Y - lHeight
  192.     Else
  193.         bBottom = False
  194.         imgDisplayIcon.Top = 28
  195.         lblTitle.Top = 28
  196.         lblText.Top = 52
  197.         lTop = Y
  198.     End If
  199.     If (X + lWidth) < ScaleX(Screen.Width, vbTwips, vbPixels) Then
  200.         bLeft = True
  201.         If X > 15 Then
  202.             lLeft = X - 15
  203.         Else
  204.             lLeft = 0
  205.         End If
  206.     Else
  207.         bLeft = False
  208.         If X < (ScaleX(Screen.Width, vbTwips, vbPixels) - 15) Then
  209.             lLeft = X - lWidth + 15
  210.         Else
  211.             lLeft = ScaleX(Screen.Width, vbTwips, vbPixels) - lWidth
  212.         End If
  213.     End If
  214.     
  215.     If iAutoCloseAfter = 0 Then
  216.         Me.timAutoClose.Enabled = False
  217.     Else
  218.         Me.timAutoClose.Interval = iAutoCloseAfter
  219.         Me.timAutoClose.Enabled = True
  220.     End If
  221.     
  222.     SetWindowPos Me.hwnd, HWND_TOP, lLeft, lTop, lWidth, lHeight, SWP_NOACTIVATE + SWP_SHOWWINDOW
  223.     DrawForm X, Y
  224. End Sub
  225.  
  226. Private Sub DrawForm(X, Y)
  227.  
  228.     Dim X1&, Y1&, X2&, Y2&
  229.     Dim rgn1&, rgn2&
  230.     Dim lBrush&, LB As LOGBRUSH
  231.     Dim Poly As PointType
  232.     
  233.     With Me
  234.         .Cls
  235.         
  236.         X1 = .ScaleLeft
  237.         X2 = .ScaleWidth
  238.         If bBottom = True Then
  239.             Y1 = .ScaleTop
  240.             Y2 = .ScaleHeight - 20
  241.         Else
  242.             Y1 = .ScaleTop + 20
  243.             Y2 = .ScaleHeight
  244.         End If
  245.     End With
  246.  
  247.     With Poly
  248.         If bLeft Then
  249.             .Point1.X = X1 + 15
  250.             If X < 15 Then
  251.                 .Point2.X = ScaleX(X)
  252.             Else
  253.                 .Point2.X = .Point1.X
  254.             End If
  255.             .Point3.X = .Point1.X + 19
  256.         Else
  257.             .Point1.X = X2 - 15
  258.             If X > (ScaleX(Screen.Width, vbTwips, vbPixels) - 15) Then
  259.                 .Point2.X = Me.ScaleLeft + Me.ScaleWidth
  260.             Else
  261.                 .Point2.X = .Point1.X
  262.             End If
  263.             .Point3.X = .Point1.X - 19
  264.         End If
  265.         
  266.         If bBottom = True Then
  267.             .Point1.Y = Y2 - 1
  268.             .Point2.Y = .Point1.Y + 19
  269.             .Point3.Y = .Point1.Y
  270.         Else
  271.             .Point1.Y = Y1 + 1
  272.             .Point2.Y = .Point1.Y - 19
  273.             .Point3.Y = .Point1.Y
  274.         End If
  275.     End With
  276.     
  277.     With LB
  278.         .lbColor = 0
  279.         .lbHatch = 0
  280.         .lbStyle = 0
  281.     End With
  282.     
  283.     rgn1 = CreateRoundRectRgn(X1&, Y1&, X2&, Y2&, 15, 15)
  284.     rgn2 = CreatePolygonRgn(Poly, 3, 2)
  285.     CombineRgn rgn1, rgn1, rgn2, 2
  286.     lBrush = CreateBrushIndirect(LB)
  287.     FrameRgn Me.hdc, rgn1, lBrush, 1, 1
  288.     SetWindowRgn Me.hwnd, rgn1, True
  289. End Sub
  290.  
  291. Friend Sub HideBalloon()
  292.     Unload Me
  293. End Sub
  294.  
  295. Private Sub timAutoClose_Timer()
  296.     HideBalloon
  297. End Sub
  298.  
  299. Private Sub Form_Click()
  300.     HideBalloon
  301. End Sub
  302. Private Sub imgDisplayIcon_Click()
  303.     HideBalloon
  304. End Sub
  305. Private Sub lblText_Click()
  306.     HideBalloon
  307. End Sub
  308. Private Sub lblTitle_Click()
  309.     HideBalloon
  310. End Sub
  311.  
  312.