Thanh123s
Thành viên mới

- Tham gia
- 23/2/23
- Bài viết
- 13
- Được thích
- 3
Em gửi 1 file dùng VBA tác động GDI window, để vẽ tọa độ.
Và áp dụng được trong việc viết game và trình bày báo cáo như website khá mượt
Các bước thực hiện:
1. Chia bố cục động (Giả lập CSS Grid / Flexbox)Thay vì đặt tọa độ chết, VBA dùng một Type lưu khung tọa độ (X, Y, Width, Height) cho từng khối giao diện: Thanh menu dọc (Sidebar), Hàng thẻ chỉ số (KPI Cards), Khu vực biểu đồ (Chart Area) và Bảng dữ liệu (Data Table). Mọi khối tự động co giãn theo kích thước cửa sổ.
2. Vẽ các thành phần giao diện phẳng (UI Components)Dùng các hàm GDI để vẽ giao diện theo phong cách Web (Dark Mode / Flat Design):
Và áp dụng được trong việc viết game và trình bày báo cáo như website khá mượt
Các bước thực hiện:
1. Chia bố cục động (Giả lập CSS Grid / Flexbox)Thay vì đặt tọa độ chết, VBA dùng một Type lưu khung tọa độ (X, Y, Width, Height) cho từng khối giao diện: Thanh menu dọc (Sidebar), Hàng thẻ chỉ số (KPI Cards), Khu vực biểu đồ (Chart Area) và Bảng dữ liệu (Data Table). Mọi khối tự động co giãn theo kích thước cửa sổ.
2. Vẽ các thành phần giao diện phẳng (UI Components)Dùng các hàm GDI để vẽ giao diện theo phong cách Web (Dark Mode / Flat Design):
- Thẻ bo góc (Cards & Buttons): Dùng RoundRect kết hợp CreateSolidBrush và CreatePen để vẽ các hộp chỉ số bo tròn góc có viền mảnh.
- Font chữ chuẩn Web: Dùng CreateFont gọi các bộ font như Segoe UI hoặc Inter, phân cấp rõ chữ tiêu đề (nhỏ, xám mờ) và con số KPI (to, đậm, sáng màu).
- Biểu đồ tự thích ứng: Quy đổi dữ liệu sang pixel để vẽ Bar Chart bằng FillRect hoặc Line Chart mượt bằng Polyline.
- Dùng API GetCursorPos để lấy tọa độ chuột $(X, Y)$ liên tục.
- Hiệu ứng Hover: Kiểm tra nếu tọa độ chuột lọt vào khung của thẻ KPI hoặc điểm biểu đồ $\rightarrow$ lập tức đổi màu nền thẻ sang tông sáng hơn hoặc vẽ đè một khung Tooltip hiển thị số liệu chi tiết.
- Hiệu ứng Click & Chuyển Tab: Dùng GetAsyncKeyState(VK_LBUTTON) bắt cú click chuột vào các nút Menu hoặc bộ lọc (Filter). Khi click, VBA chỉ cần đổi biến trạng thái (ví dụ: CurrentTab = "DoanhThu") và vẽ lại dữ liệu của tab đó lên cùng một mặt phẳng mà không cần chuyển Sheet.