Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Visual Basic
Nepravidlená okna ve VB, část I
14. července 2000, 00.00 | V mnohých aplikacích se setkáváte s okny, která už nejsou jenom
obdélníková, eliptická, ale i ve tvaru mnohoúhelníku, vykřičníků, obličejů a
mnoha dalších různých tvarů. Jak je vytvořit?
V mnohých aplikacích se setkáváte s okny, která už nejsou jenom obdélníková, eliptická, ale i ve tvaru mnohoúhelníku, vykřičníků, obličejů a mnoha dalších různých tvarů. Techniku tvorby takovýchto oken se Vám pokusím přiblížit v tomto článku.
Vše se odehrává kolem regionů. Region je útvar, který definován hranicemi. Pokud region sloučím s oknem, okno bude tvaru jaký má region.
Tvorba regionů
Obdélníkový region
Public Declare Function CreateRectRgn Lib "gdi32" ( _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long) As Long
Kde: X1,Y1 jsou souřadnice levého horního rohu
X2, Y2 jsou
souřadnice pravého dolního rohu.
Eliptický region
Public Declare Function CreateEllipticRgn Lib "gdi32" ( _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long) As Long
Kde: X1,Y1 jsou souřadnice levého horního rohu
hraničního obdélníku
X2, Y2 jsou
souřadnice pravého dolního rohu hraničního obdélníku
Obdélníkový region + zakulacené rohy
Public Declare Function CreateRoundRectRgn Lib "gdi32"( _ ByVal X1 As Long, _ ByVal Y1 As Long, _ ByVal X2 As Long, _ ByVal Y2 As Long, _ ByVal X3 As Long, _ ByVal Y3 As Long) As Long
Kde: X1,Y1 jsou souřadnice levého horního rohu
hraničního obdélníku
X2, Y2 jsou souřadnice pravého dolního
rohu hraničního obdélníku
X3 je šířka elipsy tvořící kulaté
rohy
Y3 je výška
elipsy tvořící kulaté rohy
Mnohoúhelníkový region
Public Declare Function CreatePolygonRgn Lib "gdi32" ( _ lpPoint As POINTAPI, _ ByVal nCount As Long, _ ByVal nPolyFillMode As Long) As Long
Kde: lpPoint je pole bodů [x,y] ze kterých je
tvořen region
nCount je
počet bodů ze kterých je tvořen region
nPolyFillMode
je mód výplně mnohostěnu:
ALTERNATE – vyplní každou oblast mezi lichými a sudými stranami mnohostěnu na každé řádce.
WINDING – vyplní každou oblast uvnitř mnohoúhelníku
Spojení regionu s oknem
Pro spojení regionu s oknem se využívá fce.:
Public Declare Function SetWindowRgn Lib "user32" ( _ ByVal hWnd As Long, _ ByVal hRgn As Long, _ ByVal bRedraw As Boolean) As Long
Kde: hWnd je handle okna
hRgn je region
(vytvořený jako návratová hodnota jednou z výše uvedených fcí)
bRedraw má-li
se okno překreslit
Měníme-li regiony nebo při ukončení aplikace je nutné region smazat z paměti a to funkcí DeleteObject.
Příklad:
Private Sub Form_Load() Dim myRGN As Long myRGN = CreateEllipticRgn(0, 0, _ Me.Width \ Screen.TwipsPerPixelX, _ Me.Height \ Screen.TwipsPerPixelY) SetWindowRgn Me.hWnd, myRGN, True DeleteObject myRGN End Sub
Zde se můžete stáhnout příklad, který uvádí příklad tvorby všech druhů regionu. Příště vysvětlím, jak kombinovat mnoho různých regionů do sebe, k vytváření ještě zvláštnějších tvarů.
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007