VBA viết game và trình bày cáo cáo bằng GDI cửa sổ ảo (10 người xem)

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài
Có

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):

  • 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.
3. Bắt sự kiện chuột thời gian thực (Giả lập DOM Events)Website mượt nhờ hiệu ứng phản hồi tức thì khi di chuột. Trong vòng lặp của VBA:

  • 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.
4. Cuộn trang mượt (Smooth Scrolling)Thay vì dùng thanh cuộn giật cục theo từng dòng (row) của Excel, bạn dùng một biến ScrollOffsetY. Khi người dùng lăn chuột, VBA cộng/trừ ScrollOffsetY vào tọa độ Y của các phần tử rồi bắn hình qua BitBlt, tạo cảm giác trượt mượt mà ở tốc độ 60 FPS hệt như lướt web.
 

File đính kèm

Bài viết mới nhất

Back
Top Bottom