• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Vẽ trục tọa độ X,Y lên màn hình Desktop

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
User avatar
NoBi
Quản trị
Quản trị
Posts: 959
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Vẽ trục tọa độ X,Y lên màn hình Desktop

Postby NoBi » Sat 28/03/2009 11:04 am

Thủ thuật: Vẽ trục tọa độ X,Y lên màn hình Desktop
Tác giả: Sưu tầm
Mô tả: Vẽ trục tọa độ X,Y của màn hình Desktop lên Form


Code: Select all

  1. Option Explicit
  2. Private Const ULW_COLORKEY = &H1
  3.  
  4. Private Const GWL_EXSTYLE = (-20)
  5. Private Const WS_EX_LAYERED = &H80000
  6. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  7. Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
  8. Dim xx As Single, yy As Single
  9.  
  10. Private Sub Form_Load()
  11.     Transparent
  12. End Sub
  13.  
  14. Private Sub Transparent()
  15.     Me.BackColor = &HFFCCCC
  16.     SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
  17.     SetLayeredWindowAttributes Me.hwnd, &HFFCCCC, 0, ULW_COLORKEY
  18. End Sub
  19.  
  20. Private Sub Form_Click()
  21.     End
  22. End Sub
  23.  
  24. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  25.     'DoEvents
  26.     'Me.Cls
  27.     Me.DrawStyle = 1
  28.     Me.ForeColor = &HFF&
  29.  
  30.     ' Delete line
  31.     Me.Line (0, yy)-(Me.ScaleWidth, yy), Me.BackColor
  32.     Me.Line (xx, 0)-(xx, Me.ScaleHeight), Me.BackColor
  33.    
  34.     xx = x
  35.     yy = y
  36.    
  37.     Me.Line (0, y)-(Me.ScaleWidth, y)
  38.     Me.Line (x, 0)-(x, Me.ScaleHeight)
  39.  
  40.     LoadX
  41.     LoadY
  42. End Sub
  43.  
  44. Private Sub LoadY()
  45.     Dim i%, iCount%
  46.     iCount = Screen.Height / Screen.TwipsPerPixelY / 10
  47.     Me.CurrentX = 100
  48.     For i = 0 To iCount
  49.         Me.CurrentY = i * 10 * Screen.TwipsPerPixelY
  50.         If i Mod 5 = 0 Then
  51.             Me.Line (0, Me.CurrentY)-(100, Me.CurrentY)
  52.             Me.CurrentY = Me.CurrentY - (Me.TextHeight(i) / 2)
  53.             If i = 0 Then Me.CurrentY = -500
  54.             Print (i * 10)
  55.         Else
  56.             Me.Line (0, Me.CurrentY)-(50, Me.CurrentY)
  57.         End If
  58.     Next
  59. End Sub
  60.  
  61. Private Sub LoadX()
  62.     Dim i%, iCount%
  63.     iCount = Screen.Width / Screen.TwipsPerPixelX / 10
  64.     Me.CurrentY = 100
  65.     For i = 0 To iCount
  66.         Me.CurrentX = i * 10 * Screen.TwipsPerPixelX
  67.         If i Mod 5 = 0 Then
  68.             Me.Line (Me.CurrentX, 0)-(Me.CurrentX, 100)
  69.             Me.CurrentX = Me.CurrentX - (Me.TextWidth(CStr(i * 100)) / 2)
  70.             If i = 0 Then Me.CurrentX = 5 * Screen.TwipsPerPixelX
  71.             Print i * 10
  72.         Else
  73.             Me.Line (Me.CurrentX, 0)-(Me.CurrentX, 50)
  74.         End If
  75.     Next
  76. End Sub
  77.  
  78. Private Sub Form_Paint()
  79.     Me.FontSize = 10
  80.     LoadX
  81.     LoadY
  82. End Sub
Attachments
DrawXY.rar
(1.87 KiB) Downloaded 595 times


:>

User avatar
truongphu
VIP
VIP
Posts: 4765
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Vẽ trục tọa độ X,Y lên màn hình Desktop

Postby truongphu » Sat 28/03/2009 8:06 pm

1- Bạn nào có card màn hình tốt thì dùng hết code trên
- - -> Card yếu (32MB trở lại) thì đừng Load Transparent @-)
(Đấy là ghi nhận trên máy cũ của tôi: PIII 800 32Mb)

2- Xóa line bằng Me.BackColor là hay, form show ngọt hơn là Me.Clear = bị giật

Code trên Rất Tốt
------------------------------------
Code sau đây gọi là học hỏi: đơn giản và dễ hiểu ;)

Code: Select all

  1. Option Explicit
  2. Dim xx As Long, yy As Single ' <-- cho phù ho'p x và y
  3.                 ' code truongphu
  4. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
  5. Truc
  6.     Me.DrawStyle = 3 'Dash - dot
  7.     Me.Line (0, yy)-(Me.Width, yy), Me.BackColor '<- hoc chiêu nâ`y Xóa =
  8.     Me.Line (xx, 0)-(xx, Me.Height), Me.BackColor ' ve thêm cùng màu là không thâ'y
  9.             xx = x
  10.             yy = y
  11.     Me.Line (0, y)-(Me.Width, y)
  12.     Me.Line (x, 0)-(x, Me.Height)
  13. Me.Caption = "x= " & x \ 15 & "   y= " & y \ 15 ' chia lâ'y phâ`n nguyên
  14. End Sub
  15.  
  16. Private Sub Form_Paint()
  17.     Truc
  18. End Sub
  19.  
  20. Private Sub Truc()
  21. Me.ForeColor = vbBlue
  22. Dim i As Long
  23.     For i = 0 To Me.Width        ' chung cho 2 truc
  24.         If i Mod 750 = 0 And i <> 0 Then
  25.             Me.Line (i, 0)-(i, 100)  'Ðánh dâ'u truc x cao
  26.             Me.CurrentX = i - 200    ' Ðu'a con tro chay ngang lùi môt ký tu'
  27.                 Print i \ 15          ' In sô' truc x
  28.             Me.Line (0, i)-(100, i) 'Ðánh dâ'u truc y cao
  29.             Me.CurrentY = i - 100 ' Ðu'a con tro chay doc lùi nu'a ký tu'
  30.                 Print i \ 15          ' In sô' truc y
  31.         ElseIf i Mod 150 = 0 Then
  32.             Me.Line (i, 0)-(i, 50) 'Ðánh dâ'u truc x, con tro chay ngang
  33.             Me.Line (0, i)-(50, i) 'Ðánh dâ'u truc y, con tro chay doc
  34.         End If
  35.     Next i
  36. End Sub 


Tập tin Toa Ðô New.rar bên dưới cần sửa lại đoạn code Private Sub Truc() cho gọn. Tôi mới cập nhật
Attachments
Toa Ðô New.rar
(1.32 KiB) Downloaded 393 times
Last edited by truongphu on Mon 30/03/2009 10:59 am, edited 1 time in total.
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

User avatar
NoBi
Quản trị
Quản trị
Posts: 959
Joined: Tue 18/03/2008 1:22 pm
Location: Sài Gòn
Has thanked: 53 times
Been thanked: 66 times
Contact:

Re: Vẽ trục tọa độ X,Y lên màn hình Desktop

Postby NoBi » Mon 30/03/2009 10:31 am

truongphu wrote:Dim xx As Long, yy As Long ' chi câ`n Long
                ' code truongphu

Hai biến này nó nhận giá trị của X và Y là kiểu Single, sao lại khai báo nó kiểu Long vậy chú?.
1. Có lẻ do VB tự động ép kiểu nên không báo lỗi, với thói quen "ăn gian" này, khi chú chuyển lên C# hay java thì hơi mệt đấy. :)
2. Do phần lẻ đó quá nhỏ so với phần nguyên cần lấy nên không thấy rỏ khác biệt khi bỏ phần số lẻ đi. :P
:>

User avatar
truongphu
VIP
VIP
Posts: 4765
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 519 times

Re: Vẽ trục tọa độ X,Y lên màn hình Desktop

Postby truongphu » Mon 30/03/2009 10:58 am

Đúng là x và y được khai báo kiểu single, tuy nhiên tôi có test thử:
Trong Form_MouseMove cho Text1.Text = x thấy trị số x luôn luôn là integer!
Để đúng về logic code, thống nhất sửa lại

Code: Select all

  1. Dim xx As Single, yy As Single

Cảm ơn NoBi
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Return to “[VB] Mẹo vặt khác”

Who is online

Users browsing this forum: No registered users and 0 guests