• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Hiệu ứng làm Form xuất hiện giống AV

Các thủ thuật liên quan đến việc xử lý ứng dụng, biểu mẫu và control
User avatar
phanthequang4101987
Thành viên danh dự
Thành viên danh dự
Posts: 116
Joined: Tue 01/04/2008 6:39 am
Location: Nghi Xuân - Hà Tĩnh
Has thanked: 5 times
Been thanked: 21 times
Contact:

Hiệu ứng làm Form xuất hiện giống AV

Postby phanthequang4101987 » Mon 27/10/2008 7:51 pm

Thủ thuật: Hiệu ứng làm Form xuất hiện giống AV
Tác giả: Sưu tầm
Mô tả: Form xuất hiện từ dưới lên ngay đồng hồ hệ thống


Thêm vào Form 1 Timer:

Code: Select all

  1. Private Sub Form_Load()
  2.     Me.Top = Screen.Height
  3.     Me.Left = Screen.Width - Me.Width
  4.     Timer1.Interval = 10
  5. End Sub
  6.  
  7. Private Sub Timer1_Timer()
  8.     Me.Top = Me.Top - 50
  9.     If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = False
  10. End Sub


†™_Çøø£_™†.......♥.......†™_U††»ñhøç_™†
Đưa người ta chưa đưa qua sông
mà sao nghe tiếng sóng trong lòng
.(¯`v´¯)_______ÎÎ_____ÎÎ________(¯`v´¯)

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: hiệu làm form xuất hiện giống AV

Postby vietteiv » Mon 27/10/2008 10:18 pm

ko thấy nói gì về cái interval của Timer. thiếu khai báo cái này đố mà chạy được :))
[code=vb6]
  1. ' thêm cái dòng này trong form_load
  2. Timer1.Interval = 10
[/code]
code gọn mà ứng dụng được đấy. set thêm cái thuộc tính ShowInTaskbar = False nữa thì hay hơn :)

dactung93
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 496
Joined: Tue 04/11/2008 8:43 am
Has thanked: 6 times
Been thanked: 8 times

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby dactung93 » Tue 04/11/2008 10:17 am

Code: Select all

  1. Private Sub Form_Load()
  2.     Me.Top = Screen.Height
  3.     Me.Left = Screen.Width - Me.Width
  4.     Timer1.Interval = 10
  5.     Timer3.Enabled = False
  6.     Timer2.Interval = 10
  7.     Timer3.Interval = 3000
  8. End Sub
  9.  
  10. Private Sub Timer1_Timer()
  11.     Me.Top = Me.Top - 50
  12.     If Me.Top < Screen.Height - Me.Height - 300 Then
  13.     Timer3.Enabled = True
  14.     Timer1.Enabled = False
  15.     End If
  16. End Sub
  17.  
  18. Private Sub Timer2_Timer()
  19. Me.Top = Me.Top + 50
  20. If Me.Top = Screen.Height Then
  21. End
  22. End If
  23.  
  24. End Sub
  25.  
  26. Private Sub Timer3_Timer()
  27. Timer2.Enabled = True
  28. End Sub
  29.  

User avatar
playgemboy
Thành viên danh dự
Thành viên danh dự
Posts: 289
Joined: Sun 13/04/2008 6:10 am
Location: Bình Phú, Quận 6, TP.HCM
Been thanked: 1 time
Contact:

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby playgemboy » Fri 07/11/2008 2:07 pm

Cái này muốn cho form di chuyển tự nhiên hơn, ta nên cho nó chuyển động có gia tốc.Tức là mỗi chu kì lặp lại của Timer, ta cộng vào (hoặc trừ ra) một số giảm dần (hoặc tăng dần).
Nói khó hiểu, demo code là hiểu :)

Code: Select all

  1. Dim Giatoc As Integer
  2. Private Sub Form_Load()
  3.     Me.Top = Screen.Height
  4.     Me.Left = Screen.Width - Me.Width
  5.     Timer1.Interval = 10
  6.      Giatoc = Me.Height / 20
  7. End Sub
  8.  
  9. Private Sub Timer1_Timer()
  10.     Giatoc = Giatoc - 3 ' chuyen dong cham dan deu
  11.     Me.Top = Me.Top - Giatoc
  12.     If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = False
  13. End Sub

Nếu nói đúng ra thì cái số -2 kia mới là gia tốc :D, hoặc có thể làm cho "giatoc" điều hòa cũng được, kết hợp thêm hàm sin(rad) hoặc cos thì tùy

Code: Select all

  1. Dim Giatoc As Double
  2. Private Sub Form_Load()
  3.     Me.Top = Screen.Height
  4.     Me.Left = Screen.Width - Me.Width
  5.     Timer1.Interval = 10
  6.      Giatoc = 0
  7. End Sub
  8.  
  9. Private Sub Timer1_Timer()
  10.     Giatoc = Giatoc + 0.05 ' goc rad tang dan
  11.     Me.Top = Me.Top - (Sin(Giatoc) * (Me.Height / 8)) / 2
  12.     If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = False
  13. End Sub


Như vậy, form sẽ chuyển động rất thật.Mấy cái này em rất hay áp dụng cho form của mình (tự chế đấy nhá ;;) , ko phải sưu tầm đâu :P )
<lâu lâu vô 4f post vài bài, mất công lại nói em quên diễn đàn :D >
<I Come Back>

vitcononline
Posts: 3
Joined: Sun 16/11/2008 6:57 pm

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby vitcononline » Thu 19/03/2009 8:31 am

Mấy anh có thể chuyển từ VB6 sang Vb2005 được ko vây?.Em chuyển nhưng nó lại báo lỗi ở dòng Screen.Height và Screen.Width em khai báo System.Windows.Form.Screen cũng ko đươc.

Giang Hồ
Thành viên năng nổ
Thành viên năng nổ
Posts: 50
Joined: Sat 12/05/2007 2:36 pm
Location: http://vn-soft.net
Been thanked: 1 time
Contact:

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby Giang Hồ » Tue 31/03/2009 9:58 pm

Screen.Height - Me.Height - 300

Số 300 này chỉ là đoán mò về chiều cao của Taskbar. Lỡ người ta kéo taskbar lên thành 2 tầng thì sao

Hơn nữa, trong Windows Vista. Nếu ứng dụng của bạn khởi động cùng Windows (tức kích hoạt trước khi Windows Desktop Manager active) thì Screen.Width = Screen.Height -> SAI. gianghoplus cũng hok hiểu vì sao nữa

Muốn chính xác hơn ta xác định lun kích thước taskbar

Code: Select all

  1. Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
  2.  
  3. Private Type RECT
  4.     Left As Long
  5.     Top As Long
  6.     Right As Long
  7.     Bottom As Long
  8. End Type
  9.  
  10. Private Type APPBARDATA
  11.     cbSize As Long
  12.     hwnd As Long
  13.     uCallbackMessage As Long
  14.     uEdge As Long
  15.     rc As RECT
  16.     lParam As Long
  17. End Type
  18.  
  19. Private Type TBSIZE
  20.     Width As Long
  21.     Height As Long
  22. End Type
  23.  
  24. Private Function Taskbar() As TBSIZE
  25.     Dim tBar As APPBARDATA
  26.     SHAppBarMessage &H5, tBar
  27.     Taskbar.Height = (tBar.rc.Bottom - tBar.rc.Top) * 15
  28.     Taskbar.Width = (tBar.rc.Right - tBar.rc.Left) * 15
  29. End Function


Lúc này ta lấy chiều rộng của màn hình bằng với Taskbar.Width thì ok

àh còn nữa. Trong Vista nếu chạy hiệu ứng trong suốt Aero thì lại phải tính thêm đường viền nữa

Code: Select all

  1. Public Function VistaX() As Byte
  2. If (GetOS = "Vista" Or GetOS = "Seven") And _
  3. GetDword(HKEY_CURRENT_USER, "Software\Microsoft\Windows\DWM", "Composition") = 1 Then _
  4.     VistaX = 100 Else VistaX = 0
  5. End Function


lúc đó sửa dòng Me.Left thành như thế này là ổn

Code: Select all

  1. Me.Left = Taskbar.Width - Me.Width - VistaX
Code chỉ một lần mà fix bug thì mãi mãi
-----------------------------------
VnSecurity 2008 - Bảo vệ máy tính theo phong cách của bạn
Website: http://vn-soft.net

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby vietteiv » Tue 31/03/2009 10:25 pm

tham khảo thêm cách làm form xuất hiện giống AV hiệu ứng đẹp
http://www.caulacbovb.com/forum/viewtop ... =52&t=6244

duy_phong01
Thành viên chính thức
Thành viên chính thức
Posts: 20
Joined: Fri 31/05/2013 7:27 am
Has thanked: 1 time

Re: Hiệu ứng làm Form xuất hiện giống AV

Postby duy_phong01 » Sun 09/02/2014 2:29 pm

Mình nghĩ Screen.Width và Screen.Height là sai rồi, mình nghĩ là My.Computer.Screen.WorkingArea.Width hoặc là My.Computer.Screen.WorkingArea.Height


Return to “[VB] Ứng dụng - Form và Control”

Who is online

Users browsing this forum: No registered users and 1 guest