1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình Visual Basic với các chiêu thức

46 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập Trình Visual Basic Với Các Chiêu Thức
Tác giả Lê Nguyên Dũng
Người hướng dẫn Phạm Thị Loan, Giáo Viên
Trường học Trường Trung Học Phổ Thông Đăk Nông
Chuyên ngành Công Nghệ Thông Tin
Thể loại Sách
Năm xuất bản Năm Học 2023
Thành phố Đắk Nông
Định dạng
Số trang 46
Dung lượng 465,04 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình Visual Basic với chiêu thức sẽ giới thiệu đến bạn 27 độc chiêu giúp bạn lập trình Visual Basic hiệu quả. Mong rằng thông qua quyển sách này có thể giúp ích cho bạn trong việc lập trình.

Trang 1

Tác giả : Lê Nguyên Dũng

Email của mình : le.nguyendung@gmail.com

Nick : nguyen_dung_vb Địa chỉ nhà : Thôn 1, thị trấn Đăk Mâm Huyện Krông Nô Tỉnh Đắk Nông

Tự hào ghê cái Logo của cuốn sách mình thiết kế bằng Word và Paint đấy Nhìn vô cũng

chuyên nghiệp đấy chứ

Trang 2

Lời nói đầu

Sau khi “Xuất bản” cuốn “Chiêu thức lập trình” mình quả thật rất buồn vì chẳng có lấy một lời động viên từ bất kỳ ai (Ở Đăk Nông này mình có biết ai mà khoe) còn anh em ở việt nam nét thì chẳng đoái hoài gì cả vì vậy mình đã thật sự nản, để cuối cùng sau một sự cố nghề nghiệp phiên bản Chiêu thức lập trình phiên bản 2 mình viết gần hoàn thành bỗng tan vào sương khói mình đã tuyệt vọng Nhưng mới hồi sáng khi mình “Viếng” www.caulacbovb.com một diễn đàn mình tham gia từ khá lâu nhưng không mấy quan tâm mình đã thấy cuốn sách này được chia sẽ trên đó, cùng với đó là lời khen của một nhân vật mình không nhớ tên đã làm mình rất vui, vì mình đã nhận ra mình cũng được công nhận dù chỉ một chút Cuốn Chiêu thức lập trình lần này sẽ được nâng cấp lên với nhiều chiêu thức và hình vẽ minh hoạ để giúp các bạn nâng cao kiến thức

Lời cầu cứu : Do từ năm lớp 9 đến nay mình chỉ tập trung vào học lập trình (Mà lại toàn tự học) nên hiện nay đệ đã học sút rất nhiều nguy cơ rớt đại học ngày một đến gần mà ước mơ lớn nhất của đời đệ là đậu vào khoa Công Nghệ Thông Tin Đại học Bách Khoa Hồ Chí Minh đệ mong rằng có huynh nào đã từng phải nếm trải cảnh thi đại học thì chia sẻ kinh nghiệm học, học sách

gì Còn nếu có sách vở (Cũ cũng được) không cần dùng tới nhưng tốt để ôn thi đại học thì chia

sẽ cho đệ Nếu có huynh nào có lòng “Hảo tâm” hãy gửi đến địa chỉ : (Đây là địa chỉ cô giáo dạy

Tin của trường đệ vào hết năm học này có thể thay đổi) Phạm Thị Loan giáo viên trường Trung Học Phổ Thông Đăk Nông, xin ghi rõ là nhở gửi cho em

Lê Nguyên Dũng lớp 11C1 Cuốn sách này là cuốn sách hoàn toàn miễn phí để chia sẽ trong cộng đồng lập trình nên nếu có

ai múôn sử dụng để in sách thì cũng nên ghi rõ xuất sứ

Trong sách tôi xin chỉ rõ xuất xứ, mong rằng các ban cũng sẽ tôn trong tác giả không chỉnh sửa

tác giả hay các xuất xứ Cuốn sách này đi theo định hướng là sử dụng các hàm API hoặc các lệnh đơn giản để tạo thành

những thủ thuật và hạn chế tối đa phải sử dụng các công cụ hỗ trợ

Trang 3

m có hình dạn

ụp ảnh màn hìhiệu hoá butto

o form di chuylại tất cả nhữ

y một file nhạ

oá một file ảnform của bạnxtBox chỉ “Chịform trở nên

y tên người sử

ép cả màn hìn

u dữ liệu dạngtừng hộp thoạ: Mã hoá dữ l

rên cao xuốn

ng cách lần lư

g tại một đối tư

ng theo một hìình vào một P

on close và myển từ một điểững phím gõ t

ng bất kỳ cho chương t

ền cho DesktoCD-ROM mTray cho ứngếng việt cho M

ch các thành phởi động cùng

ạc Midi

h định dạng

n ở chế độ “Luịu” nhận số trong suốt

menu của form

g với Window.bmp

uôn nổi”

Windowns

ào một Picturile bất kỳ rol Panel t

ói như vậy) chữ

m (cả Alt-F4 lu

ạn ndow ứng trong máywns

re

uôn)”

y

Trang 4

Đôc chiêu 1 : “Thả một câu từ trên cao xuống” (Có thể nói như vậy) home

Xuất xứ : www.pscode.com

Binh khí sử dụng : Một Picture và một CommandButton

Đoạn mã :

Option Explicit

Private Sub command1_Click()

Randomize Timer 'Init Rnd

Dim Looop As Integer 'Loop var

Dim TextColor(100) As ColorConstants 'Color of one letter

For Looop = 1 To Len(Message)

StartTime(Looop) = Timer 'Setting up startime for a following movement, needed for calculation of position Next Looop

Trang 5

'Looping throung the textmessage

For Looop = 1 To Len(Message)

If YPos(Looop) >= picture1.ScaleHeight - 1 Then

MovementDone(Looop) = True 'The letter reached the bottom border

The Downmovement is complete

If YPos(Looop) <= StartHeight(Looop) + 0.1 Then

MovementDone(Looop) = True 'The letter reached the max height

The upmovement is complete

picture1.ForeColor = TextColor(Looop) 'Setting the letters color

picture1.Print Mid(Message, Looop, 1) 'Text picture1put

((picture1.ScaleHeight - StartHeight(Looop)) * PowerLoss(Looop)) 'New

Startheight, because of speed lost ?!?!

Trang 6

UpMovementTime(Looop) = Sqr((picture1.ScaleHeight - StartHeight(Looop)) / (0.5 * 9.81)) 'How long will the NEXT upmovement last ???

Else

DownMovement(Looop) = True

End If

StartTime(Looop) = Timer 'Set the

StartTime of a new movement

Đoạn mã :

Module :

Public ASCC(5) As String

Public Letters() As String

Public TXT As String

Public CurLetter As Integer

Public TEXTT As String

ReDim Preserve Letters(0)

ReDim Preserve Letters(Len(TXT))

Trang 7

Private Sub Form_Load()

// neu co loi thi de 2 timer = False ->> tui ko phai tac gia

Đôc chiêu 3 : Hiện con trỏ động tại một đối tượng nào đó home

Trang 8

'Các hàm API được sử dụng

Private Declare Function SetClasslong Lib "user32" Alias

"SetClassLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal

wNewWord As Long) As Long

Private Declare Function LoadCursorFromFile Lib "user32" Alias

"LoadCursorFromFileA" (ByVal lpFileName As String) As Long

Dim NewCur as long

Dim OldCur as long

Private Sub Form_Load

'Giả sử rằng bạn đã có sẵn file Clock.ani ở ổ C:\

NewCur=LoadCursorFromFile("C:\Clock.ani")

OldCur=SetClassLong(Me.hwnd, ConTro,NewCur)

End sub

Private Sub Form_UnLoad(Cancel as Integer)

SetClassLong me.hwnd, Contro,OldCur

End Sub

- Ta rút ra được một “Công thức” : Thay vì đặt con trỏ động trong Form ta có thể thay Me.hwnd trong dòng lệnh : OldCur=SetClassLong(Me.hwnd, ConTro,NewCur) bằng đối tựợng.hwnd (Nếu đối tượng đó hổ trợ )

Đôc chiêu 4 : Form có hình dạng theo một hình ảnh bất kỳ (Tất nhiên có màu tượng trưng cho form trong suốt) home

Private Declare Function ReleaseCapture Lib "user32" () As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam

As Any) As Long

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 Const HWND_TOPMOST = -1

Private Const SWP_NOMOVE = &H2

Private Const SWP_NOSIZE = &H1

Private Const Flags = SWP_NOMOVE Or SWP_NOSIZE

'Transparency Declarations and Constants

'I copied these from Robert Gainor's Example

Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long

Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal

nCombineMode As Long) As Long

Private Declare Function OffsetRgn Lib "gdi32" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long

Trang 9

Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private Declare Function DeleteDC Lib "gdi32" (ByVal hDC As Long) As Long

Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long

Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal

X As Long, ByVal Y As Long) As Long

Private Const RGN_AND = 1

Private Const RGN_OR = 2

Private Const RGN_XOR = 3

Private Const RGN_DIFF = 4

Private Const RGN_COPY = 5

'FormMove and FormOnTop Subs

Private Sub FormOnTop(Frm As Form)

Call SetWindowPos(Frm.hwnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, Flags)

Private Sub CenterForm(Frm As Form)

Frm.Left = Screen.Width / 2 - Frm.Width / 2

Frm.Top = Screen.Height / 2 - Frm.Height / 2

End Sub

'Transparency Function

'I copied this from Robert Gainor's Example

Private Function MakeTransparent(ByRef Frm As Form, ByVal

TransparentColor As Long) As Long

Dim rgnMain As Long, rgnPixel As Long, bmpMain As Long, dcMain As Long Dim Width As Long, Height As Long, X As Long, Y As Long

Dim ScaleSize As Long, RGBColor As Long

ScaleSize& = Frm.ScaleMode

Frm.ScaleMode = 3

Frm.BorderStyle = 0

Width& = Frm.ScaleX(Frm.Picture.Width, vbHimetric, vbPixels)

Height& = Frm.ScaleY(Frm.Picture.Height, vbHimetric, vbPixels)

Frm.Width = Width& * Screen.TwipsPerPixelX

Frm.Height = Height& * Screen.TwipsPerPixelY

rgnMain& = CreateRectRgn(0&, 0&, Width&, Height&)

dcMain& = CreateCompatibleDC(Frm.hDC)

bmpMain& = SelectObject(dcMain&, Frm.Picture.Handle)

For Y& = 0& To Height&

For X& = 0& To Width&

RGBColor& = GetPixel(dcMain&, X&, Y&)

If RGBColor& = TransparentColor& Then

rgnPixel& = CreateRectRgn(X&, Y&, X& + 1&, Y& + 1&)

CombineRgn rgnMain&, rgnMain&, rgnPixel&, RGN_XOR

DeleteObject rgnPixel&

Trang 10

If rgnMain& <> 0& Then

SetWindowRgn Frm.hwnd, rgnMain&, True

Private Sub Command1_Click()

Dim wScreen As Long

Dim hScreen As Long

Dim w As Long

Dim h As Long

Picture1.Cls

wScreen = Screen.Width \ Screen.TwipsPerPixelX

hScreen = Screen.Height \ Screen.TwipsPerPixelY

Picture1.ScaleMode = vbPixels

w = Picture1.ScaleWidth

h = Picture1.ScaleHeight

Trang 11

Private Const MF_BYPOSITION = &H400&

Private ReadyToClose As Boolean

Private Sub RemoveMenus(frm As Form, _

Dim hMenu As Long

hMenu = GetSystemMenu(hwnd, False)

If remove_close Then DeleteMenu hMenu, 6, MF_BYPOSITION

If remove_seperator Then DeleteMenu hMenu, 5, MF_BYPOSITION

If remove_maximize Then DeleteMenu hMenu, 4, MF_BYPOSITION

If remove_minimize Then DeleteMenu hMenu, 3, MF_BYPOSITION

If remove_size Then DeleteMenu hMenu, 2, MF_BYPOSITION

If remove_move Then DeleteMenu hMenu, 1, MF_BYPOSITION

If remove_restore Then DeleteMenu hMenu, 0, MF_BYPOSITION

Private Sub Form_Load()

RemoveMenus Me, False, False, _

False, False, False, True, True

End Sub

Trang 12

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = Not ReadyToClose

Private Declare Sub ReleaseCapture Lib "User32" ()

Const WM_NCLBUTTONDOWN = &HA1

Private Sub Form_Paint()

Me.Print "Hay keo tui di"

Public Const DT_CENTER = &H1

Public Const DT_WORDBREAK = &H10

Declare Function DrawTextEx Lib "user32" Alias "DrawTextExA" (ByVal hDC

As Long, ByVal lpsz As String, ByVal n As Long, lpRect As RECT, ByVal

un As Long, ByVal lpDrawTextParams As Any) As Long

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal

nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long

Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Declare Function SetRect Lib "user32" (lpRect As RECT, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Global Cnt As Long, sSave As String, sOld As String, Ret As String Dim Tel As Long

Function GetPressedKey() As String

Trang 13

Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse

As Long, ByVal lpTimerFunc As Long)

Private Sub Form_Load()

Me.Caption = "Key Spy"

SetTimer Me.hwnd, 0, 1, AddressOf TimerProc

SetRect R, 0, 0, Me.ScaleWidth, Me.ScaleHeight

DrawTextEx Me.hDC, mStr, Len(mStr), R, DT_WORDBREAK Or DT_CENTER, ByVal 0&

Đôc chiêu 9 : Đóng một ứng dụng bất kỳ home

Xuất xứ : www.echip.com.vn (Báo eChip)

Binh khí sử dụng : Cần một cái đồng hồ(Timer) chú ý thuộc tính Interval (Riêng tôi cho là 1) Gíơi thiệu : Đoạn mã đóng một cửa sổ bất ỳ nào đó dựa vào tên của nó

Do While FindWindow(vbNullString, "Windows Task Manager") <> 0

‘Gia su toi muon “Thu tieu “ hop thoai “Windows Task Manager”

PostMessage FindWindow(vbNullString, "Windows Task Manager"), &H10, 0&, 0&

Loop

End Sub

Trang 14

- Đây là một chiêu thức rất quan trọng của một phần mềm bảo mật nên có thể đang rất cần cho nhiều bạn Riêng tôi do quá “Bất mãn” với cái bọn bạn quỷ quái nên đây s ẽ là một trong những tuyệt chiêu tôi sử dụng để viết Virus (Theo dự tính tiết thực hành thứ 2 tuần tới sẽ có vài cái máy tính của trường phải “Nhập viện”) he he nhưng tôi không tàn nhẫn tới mức phá hoại đâu tui “Hiền lắm” chỉ cho bọn bạn gà mờ “Biết ít khoe nhiều trên trường” không “Thực hành” thôi, Chúc các bạn có những giây phút “Sản khoái” như tôi với độc chiêu này

Đôc chiêu 10 : Tạo phím nóng cho chương trình : home

Xuất xứ : www.allapi.net

Binh khí sử dụng : Cần một cái Module (Form thì luôn luôn cần rồi)

Đoạn mã : (Bẫy phím Alt+Z)

Trong Module :

Declare Function SendMessage Lib "user32" Alias _

"SendMessageA" (ByVal hwnd As Long, _

ByVal wMsg As Long, ByVal wParam As Long, _

lParam As Long) As Long

Declare Function DefWindowProc Lib "user32" _

Alias "DefWindowProcA" (ByVal hwnd As Long, _

ByVal wMsg As Long, ByVal wParam As Long, _

ByVal lParam As Long) As Long

Public Const WM_SETHOTKEY = &H32

Public Const WM_SHOWWINDOW = &H18

Public Const HK_SHIFTA = &H141 'Shift + A

Public Const HK_SHIFTB = &H142 'Shift * B

Public Const HK_CONTROLA = &H241 'Control + A

Public Const HK_ALTZ = &H45A

'The value of the key-combination has to

'declared in lowbyte/highbyte-format

'That means as a hex-number: the last two

'characters specify the lowbyte (e.g.: 41 = a),

'the first the highbyte (e.g.: 01 = 1 = Shift)

Trong Form :

Private Sub Form_Load()

Me.WindowState = vbMinimized

'Let windows know what hotkey you want for

'your app, setting of lParam has no effect

erg& = SendMessage(Me.hwnd, WM_SETHOTKEY, HK_ALTZ, 0)

'Check if succesfull

If erg& <> 1 Then

MsgBox "You need another hotkey", vbOKOnly, "Error"

End If

'Tell windows what it should do, when the hotkey

'is pressed -> show the window!

'The setting of wParam and lParam has no effect

erg& = DefWindowProc(Me.hwnd, WM_SHOWWINDOW, 0, 0)

‘ Các hằng số và hàm phục vụ cho việc thay đổi WallPaper

Private Const SPIF_UPDATEINIFILE = &H1

Private Const SPI_SETDESKWALLPAPER = 20

Private Const SPIF_SENDWININICHANGE = &H2

Trang 15

Private Declare Function SystemParametersInfo Lib "user32" Alias

"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long

‘Phục vụ cho việc ghi giá trị vào Registry

Public Enum REG_TOPLEVEL_KEYS

Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias

"RegSetValueExA" (ByVal Hkey As Long, ByVal lpValueName As String, ByVal

Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long

Private Const REG_SZ = 1

Public Function ChangeWallPaper(ImageFile As String, Optional Tile As Boolean = True, Optional Center As Boolean = True) As Boolean

Dim lRet As Long

On Error Resume Next

If Tile Then 'Kieu Tile

WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop",

"TileWallpaper", "1"

Else 'Center or Stretch

WriteStringToRegistry HKEY_CURRENT_USER, "Control Panel\desktop",

Dim bAns As Boolean

On Error GoTo ErrorHandler

Dim keyhand As Long

Trang 16

MsgBox "Thay doi gia tri Registry khong thanh cong", , "Loi :"

End Function

Private Sub Command1_Click()

‘ Load file ảnh cần thiết

ChangeWallPaper "C:\Ben Tre.bmp" ‘Kiểu Tile

‘ChangeWallPaper "C:\Ben Tre.bmp", False ‘Kiểu Center

‘ChangeWallPaper "C:\Ben Tre.bmp", False, False ‘Kiểu Stretch

Private Declare Function mciSendString Lib "winmm.dll" Alias

"mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString

As String, ByVal uReturnLength As Long, ByVal hWndCallback As Long) As Long

Function vbmciSendString(ByVal Command As String, ByVal hWnd As Long)

As String

Dim Buffer As String

Dim dwRet As Long

Buffer = Space$(100)

dwRet = mciSendString(Command, ByVal Buffer, Len(Buffer), hWnd)

vbmciSendString = Buffer

End Function

Private Sub Command1_Click()

Dim Dummy As String

Dummy = vbmciSendString("set cdaudio door open", 0)

End Sub

Private Sub Command2_Click()

Dim Dummy As String

Dummy = vbmciSendString("set cdaudio door closed ", 0)

PHẦN I _ Tạo một OCX đặt tên là cSysTray.ocx

Bạn vào VB tạo một ActiveX Control, sau đó add một Module đặt tên là: mSysTray.bas và có nội dung như sau :

- Module mSysTray.bas -

Option Explicit

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal

lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Trang 17

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource

As Any, ByVal ByteLen As Long)

Public Declare Function DrawEdge Lib "user32" (ByVal hDC As Long, qrc As RECT, ByVal edge

As Long, ByVal grfFlags As Long) As Boolean

Public Const GWL_USERDATA = (-21&)

Public Const GWL_WNDPROC = (-4&)

Public Const WM_USER = &H400&

Public Const TRAY_CALLBACK = (WM_USER + 101&)

Public Const NIM_ADD = &H0&

Public Const NIM_MODIFY = &H1&

Public Const NIM_DELETE = &H2&

Public Const NIF_MESSAGE = &H1&

Public Const NIF_ICON = &H2&

Public Const NIF_TIP = &H4&

Public Const WM_MOUSEMOVE = &H200&

Public Const WM_LBUTTONDOWN = &H201&

Public Const WM_LBUTTONUP = &H202&

Public Const WM_LBUTTONDBLCLK = &H203&

Public Const WM_RBUTTONDOWN = &H204&

Public Const WM_RBUTTONUP = &H205&

Public Const WM_RBUTTONDBLCLK = &H206&

Public Const BDR_RAISEDOUTER = &H1&

Public Const BDR_RAISEDINNER = &H4&

Public Const BF_LEFT = &H1&

Public Const BF_TOP = &H2&

Public Const BF_RIGHT = &H4&

Public Const BF_BOTTOM = &H8&

Public Const BF_RECT = BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM

Public Const BF_SOFT = &H1000&

Public Type NOTIFYICONDATA

Trang 18

Public PrevWndProc As Long

' -

Public Function SubWndProc(ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

' -

Dim SysTray As cSysTray

Dim ClassAddr As Long

' -

Select Case MSG

Case TRAY_CALLBACK

ClassAddr = GetWindowLong(hwnd, GWL_USERDATA)

CopyMemory SysTray, ClassAddr, 4

SysTray.SendEvent lParam, wParam

CopyMemory SysTray, 0&, 4

Private gInTray As Boolean

Private gTrayId As Long

Private gTrayTip As String

Private gTrayHwnd As Long

Private gTrayIcon As StdPicture

Private gAddedToTray As Boolean

Const MAX_SIZE = 510

Private Const defInTray = False

Private Const defTrayTip = "System Tray Control" & vbNullChar

Private Const sInTray = "InTray"

Private Const sTrayIcon = "TrayIcon"

Private Const sTrayTip = "TrayTip"

Public Event MouseMove(Id As Long)

Public Event MouseDown(Button As Integer, Id As Long)

Public Event MouseUp(Button As Integer, Id As Long)

Public Event MouseDblClick(Button As Integer, Id As Long)

' -

Private Sub UserControl_Initialize()

' -

Trang 19

InTray = ReadProperty(sInTray, defInTray)

Set TrayIcon = ReadProperty(sTrayIcon, Picture)

TrayTip = ReadProperty(sTrayTip, defTrayTip)

.WriteProperty sInTray, gInTray

.WriteProperty sTrayIcon, gTrayIcon

.WriteProperty sTrayTip, gTrayTip

End With

' -

End Sub

' -

Trang 20

' - Private Sub UserControl_Resize()

' - Height = MAX_SIZE

Width = MAX_SIZE

' - End Sub

' -

' - Private Sub UserControl_Terminate()

' -

' - Public Property Set TrayIcon(Icon As StdPicture) ' - Dim Tray As NOTIFYICONDATA

Dim rc As Long

' -

If Not (Icon Is Nothing) Then

If (Icon.Type = vbPicTypeIcon) Then

Set gTrayIcon = Icon

Set Picture = Icon

PropertyChanged sTrayIcon

End If

End If

' - End Property

' -

' - Public Property Get TrayIcon() As StdPicture ' - Set TrayIcon = gTrayIcon

' - End Property

' -

Trang 21

DeleteIcon gTrayHwnd, gTrayId

SetWindowLong gTrayHwnd, GWL_WNDPROC, PrevWndProc

gAddedToTray = False

End If

End If

Trang 22

Dim Tray As NOTIFYICONDATA

Dim tFlags As Long

Tray.uFlags = Tray.uFlags Or NIF_ICON

Set gTrayIcon = Icon

End If

If (Tip <> "") Then

Tray.szTip = Tip & vbNullChar

Tray.uFlags = Tray.uFlags Or NIF_TIP

Trang 23

PHẦN II: tạo một project mới để dùng OCX cSysTray.ocx

Bạn nhập đoạn mã sau vào :

Private Sub cSysTray1_MouseUp(Button As Integer, Id As Long)

'Nếu bạn nhấn chuột phải lên systray Icon

Select Case Button

Ngày đăng: 11/05/2021, 04:09

TỪ KHÓA LIÊN QUAN

w