Dùng hàm GetPixel để lấy màu trên UserForm nhưng kết quả không chính xác.

Liên hệ QC

giaiphap

==(^o^)==
Tham gia
12/3/07
Bài viết
5,778
Được thích
6,274
Donate (Momo)
Donate
Giới tính
Nam
Mình dùng hàm GetPixel để lấy màu trên UserForm, nhưng không biết tại sao nó lấy không đúng và không lấy được hết tất cả các điểm trên UserForm. Cụ thể là mình muốn lấy màu hồng (Có mã màu Rgb(255,0,255)) trên UserForm, nhưng trên UserForm có màu hồng (Màu hồng này mình tô bằng Photoshop nên chắc chắc màu chính xác) xung quanh nhưng không biết tại sao mình dùng GetPixel để lấy những điểm màu hồng này ra thì nó lại không chính xác, thậm chí nó không lấy hết các màu trên UserForm nửa (Nó chỉ lấy phần trên còn phần dưới không lấy luôn), mình mò hoài vẫn chưa tìm ra nguyên nhân, bạn nào có kinh nghiệm dùng API GetPixel để lấy mã màu hướng dẫn mình khắc phục với. Cảm ơn mọi người trước!
 

File đính kèm

  • Get Color.xlsm
    88 KB · Đọc: 14
Hì hì, lại thiếu Option Explicit.
Thấy code nào mà không có dòng này là tui ngán hơm cơm nếp
Code bác sai nhiều lắm, tại sao lại * 2 Width và Height ? GetPixel lấy tọa độ pixel, chứ không phải tọa độ point, hay còn gọi là twips (1/72 inch) trong VB, VBA Userform.
Mà thôi, mục đích bác có code chạy được đã, thì cứ tạm copy, xem cái code này. Từ từ tìm hiểu sau. Nó tựa tựa đó, userform với image.
PS: Vì vậy cu anh tui mới nói VBA mà dùng API nó cứ tréo ngoe cẳng ngỗng sao đấy, như xe bò chạy trên cao tốc nối VN qua tàu.
 
Upvote 0
Hì hì, lại thiếu Option Explicit.
Thấy code nào mà không có dòng này là tui ngán hơm cơm nếp
Trước hết cảm ơn bạn rất nhiều! Cái vụ API mình không rành lắm, mới tìm hiểu thử có vài hàm xem thế nào nên sai xót sẽ là điều hiển nhiên.
Code bác sai nhiều lắm, tại sao lại * 2 Width và Height ? GetPixel lấy tọa độ pixel, chứ không phải tọa độ point, hay còn gọi là twips (1/72 inch) trong VB, VBA Userform.
Cái vụ pixel thì mình cũng không rõ nên mình ghi đại vậy để test thử thôi, chứ trước khi đưa code lên đây mình có tham khảo một đoạn code họ ghi thế này.
Mã:
i = CInt(Me.InsideHeight / 0.748) - 1
j = CInt(Me.InsideWidth / 0.748) - 1
nhưng kết quả vẫn không như ý muốn, cụ thể mặc dù j >500 nhưng code vẫn chỉ chạy khoảng 139 hàng thôi.
Từ từ tìm hiểu sau. Nó tựa tựa đó, userform với image.
PS: Vì vậy cu anh tui mới nói VBA mà dùng API nó cứ tréo ngoe cẳng ngỗng sao đấy, như xe bò chạy trên cao tốc nối VN qua tàu.
Những địa chỉ bạn nêu ở đây mình cũng từng tìm kiếm và nhìn thấy nó, nhưng vẫn chưa áp dụng được.
Cái mục đích chính của mình là muốn tìm hiểu cách lấy màu của các điểm trên UserForm, nhưng code lấy màu không chính xác và nó cũng chạy không hết vòng lặp, cụ thể trong code là nó chạy đủ giá trị của i (tọa độ theo chiều ngang) nhưng nó lại không chạy đủ giá trị của j (tọa độ theo chiều dọc), bạn có kinh nghiệm có thế giải thích nguyên nhân được không?
 
Upvote 0
Web KT
Back
Top Bottom