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 :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

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 :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 >

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