• Thứ Hai, 22/12/2003 10:43 (GMT+7)

    Câu hỏi :
    Tôi cần lập trình công cụ soạn thảo văn bản có khả năng xác định vị trí dấu nháy khi gõ văn bản (cột và dòng). Tôi chỉ xác định được chính xác khi dùng font Courier New (font có độ rộng ký tự cố định), còn khi dùng các font khác thì không thể xác định đúng cột. Xin hướng dẫn.

    Trả lời :
     

    Nếu chính bạn viết đoạn code thiết lập font chữ, co chữ và xuất các hàng văn bản cũng như xuất cursor nhập liệu ra cửa sổ soạn thảo thì việc nhận biết vị trí cursor nhập liệu là hiển nhiên (vì chính chương trình của bạn điều khiển vị trí hiển thị của cursor ở hàng nào, ký tự nào). Còn việc nhận dạng vị trí cursor chuột đang ở đâu để chuyển cursor nhập liệu về vị trí ấy có thể được thực hiện theo nguyên tắc sau:

    • Tất cả các hàng văn bản được xuất ra cửa sổ đều được quản lý bên trong chương trình như 1 danh sách các phần tử, mỗi phần tử quản lý thông tin hiển thị của 1 hàng gồm các thông tin sau: chuỗi văn bản của hàng đó, tọa độ (x,y) của ký tự đầu của hàng đó, font chữ, co chữ được dùng...

    • Khi người dùng click chuột ở vị trí nào đó, chương trình sẽ đọc được tọa độ (x,y) của cursor rồi dùng vòng lập so sánh xem tọa độ y của cursor rơi vào hàng văn bản nào. Để xác định tọa độ x của cursor chuột tương ứng với ký tự nào trên hàng vừa xác định, bạn có thể gọi hàm API GetCharWidthFloat (hay biến thể của nó) để tìm độ rộng của các ký tự dùng font chữ và co chữ hiện hành, từ đó tính được vị trí ký tự nào trong hàng tương ứng với tọa độ x của cursor chuột (cộng dồn độ rộng từng ký tự của hàng từ trái sang phải đến khi tổng kích thước bằng giá trị x thì dừng lại).

    Chuyên mục: Lập trình