Click to See Complete Forum and Search --> : Unload effect


AndyK
October 17th, 1999, 03:43 PM
Is there anyway to brake up my form into 8 pieces and each piece will fly into different direction

wayne
October 17th, 1999, 05:32 PM
No.

Chris Eastwood
October 18th, 1999, 02:35 AM
Yes!

In theory you could do something like :

1. Have a single form, eg frmUnload
2. When you unload your main form -

- create 8 instances of frmUnload
- bitBlt the captured image of your main form and 'dissect' it into
8 sections
- bitBlt the sections into each frmUnload's HDC
- hide your main form
- move the frmUnload instances around how you like
- unload all of them




Chris Eastwood

CodeGuru - the website for developers
http://codeguru.developer.com/vb

Harry Gilbert
October 19th, 1999, 12:58 PM
Here's example code for 4 pieces. Assumes main form is 'Form1', another form named 'f1'. f1 has no caption, no border, no control box, autoredraw=true. Put the following code into a module and call it.

option Explicit
private Declare Function GetDesktopWindow Lib "User32" () as Long
private Declare Function GetDC Lib "User32" (byval hWnd as Long) as Long
private Declare Function BitBlt Lib "GDI32" (byval hDestDC as Long, _
byval X as Long, _
byval Y as Long, _
byval nWidth as Long, _
byval nHeight as Long, _
byval hSrcDC as Long, _
byval XSrc as Long, _
byval YSrc as Long, _
byval dwRop as Long) as Long
private Declare Function ReleaseDC Lib "User32" (byval hWnd as Long, _
byval hDC as Long) as Long
Sub DoIt()
Dim hDC as Long, hWnd as Long, l as Long, t as Long, hw as Long, hh as Long, i as Integer
Dim hhp as Long, hwp as Long, tppx as Long, tppy as Long

Dim f2 as f1, f3 as f1, f4 as f1 ' clones of f1
set f2 = new f1: set f3 = new f1: set f4 = new f1 ' instantiate the three clones
tppy = Screen.TwipsPerPixelY ' get current twip/pixel conversion value
tppx = Screen.TwipsPerPixelX ' get current twip/pixel conversion value
With Form1
l = .Left \ tppx ' Convert form1 left to pixels
t = .Top \ tppy ' convert form1 top to pixels
hh = .Height \ 2 ' get half-height
hw = .Width \ 2 ' get half-width (not half-wit!)
f1.Move .Left, .Top, hw, hh
f2.Move .Left + hw, .Top, hw, hh
f3.Move .Left, .Top + hh, hw, hh
f4.Move .Left + hw, .Top + hh, hw, hh
End With
hWnd = GetDesktopWindow() ' get the Window handle for the desktop window
hDC = GetWindowDC(hWnd) ' get a Device Context for the desktop window
hhp = hh \ tppy ' get half-height-in-pixels
hwp = hw \ tppx ' get half-width-in-pixels
BitBlt f1.Picture1.hDC, 0, 0, hwp, hhp, hDC, l, t, vbSrcCopy ' copy Upper Left qtr
BitBlt f2.Picture1.hDC, 0, 0, hwp, hhp, hDC, l + hwp, t, vbSrcCopy ' copy Upper Right qtr
BitBlt f3.Picture1.hDC, 0, 0, hwp, hhp, hDC, l, t + hhp, vbSrcCopy ' copy Lower Left qtr
BitBlt f4.Picture1.hDC, 0, 0, hwp, hhp, hDC, l + hwp, t + hhp, vbSrcCopy ' copy Lower Right qtr
ReleaseDC hWnd, hDC ' release the DC (important)
Form1.Hide ' hide orig form
f1.Show: f2.Show: f3.Show: f4.Show ' bring in the clones
for i = 0 to Form1.Left step tppx ' do something to them - fly apart for ex.
With f1: .Move .Left - tppx, .Top - tppy: End With
With f2: .Move .Left + tppx, .Top - tppy: End With
With f3: .Move .Left - tppx, .Top + tppy: End With
With f4: .Move .Left + tppx, .Top + tppy: End With
DoEvents
next
Unload f1: Unload f2: Unload f3: Unload f4
End Sub