PDA

View Full Version : Thay the title bar



Dhhg
18-11-2002, 19:23
May ban oi,cho toi hoi neu muon xoa title bar di,tu tao ra mot title bar moi theo rieng y minh va co the di chuyen form bang title bar do ma khong dung API thi lam cach nao.Toi co chuong trinh mau tu tao title bar va cho phep ta di chuyen form nhung no dung API ma toi thi khong thich dung API cho lam.Ban nao biet chi toi voi.

KEM_WALL
23-11-2002, 18:33
xóa title bar thì bạn set form ... ( kô nhớ nhưng có cái là fix single, sizeable single, fix dialog... ) thành None
sau đó tự vẽ title bar lại theo ý thích ( bắt đầu từ điểm có tọa độ là 0,0 ) sử lý drag form cũng dễ thui, vẽ 1 cái shape ( tranperant ) ở đó và evnts mouse_down là xong ;)

Nicky
25-11-2002, 14:32
Đường nào cũng phải dùng đến API thôi. Nếu người dùng muốn di chuyển Form thì bạn làm thế nào ? Phải dùng API...

subzero
27-11-2002, 01:09
Làm cái Image co' phải hay hơn Shape ko?
Form.move là xong cần gì API cho mệt xác

danceswithwolves
27-11-2002, 09:30
không cần API, tớ làm rồi mà, thuần VB6. Không tin tớ post code lên cho xem.

Nguyen Thanh Binh
27-11-2002, 12:40
Nếu không dùng API làm sao có đủ chức năng giống form bình thường. Cho mình tham khảo đi.

danceswithwolves
27-11-2002, 15:22
chức năng bình thường là sao ?

quaitieutu
29-11-2002, 04:42
Hỏng tin ,hỏng tin :D:D:D:D:D:D:D:D

KEM_WALL
29-11-2002, 18:13
quái ah, kô tin ai chứ, noí rõ ra để moị người cùng giải quyết, còn chuyện kô dùn API là có thật. lập trình càng ít API thì tính tương thích cuả chương trình càng cao, vì thế nên ít xái API 1 tí ;)

danceswithwolves
30-11-2002, 04:30
chỉ KEM_WALL@ mới hiểu
wolf nói thiệt dường nào...

code đơn giản để drag form có BorderStyle = None thôi nhé ?

Nicky
30-11-2002, 21:29
Nicky không tin là một form không có Title bar mà có thể di chuyển như Form bình thường mà không cần API, à lại phải có cái MenuSystem như khi ta nhấn chuột phải vào Tilte bar vậy...
Post lên đi, Nicky thây mới tin

White_Rose
01-12-2002, 01:08
MenuSystem thì làm sao mà làm được. Lám khó ngưòi ta à?
Còn di chuyển form mà không cần dùng đến API thì đâu có gì khó. Sử dụng method Move (hoặc thay đổi Left, Top) là xong. Hi, dùng các sự kiện DragDrop và MouseDown.
Xem thêm ở đây
http://genetic.vngate.net/diendan/thread.php?threadid=3120&boardid=46&styleid=4

quaitieutu
01-12-2002, 01:59
Tin rùi,tin rùi.:D:D:D:D:D:D:D:D:D:D

Nicky
01-12-2002, 10:21
Thì Nguyen Thanh Binh đã nói :

Nếu không dùng API làm sao có đủ chức năng giống form bình thường
Thì phải có MenuSystem chớ...ai giải quyết được cái này nhỉ ??

KEM_WALL
06-12-2002, 18:43
menu system thì bạn phải dùng tới hàm api để tạo nó, nhưng mình đã cố tình bỏ title bar thì làm menu system chi nữa ;)

dtt_vn
06-12-2002, 21:25
nếu đã cố tình bỏ thì cũng không nên đòi hỏi nhiều thứ quá chứ bấy bác.

Nicky
08-12-2002, 17:26
Ờ !
Thôi thế cũng được. Nhưng mà có ai biết cách nào tạo menusystem không ? Chỉ giùm Nicky một chút...Cảm ơn !

KEM_WALL
08-12-2002, 18:30
bạn tạo 1 cái popup menu ngay chỗ góc đó là được, nếu chỉ 1 số lệnh thông thường thì cũng chẳng cần api ;)

Nguyen Thanh Binh
08-12-2002, 18:43
Xin chào các bạn. Việc tạo menu hệ thống thì xin bạn đợi mình một chút đã. Mình sẽ đưa nó lên đây sau. Còn bây giờ mình xin mạo muội đưa ra cách Subclass để lấy trạng thái của form. Giống như một chương trình bình thường, khi form đang được kích hoạt thì thanh titlebar sáng lên, còn khi bạn đang kích hoạt ứng dụng khác thì thanh titlebar của form đó tối lại.
Bạn có thể viết mã để chuẩn bị cho việc Subclass ở một module.bas. Còn mình thì thích tận dụng hơn. Mình có cái tập tin này, hay lắm, nó thay thế cho cái module.bas kia, bạn chỉ cần viết thủ tục để xử lí thông điệp thôi.


Bạn hãy đăng kí nó cho hệ thống.

Ví dụ bạn đang có một form mang tên frmMain.
Chọn References từ menu Project. Tìm VBSmart Subclass, chọn nó rồi bấm OK.

Mã của form :

Option Explicit
Private Const WM_ACTIVATEAPP = &H1C
Private Const WA_INACTIVE = 0
Private Const WA_ACTIVE = 1
'// Dòng sau đây sẽ khai báo đối tượng mới
Dim WithEvents SubClassMe As SmartSubClass

Bây giờ thì bạn có thể dùng đối tượng SubClassMe như đối tượng khác dù không thấy nó. Thêm đoạn mã sau cũng trong form đó :

Private Sub Form_Load()
Set SubClassMe = New SmartSubClasss
SubClassMe.SubClassHwnd Me.hwnd, True
End Sub

Private Sub SubClassMe_NewMessage(ByVal hwnd As Long, uMsg As Long, wParam As Long, lParam As Long, Cancel As Boolean)
Select Case uMsg
Case WM_ACTIVATEAPP
Select Case LoWord(wParam)
Case WA_INACTIVE
'// Form đang Inactive
imgTitleBar.Picture = Hinh2.Picture
Case WA_ACTIVE
'// Form đang Ative
imgTitleBar.Picture = Hinh1.Picture
End Select
Cancel = True
End Select
End Sub

Public Function LoWord(dw As Long) As Integer
If dw And &H8000& Then
LoWord = &H8000 Or (dw And &H7FFF&)
Else
LoWord = dw And &HFFFF&
End If
End Function


Xong rồi chỉ có vậy thôi. Bye !

Nicky
10-12-2002, 20:10
Cái này để làm gì vậy NTB ?

Nguyen Thanh Binh
15-12-2002, 10:43
Nếu Nicky muốn tắt TitleBar mà vẫn có sysmenu thi mình có cách rồi đây. Bạn cứ định cho form ở dạng FixedSingle rồi viết mã để dấu titlebar lúc chạy (Không làm mất). Dù sao thì khi chạy, không ai có thể thấy titlebar của form đâu. Bạn có thể xem trong cuốn "Những thủ thuật lập trình với VB và Denphi".