HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Bélyegkontrol készítése


Példaprogram letöltése

101883 bájt

Készítsünk egy olyan grafikai kontrolt, melyen megjeleníthető egy tetszőleges kép, és a kontrol széle épp úgy szaggatott, mintha csak egy bélyeg lenne. A kontrol készítéséhez ismernünk kell a GDI+ által nyújtott régiói kezelési technikát, melyre cikkünkben is kitérünk.

A megvalósításhoz készítünk tehát egy új kontrolt a Control osztályból származtatva. E kontrol három új property-t tartalmaz.
  • Hole: itt határozhatjuk meg, hogy a „bélyeg” szélén mekkorák legyenek a lyukak.
  • Margin: a kontrol széle és a kép közötti margó méretét adja meg.
  • Bitmap: itt adhatjuk meg a megjelenítendő képet.
Felülírva a kontrol OnPaint függvényét elvégezhetjük a kirajzolást, mely igen egyszerű: ha lett betöltve kép a Bitmap property-be, akkor a Graphics osztály DrawImage függvényével kirajzoljuk, figyelembe véve a kontrol méretét és a megadott margót.
  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    If Not (fbitmap Is Nothing) Then
      e.Graphics.DrawImage(fbitmap, Rectangle.Inflate(ClientRectangle, -fmargin, -fmargin))
    End If
  End Sub 'OnPaint
Kissé bonyolultabb feladat a „bélyeg” szélének elkészítése. Ahhoz, hogy a kontrol széle „lyukas” legyen, egy olyan régiót kell készítenünk, mely pontosan megfelel a bélyeg kinézetének.
  Private Sub UpdateRegion()
    Dim i As Integer
    Dim s2 As Integer = fhole / 2
    Dim inc As Integer = fhole + fhole / 3
Ezt a kinézetet egy GraphicsPath osztállyal írjuk le.
    Dim gp As New GraphicsPath()
Szükségünk lesz két ciklusra, mely végigmegy a kontrol vízszintes és függőleges élein. Mindkét ciklusban két-két AddEllipse függvényhívást végzünk, mely a GrahphicsPath-hoz köröket ad hozzá. Ezek a körök lesznek a kontrol szélein látható lyukak. Ha ügyesen pozícionáljuk ezeket a köröket, akkor a kontrol szélén mindig csak a körök fele jelenik meg, és így egy igazi bélyeg kinézetét adják majd.
    For i = 0 To Width - inc Step inc
      gp.AddEllipse(i, -s2, fhole, fhole)
      gp.AddEllipse(i, Height - s2, fhole, fhole)
    Next i
    For i = 0 To Height - inc Step inc
      gp.AddEllipse(-s2, i, fhole, fhole)
      gp.AddEllipse(Width - s2, i, fhole, fhole)
    Next i
Adott tehát egy GraphicsPath, melyben egy téglalap élein elhelyezett körök vannak. Létrehozunk most egy régiót, mely teljesen lefedi a kontrolkliens területét. Ezt követően a Region osztály Exclude függvényét meghívva kizárjuk e régióból azt a területet, melyet a GraphicsPath osztályunk példánya ír le, vagyis a kontrol szélén lévő körök kiesnek a régióból.
    Dim r As New [Region](Me.ClientRectangle)
    r.Exclude(gp)
Most már a régió megfelelő alakú egy bélyeghez képest, így nincs más teendőnk, mint ezt a régiót beállítani a kontrol régiójának.
    Me.Region = r
  End Sub 'UpdateRegion

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |