Visual Basic te Forma Şekil Verin
1 sayfadaki 1 sayfası
Visual Basic te Forma Şekil Verin
Forma istenilen şeklin verilmesi
Programımızı windowsun klasik form şeklinden kurtarmak, daha profesyonel bir görünüm sağlamak veya görüntü değişimi (skin) eklemek için kullanabileceğimiz bir kaç api fonksiyonu var.
Bu fonksiyonlar;
CreateEllipticRgn
CreatePolygonRgn
şeklindedir. Birinci fonksiyon Form'a dairesel şekiller vermek için kullanılır. İkincisi ise istenilen koordinatlarda formu şekillendirir. Bu nedenle daha kullanışlı olan ikinci fonksiyonu değerlendirmeye alacağız. "CreatePolygonRgn" fonksiyonu üç adet parametre alır.
Bunlardan birincisi Form'un çizileceği koordinatları belirler. İkinci parametre kaç adet koordinat belirlendiğini, üçüncü parametre ise çizim modunu belirler. Çizim modu genelde "1" değerini alır. Form'un koordinatları ise saat yönünde yatay ve dikey konumlar verilerek saptanır.
Formun şekillenmesi için "CreatePolygonRgn" fonksiyonu Form'un "resize" olayına yazılmalıdır.
Bir örnek verelim;
1) Yeni bir proje başlatın,
2) Form'un resize olayına aşağıdaki kodu yazın,
Private Sub Form_Resize()
If WindowState vbMinimized Then
Sekille Me
End If
End Sub
3) Projeye bir modül ekleyin,
4) Bu modüle aşağıdaki kodu yazın,
Option Explicit
Type Yerler
X As Long
Y As Long
End Type
Declare Function SetWindowRgn Lib "user32" _
(ByVal hwnd As Long, _
ByVal hRgn As Long, _
ByVal bRedraw As Long) As Long
Declare Function CreatePolygonRgn Lib "gdi32" _
(lpPoint As Yerler, _
ByVal nCount As Long, _
ByVal nPolyFillMode As Long) As Long
Dim Adet&
Dim Konum() As Yerler
Function Renk&(Nesne As Object, Kalinlik)
Dim AnaRenk&, R&, G&, B&, Oran
Oran = Kalinlik / 9
AnaRenk = RGB(140, 140, 140)
B = AnaRenk 65536: AnaRenk = AnaRenk - B * 65536
G = AnaRenk 256: AnaRenk = AnaRenk - G * 256
R = AnaRenk
R = R * Oran
G = G * Oran
B = B * Oran
Renk = R + G * 256 + B * 65536
End Function
Sub KenariBoya(Nesne As Object)
Dim I%, Y%, DişRenk&, Kalinlik%
Nesne.ScaleMode = 3
For Y = 18 To 1 Step -1
Kalinlik = Y
Nesne.DrawWidth = Kalinlik
Nesne.CurrentX = Konum(1).X
Nesne.CurrentY = Konum(1).Y
DişRenk = Renk(Nesne, Kalinlik)
For I = 2 To Adet
Nesne.Line -(Konum(I).X, Konum(I).Y), DişRenk
Next
Nesne.Line -(Konum(1).X, Konum(1).Y), DişRenk
Next
End Sub
Sub Sekille(Nesne As Object)
Adet = 20
Dim Görünüm&
ReDim Konum(Adet) As Yerler
Dim En%, Boy%, Ara%, Nokta%
En = Nesne.ScaleX(Nesne.Width, vbTwips, vbPixels)
Boy = Nesne.ScaleY(Nesne.Height, vbTwips, vbPixels)
Ara = 10
'saat yönünde
Nokta = Nokta + 1
Konum(Nokta).X = 0
Konum(Nokta).Y = Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 2
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 3
Konum(Nokta).Y = 0
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 3
Konum(Nokta).Y = 0
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 2
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = En
Konum(Nokta).Y = Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = En
Konum(Nokta).Y = Boy - Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Boy - Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 2
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 3
Konum(Nokta).Y = Boy
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 3
Konum(Nokta).Y = Boy
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 2
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Boy - Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = 0
Konum(Nokta).Y = Boy - Ara * 3
Görünüm = CreatePolygonRgn(Konum(1), Adet, 1)
SetWindowRgn Nesne.hwnd, Görünüm, True
KenariBoya Nesne
End Sub
5) Projeyi çalıştrın.
Programımızı windowsun klasik form şeklinden kurtarmak, daha profesyonel bir görünüm sağlamak veya görüntü değişimi (skin) eklemek için kullanabileceğimiz bir kaç api fonksiyonu var.
Bu fonksiyonlar;
CreateEllipticRgn
CreatePolygonRgn
şeklindedir. Birinci fonksiyon Form'a dairesel şekiller vermek için kullanılır. İkincisi ise istenilen koordinatlarda formu şekillendirir. Bu nedenle daha kullanışlı olan ikinci fonksiyonu değerlendirmeye alacağız. "CreatePolygonRgn" fonksiyonu üç adet parametre alır.
Bunlardan birincisi Form'un çizileceği koordinatları belirler. İkinci parametre kaç adet koordinat belirlendiğini, üçüncü parametre ise çizim modunu belirler. Çizim modu genelde "1" değerini alır. Form'un koordinatları ise saat yönünde yatay ve dikey konumlar verilerek saptanır.
Formun şekillenmesi için "CreatePolygonRgn" fonksiyonu Form'un "resize" olayına yazılmalıdır.
Bir örnek verelim;
1) Yeni bir proje başlatın,
2) Form'un resize olayına aşağıdaki kodu yazın,
Private Sub Form_Resize()
If WindowState vbMinimized Then
Sekille Me
End If
End Sub
3) Projeye bir modül ekleyin,
4) Bu modüle aşağıdaki kodu yazın,
Option Explicit
Type Yerler
X As Long
Y As Long
End Type
Declare Function SetWindowRgn Lib "user32" _
(ByVal hwnd As Long, _
ByVal hRgn As Long, _
ByVal bRedraw As Long) As Long
Declare Function CreatePolygonRgn Lib "gdi32" _
(lpPoint As Yerler, _
ByVal nCount As Long, _
ByVal nPolyFillMode As Long) As Long
Dim Adet&
Dim Konum() As Yerler
Function Renk&(Nesne As Object, Kalinlik)
Dim AnaRenk&, R&, G&, B&, Oran
Oran = Kalinlik / 9
AnaRenk = RGB(140, 140, 140)
B = AnaRenk 65536: AnaRenk = AnaRenk - B * 65536
G = AnaRenk 256: AnaRenk = AnaRenk - G * 256
R = AnaRenk
R = R * Oran
G = G * Oran
B = B * Oran
Renk = R + G * 256 + B * 65536
End Function
Sub KenariBoya(Nesne As Object)
Dim I%, Y%, DişRenk&, Kalinlik%
Nesne.ScaleMode = 3
For Y = 18 To 1 Step -1
Kalinlik = Y
Nesne.DrawWidth = Kalinlik
Nesne.CurrentX = Konum(1).X
Nesne.CurrentY = Konum(1).Y
DişRenk = Renk(Nesne, Kalinlik)
For I = 2 To Adet
Nesne.Line -(Konum(I).X, Konum(I).Y), DişRenk
Next
Nesne.Line -(Konum(1).X, Konum(1).Y), DişRenk
Next
End Sub
Sub Sekille(Nesne As Object)
Adet = 20
Dim Görünüm&
ReDim Konum(Adet) As Yerler
Dim En%, Boy%, Ara%, Nokta%
En = Nesne.ScaleX(Nesne.Width, vbTwips, vbPixels)
Boy = Nesne.ScaleY(Nesne.Height, vbTwips, vbPixels)
Ara = 10
'saat yönünde
Nokta = Nokta + 1
Konum(Nokta).X = 0
Konum(Nokta).Y = Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 2
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 3
Konum(Nokta).Y = 0
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 3
Konum(Nokta).Y = 0
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 2
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = En
Konum(Nokta).Y = Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = En
Konum(Nokta).Y = Boy - Ara * 3
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Boy - Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 2
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = En - Ara * 3
Konum(Nokta).Y = Boy
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 3
Konum(Nokta).Y = Boy
Nokta = Nokta + 1
Konum(Nokta).X = Ara * 2
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Boy - Ara
Nokta = Nokta + 1
Konum(Nokta).X = Ara
Konum(Nokta).Y = Boy - Ara * 2
Nokta = Nokta + 1
Konum(Nokta).X = 0
Konum(Nokta).Y = Boy - Ara * 3
Görünüm = CreatePolygonRgn(Konum(1), Adet, 1)
SetWindowRgn Nesne.hwnd, Görünüm, True
KenariBoya Nesne
End Sub
5) Projeyi çalıştrın.
ravmon- Binbaşı
- Mesaj Sayısı : 11
Yaş : 44
İş/Hobiler : Sen Ne yapcan benim Mesleğimi :D
Metin Alanı : <center><font color="white"><marquee direction="left" style="background:red">Vatanını Seven Görevini En İyi Yapandı.</marquee></font></center>
Madalyalar :
Kayıt tarihi : 25/10/08
Tecrübe
İtibar:
(10/100)
1 sayfadaki 1 sayfası
Bu forumun müsaadesi var:
Bu forumdaki mesajlara cevap veremezsiniz