banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows cách tạo form có hình dạng bất kỳ với VB6.0  XML
  [Programming]   cách tạo form có hình dạng bất kỳ với VB6.0 30/06/2006 23:15:13 (+0700) | #1 | 2544
hoanganhloc
Elite Member

[Minus]    0    [Plus]
Joined: 05/04/2003 16:47:35
Messages: 28
Offline
[Profile] [PM]
Windows dùng khái niệm 'Region' để qui định hình dạng và ranh giới của 1 form giao diện của ứng dụng bất kỳ. Windows cũng cung cấp 1 tập các hàm API để người lập trình có thể tạo 'region' cho ứng dụng của họ, nhưng thường các ứng dụng không tạo region theo ý riêng mà để cho hệ thống tạo dùm region truyền thống hình chữ nhật. Các hàm API sau cho phép bạn tạo region miêu tả hình dạng form giao diện: CreateRectRgn(), CreateEllipticRgn(), CreatePolygonRgn(), CombineRgn(), CombineTransform(), SetWindowRgn()... Để bạn thấy rõ hơn về qui trình gọi các hàm API để tạo 1 form có hình dạng bất kỳ, chúng tôi lấy thí dụ về qui trình tạo ứng dụng VB có form giao diện như sau:
Chú ý form trên là sự tổng hợp của 3 region: 1 region hình chữ nhật bên trái, 1 region hình ellipse bên trái và 1 region ellipse khác nằm bên phải. Qui trình tạo form VB 6.0 trên như sau:
1. Chạy VB 6.0, chọn loại ứng dụng 'Standard EXE' có form giao diện ban đầu là hình chữ nhật với tên là Form1, titlebar có nội dung là Form1.
2. Trong cửa sổ Properties của Form1 bên góc dưới phải, thay đổi thuộc tính ScaleHeight=200 (độ cao của form), thay đổi thuộc tính ScaleWidth=300 (độ rộng của form).
3. Nhấn phải chuột vào mục Form1 trong cửa sổ Project nằm ở góc trên phải màn hình để hiển thị danh sách lệnh tương ứng, chọn mục 'View Code' để hiển thị cửa sổ viết code cho Form1 rồi viết đoạn code cho hàm Form_Load() cho form như sau:
Private Sub Form_Load()
Call CreateRegion
End Sub
4. Nhấn phải chuột vào mục Project1 trong cửa sổ Project để hiển thị danh sách lệnh tương ứng, chọn mục Add.Module để tạo mới 1 module chứa code cho ứng dụng (tên mặc định là Module1) rồi viết đoạn code cho hàm CreateRegion như sau:
Option Explicit
Public Declare Function CreateRectRgn Lib 'gdi32' (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CreateEllipticRgn Lib 'gdi32' (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib 'gdi32' (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SetWindowRgn Lib 'user32' (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
' Thủ tục tạo region có hình dạng theo yêu cầu
Public Sub CreateRegion()
Dim hRgn1, hRgn2, hRgn3 As Long
Dim ret As Long
' tạo 1 region hình chữ nhật
hRgn1 = CreateRectRgn(0, 0, 100, 200)
' tạo 1 region hình ellipse
hRgn2 = CreateEllipticRgn(0, 0, 200, 200)
' tạo 1 region hình ellipse
hRgn3 = CreateEllipticRgn(150, 0, 500, 200)
' tổng hợp 2 region đầu thành 1
ret = CombineRgn(hRgn1, hRgn1, hRgn2, 2)
' tổng hợp kết quả với region ellipse bên phải
ret = CombineRgn(hRgn1, hRgn1, hRgn3, 2)
' thiết lập region vừa tổng hợp cho form
ret = SetWindowRgn(Form1.hWnd, hRgn1, True)
End Sub
5. Chọn menu Run.Start để chạy thử ứng dụng, bạn sẽ thấy form có giao diện như đặc tả trên. Lưu ý bạn chỉ nên vẽ các phần tử giao diện trong Form1 sao cho nó nằm trong vùng giới hạn của region của Form1 vì nếu nó nằm ngoài region (mặc dù vẫn nằm trong hình chữ nhật bao quanh Form1), bạn sẽ không thể tương tác với đối tượng nằm ngoài region đó.

hakuso: trích từ http://www.pcworld.com.vn/pcworld/faq.asp?t=faqview&id=760&cat_id=&fn=&search_issue=&type=&m=&y=
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 01/07/2006 12:49:12 (+0700) | #2 | 2797
btnHipHop
Member

[Minus]    0    [Plus]
Joined: 30/06/2006 18:39:19
Messages: 3
Offline
[Profile] [PM]
anh ơi không hiểu lắm
làm ơn giải thích rõ thêm 1 tý nữa có được không
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 01/07/2006 20:49:09 (+0700) | #3 | 2832
[Avatar]
xfile
Member

[Minus]    0    [Plus]
Joined: 30/06/2006 10:30:52
Messages: 10
Offline
[Profile] [PM]
qua' chi tiet' con` gi` nua~. Ko lam duoc nua~ thi` thoi
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 01/07/2006 20:56:22 (+0700) | #4 | 2834
BigballVN
Elite Member

[Minus]    0    [Plus]
Joined: 12/06/2005 07:25:21
Messages: 610
Offline
[Profile] [PM]
Cái này giống của Echip quá vậy. Nhưng mà bài này cũng hay đấy
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 04/07/2006 00:15:37 (+0700) | #5 | 3489
hoanganhloc
Elite Member

[Minus]    0    [Plus]
Joined: 05/04/2003 16:47:35
Messages: 28
Offline
[Profile] [PM]
ko phải của Echip đâu bạn...
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 04/07/2006 20:50:30 (+0700) | #6 | 3776
dungcoi_vb
Member

[Minus]    0    [Plus]
Joined: 29/06/2006 17:17:06
Messages: 100
Offline
[Profile] [PM]
http://vipviet.googlepages.com/ChieuThucLapTrinh.doc
Chúc may mắn
[Up] [Print Copy]
  [Question]   Re: cách tạo form có hình dạng bất kỳ với VB6.0 08/07/2006 00:36:35 (+0700) | #7 | 4874
[Avatar]
dohaichau02
Member

[Minus]    0    [Plus]
Joined: 05/07/2006 16:55:23
Messages: 36
Location: My Computer
Offline
[Profile] [PM] [Email] [Yahoo!]
bác ui, thế còn VB.Net thì làm thế nào ??, nếu bác biết thì cho em cái Reply nhé. Thank bác nhìu :shock:
[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 22/07/2006 01:50:25 (+0700) | #8 | 8793
[Avatar]
AnyThingYouDontWannaNoe
Elite Member

[Minus]    0    [Plus]
Joined: 29/09/2004 11:43:34
Messages: 88
Offline
[Profile] [PM]
Ở chỗ thêm
-----------------------------------------------
rồi viết đoạn code cho hàm CreateRegion như sau:
Option Explicit
Public Declare Function CreateRectRgn Lib 'gdi32' (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CreateEllipticRgn Lib 'gdi32' (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib 'gdi32' (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SetWindowRgn Lib 'user32' (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
' Thủ tục tạo region có hình dạng theo yêu cầu
Public Sub CreateRegion()
Dim hRgn1, hRgn2, hRgn3 As Long
Dim ret As Long
' tạo 1 region hình chữ nhật
hRgn1 = CreateRectRgn(0, 0, 100, 200)
' tạo 1 region hình ellipse
hRgn2 = CreateEllipticRgn(0, 0, 200, 200)
' tạo 1 region hình ellipse
hRgn3 = CreateEllipticRgn(150, 0, 500, 200)
' tổng hợp 2 region đầu thành 1
ret = CombineRgn(hRgn1, hRgn1, hRgn2, 2)
' tổng hợp kết quả với region ellipse bên phải
ret = CombineRgn(hRgn1, hRgn1, hRgn3, 2)
' thiết lập region vừa tổng hợp cho form
ret = SetWindowRgn(Form1.hWnd, hRgn1, True)
End Sub
5. Chọn menu Run.Start để chạy thử ứng dụng, bạn sẽ thấy form có giao diện như đặc tả trên. Lưu ý bạn chỉ nên vẽ các phần tử giao diện trong Form1 sao cho nó nằm trong vùng giới hạn của region của Form1 vì nếu nó nằm ngoài region (mặc dù vẫn nằm trong hình chữ nhật bao quanh Form1), bạn sẽ không thể tương tác với đối tượng nằm ngoài region đó.


-------------------------

viết thêm code cho Creat Region là làm sao vậy bạn?

Sory vì tôi mới học lập trình à, tự học nữa


[Up] [Print Copy]
  [Question]   cách tạo form có hình dạng bất kỳ với VB6.0 22/07/2006 02:01:37 (+0700) | #9 | 8795
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Các hàm API sau cho phép bạn tạo region miêu tả hình dạng form giao diện: CreateRectRgn(), CreateEllipticRgn(), CreatePolygonRgn(), CombineRgn(), CombineTransform(), SetWindowRgn()... Để bạn thấy rõ hơn về qui trình gọi các hàm API để tạo 1 form có hình dạng bất kỳ.... 

viết thêm code cho Creat Region là làm sao vậy bạn?  


Vì các API chỉ hỗ trợ tạo 1 số region chuẩn (eclipse, vuông, polygon), do đó để tạo các region theo ý bạn (cong, méo, kết hợp, ..) bạn cần sự kết hợp của các API tạo và kết các region.
Hibernating
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|