File đính kèm
Chỉnh sửa lần cuối bởi điều hành viên:
2 vấn đề này thì em biết và đã thử luôn rồi, màu nền em design bằng Photoshop luôn anh nên màu nền là chính xác luôn, nhưng dùng code không được ngoài trừ màu trắng. Em cũng chấp nhận design lại tất cả các màu trắng trên form trừ màu nền, nhưng không biết sao code lại chạy không chính xác bị "lem nhem" như anh nói.Để giảm bị "lem nhem" mầu trắng thì bạn thử cách sau.
1. Thiết kế ảnh sao cho, nền của anh mà mình muốn Trasparent phải có màu đặc biệt, khác chủ màu của cần hiển thị của anh. Ví dụ object hiển thị không có màu vbBlue thì dùng nền vbBlue
2. Trong code mwor form sửa lại lệnh là
BackColor = vbBlue
MakeUserFormTransparent Me, vbBlue 'make certain color transparent
Ví dụ của mình là màu vbBlue là nền của bức ảnh.
Tôi định xác định màu các pixel sau đó dùng hàm CombineRgn để kết hợp các pixel có màu đó và Transparent nó khỏi Form (Dí nhiên chí tốn công một lần sau đó lưu lại thành List trong file text trước khi gọi Form mình đọc các giá trị trong file Text và sử dụng thôi, lúc này tốc độ sẽ nhanh hơn rất nhiều so với đọc từ pixcel trên Form).Hay nhỉ, nhanh đó chứ. SetLayeredWindowAttributes, mình quên béng hàm này.
Hồi xưa code mấy cái transparent, hoạt hình trên Win 3x, 9x cực bỏ bu.
Bác @giaiphap sao không dùng cái này làm skin mà dùng cách code skin theo kiểu cũ, GetPixel, SetPixel... trên C/C++ còn chạy chậm bỏ cha.
Hàm này và hàm TransparentBlt sau này mới có từ Win2000
Anh có thể viết em xem file mẫu được không? Cái phần API em còn gà quá.GetPixel và SetPixel chậm là đúng rồi. Nếu trong Delphi thì ngay Delphi 5 có ScanLine rất nhanh.
Kiểu hoạt hình ABC thì cũng đơn giản. Vd. copy con cá lên màn hình thì cần 2 ảnh: ảnh con cá trên nền đen, ảnh trắng đen - chỗ con cá thì đen, nền trắng. Sau đó dùng 2 BitBlt copy liên tiếp 2 ảnh lên màn hình. Cách này khi animation sẽ hơi nhấp nháy nếu animation con cá "dịch chuyển" (bơi). Loại bỏ nhấp nháy bằng cách: dùng 2 BitBlt copy vào memory device context destDC, sau đó mới 1 BitBlt copy từ destDC vào device context màn hình.
Thay vì con cá có thể là người, xe tăng, cây, viên đạn.
Đấy là ABC chỉ dùng BitBlt. Ngoài ra có DirectX ...
Em thống nhất với anh cái chổ màu đỏ. Khôg biết thế nào, chứ rõ ràng là em chọn vùng và Fill cùng một màu không biết sao nó lại nham nhỡ thế kia.Theo tôi dùng mầu nào cũng được miễn là khác mầu ảnh. Nếu ảnh không có mầu trắng thì dùng mầu trắng làm nền và đường cắt cũng mầu trắng. Lúc này mầu trắng là crKey. Nếu lấy mầu nền, vd. trắng, làm crKey mà nhìn thấy đường viền thì chứng tỏ mầu viền không chính xác 100% bằng mầu nền.
Cái khó là cắt đường viền cho đẹp. Cắt không khéo thì nhì đường viền nhìn lởm chởm, răng cưa không được "mịn".
Nhưng bạn muốn biết cái gì? Cái con cá?Anh có thể viết em xem file mẫu được không? Cái phần API em còn gà quá.
Mình thấy thật ra cái này làm cho vui thì đc, chứ thật ra Excel có chức năng đặt mật khẩu nên nếu set pass thì có lẽ là nhanh gọn lẹ hơn. Chỉ là ý kiến cá nhân mong ko bị ăn gạch đá.
À đúng nhỉ, phân quyền này khá hay đó bác. Nhưng thực sự mình cũng chưa nghĩ đến việc Excel có thể phân quyền dc như Software vậy. Nếu đã nhỡ gợi ý rùi bác code thử vớiMục đích của việc tạo riêng form đăng nhập là để kiểm soát được user nào đã nhập để từ đó phân quyền ai được xem gì, làm gì. Set password open như bạn nói là excel quản lý cứng.
Nếu lý do là như vậy thì chưa thỏa đáng lắm anh ạ. Bởi vì nó thật sự phiền hà. Bây giờ nhân viên đăng nhập máy tính bằng mã nhân viên, thì UserName trên máy tính chính là mã nhân viên luôn. Vì vậy, VBA hoàn toàn biết được là ai đang sử dụng macro thông qua username computer, và do đó ô đăng nhập như anh nói là thừa. Anh có nghĩ vậy không, hay là thực tế còn trường hợp nào khác mà em chưa nghĩ tới?Mục đích của việc tạo riêng form đăng nhập là để kiểm soát được user nào đã nhập để từ đó phân quyền ai được xem gì, làm gì. Set password open như bạn nói là excel quản lý cứng.
À đúng nhỉ, phân quyền này khá hay đó bác. Nhưng thực sự mình cũng chưa nghĩ đến việc Excel có thể phân quyền dc như Software vậy. Nếu đã nhỡ gợi ý rùi bác code thử với
Nếu lý do là như vậy thì chưa thỏa đáng lắm anh ạ. Bởi vì nó thật sự phiền hà. Bây giờ nhân viên đăng nhập máy tính bằng mã nhân viên, thì UserName trên máy tính chính là mã nhân viên luôn. Vì vậy, VBA hoàn toàn biết được là ai đang sử dụng macro thông qua username computer, và do đó ô đăng nhập như anh nói là thừa. Anh có nghĩ vậy không, hay là thực tế còn trường hợp nào khác mà em chưa nghĩ tới?
Nếu lý do là như vậy thì chưa thỏa đáng lắm anh ạ. Bởi vì nó thật sự phiền hà. Bây giờ nhân viên đăng nhập máy tính bằng mã nhân viên, thì UserName trên máy tính chính là mã nhân viên luôn. Vì vậy, VBA hoàn toàn biết được là ai đang sử dụng macro thông qua username computer, và do đó ô đăng nhập như anh nói là thừa. Anh có nghĩ vậy không, hay là thực tế còn trường hợp nào khác mà em chưa nghĩ tới?
Mục đích của tôi trong chủ đề này tạo giao diện chứ không phải phân quyền.Mình thấy thật ra cái này làm cho vui thì đc, chứ thật ra Excel có chức năng đặt mật khẩu nên nếu set pass thì có lẽ là nhanh gọn lẹ hơn. Chỉ là ý kiến cá nhân mong ko bị ăn gạch đá.