Page 1 of 1
Hiệu ứng làm Form xuất hiện giống AV
Posted: Mon 27/10/2008 7:51 pm
by phanthequang4101987
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
Private Sub Form_Load() Me.Top = Screen.Height Me.Left = Screen.Width - Me.Width Timer1.Interval = 10End Sub Private Sub Timer1_Timer() Me.Top = Me.Top - 50 If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = FalseEnd Sub
Re: hiệu làm form xuất hiện giống AV
Posted: Mon 27/10/2008 10:18 pm
by vietteiv
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: Select all
' thêm cái dòng này trong form_loadTimer1.Interval = 10
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

Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Tue 04/11/2008 10:17 am
by dactung93
Code: Select all
Private Sub Form_Load() Me.Top = Screen.Height Me.Left = Screen.Width - Me.Width Timer1.Interval = 10 Timer3.Enabled = False Timer2.Interval = 10 Timer3.Interval = 3000End Sub Private Sub Timer1_Timer() Me.Top = Me.Top - 50 If Me.Top < Screen.Height - Me.Height - 300 Then Timer3.Enabled = True Timer1.Enabled = False End IfEnd Sub Private Sub Timer2_Timer()Me.Top = Me.Top + 50If Me.Top = Screen.Height ThenEndEnd If End Sub Private Sub Timer3_Timer()Timer2.Enabled = TrueEnd Sub
Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Fri 07/11/2008 2:07 pm
by playgemboy
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
Dim Giatoc As IntegerPrivate Sub Form_Load() Me.Top = Screen.Height Me.Left = Screen.Width - Me.Width Timer1.Interval = 10 Giatoc = Me.Height / 20End Sub Private Sub Timer1_Timer() Giatoc = Giatoc - 3 ' chuyen dong cham dan deu Me.Top = Me.Top - Giatoc If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = FalseEnd Sub
Nếu nói đúng ra thì cái số -2 kia mới là gia tốc

, 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
Dim Giatoc As DoublePrivate Sub Form_Load() Me.Top = Screen.Height Me.Left = Screen.Width - Me.Width Timer1.Interval = 10 Giatoc = 0End Sub Private Sub Timer1_Timer() Giatoc = Giatoc + 0.05 ' goc rad tang dan Me.Top = Me.Top - (Sin(Giatoc) * (Me.Height / 8)) / 2 If Me.Top < Screen.Height - Me.Height - 300 Then Timer1.Enabled = FalseEnd 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

)
<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
>
Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Thu 19/03/2009 8:31 am
by vitcononline
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.
Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Tue 31/03/2009 9:58 pm
by Giang Hồ
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
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long Private Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd Type Private Type APPBARDATA cbSize As Long hwnd As Long uCallbackMessage As Long uEdge As Long rc As RECT lParam As LongEnd Type Private Type TBSIZE Width As Long Height As LongEnd Type Private Function Taskbar() As TBSIZE Dim tBar As APPBARDATA SHAppBarMessage &H5, tBar Taskbar.Height = (tBar.rc.Bottom - tBar.rc.Top) * 15 Taskbar.Width = (tBar.rc.Right - tBar.rc.Left) * 15End 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
Public Function VistaX() As ByteIf (GetOS = "Vista" Or GetOS = "Seven") And _GetDword(HKEY_CURRENT_USER, "Software\Microsoft\Windows\DWM", "Composition") = 1 Then _ VistaX = 100 Else VistaX = 0End Function
lúc đó sửa dòng Me.Left thành như thế này là ổn
Code: Select all
Me.Left = Taskbar.Width - Me.Width - VistaX
Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Tue 31/03/2009 10:25 pm
by vietteiv
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
Re: Hiệu ứng làm Form xuất hiện giống AV
Posted: Sun 09/02/2014 2:29 pm
by duy_phong01
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