pcworld online logo

BALON YARDIM ÖRNEĞİ

Önceki sayılarımızdan birinde balon yardım oluşturmayı teorik olarak anlatmış kod vermeden sadece fikir vermiştik. Bir kaç arkadaşımız balon yardım oluşturmak için gerekli olan kodları ısrarla istediler. Biz de sizi kırmıyor ve örnek programı yayınlıyoruz. Programı oluşturmak için öncelikle iki ayrı form oluşturun. Oluşturacağınız ikinci form balon yardımı oluşturacak, bu formun işlevini yerine getirebilmesi için Border Style özelliğini None yapın. 1. form'a, şekilde görüldüğü gibi kontrolleri yerleştirin ve her bir komut butonuna CMD ismini vererek bir Control Array oluşturun. Formlardan bir BAS modülüne aşağıdaki satırları girin.
Type POINTAPI
        X As Long
        Y As Long
End Type

Public Const SW_SHOWNOACTIVATE = 4
Public Const GW_CHILD = 5
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Declare Function GetActiveWindow Lib "user32" () As Long
Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long,
ByVal yPoint As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long,
ByVal nCmdShow As Long) As Long

FORM 1'İN KODLARI:

General - Declarations
Private Sub DisplayHelp(Help$)
Dim lpPoint As POINTAPI
Dim ret As Integer

If Len(Help$) > 0 Then
frmHelp.Hide
frmHelp.Label1.Caption = Help$ '& "  "
Call GetCursorPos(lpPoint)
frmHelp.Top = (lpPoint.y + 18) * Screen.TwipsPerPixelY
frmHelp.Left = (lpPoint.x - 2) * Screen.TwipsPerPixelY
frmHelp.Width = frmHelp.Label1.Width + (12 * Screen.TwipsPerPixelX)
frmHelp.Height = frmHelp.Label1.Height + (6 * Screen.TwipsPerPixelY)
frmHelp.ZOrder
ret = ShowWindow(frmHelp.hwnd, SW_SHOWNOACTIVATE)

Else
frmHelp.Hide
End If
End Sub

Private Sub Form_Load()
Me.Move (Screen.Width - Me.Width) \ 2, (Screen.Height - Me.Height) \ 2
Timer1.Interval = 500
Timer1.Enabled = True
List1.AddItem "Item 1"
List1.AddItem "Item 2"
List1.AddItem "Item 3"
End Sub

Private Sub Timer1_Timer()
Dim curhWnd As Integer
Dim p As POINTAPI
Static LasthWnd As Integer 

If GetActiveWindow() = Form1.hwnd Then  ' Form'un aktif olduğundan emin ol
Call GetCursorPos(p)    ' İmlecin yerini belirle

' Fare imleci hangi kontrol üzerinde?
curhWnd = WindowFromPoint(p.X, p.Y)

' Aynı kontrol mü?
' Eğer aynı kontrol ise tekrar baloncuğu çizme.

If curhWnd <> LasthWnd Then
LasthWnd = curhWnd   ' Şimdiki HWnd değerini aklında tut.
Timer1.Interval = 1  ' Kontrol etme aralığını düşür
Select Case curhWnd
Case cmd(0).hwnd: DisplayHelp (cmd(0).Tag)
Case cmd(1).hwnd: DisplayHelp (cmd(1).Tag)
Case cmd(2).hwnd: DisplayHelp (cmd(2).Tag)
Case cmd(3).hwnd: DisplayHelp (cmd(3).Tag)
Case List1.hwnd:  DisplayHelp (List1.Tag)
Case Text1.hwnd:  DisplayHelp (Text1.Tag)

'Eğer fare imleci kontrolün dışına çıkarsa form2'yi gizle
Case frmhelp.hwnd
frmhelp.Hide
Case Else:
DisplayHelp ""
Timer1.Interval = 1000
End Select
End If
End If
End Sub

FORM 2'NİN KODLARI
Private Sub Form_Load()
Me.Caption = ""
Me.BackColor = &HFFFF&
Label1.Left = 4 * Screen.TwipsPerPixelX
Label1.Top = 20
Tüm kodları girdikten sonra her kontrolü seçerek TAG özelliğine gidin ve görülmesini istediğiniz açıklamayı yazın. Projenizi çalıştırın ve Timer 1'in Interval aralığına göre kontrollerin balon yardımlarını gösteren uygulamanıza bakın. İşte bu kadar.