• Thứ Ba, 23/12/2003 09:50 (GMT+7)

    Câu hỏi :
    Tôi muốn viết chương trình bằng VB để khi chạy sẽ tự động copy file MS Sansserif bảng mã tiếng Việt đè lên file MS Sansserif cũ (tương tự như khi cài chương trình Vietware để thay font MS Sansserif). Nếu sử dụng các lệnh copy thông thường thì bị báo lỗi. Xin quý báo chỉ giúp cách giải quyết, đồng thời chỉ giúp cách viết 1 đoạn chương trình để khi chạy sẽ kiểm tra xem font cần có đã được cài chưa, nếu chưa thì tự động cài đặt.

    Trả lời :

    Font MS Sansserif được Windows dùng để hiển thị rất nhiều phần tử giao diện, do đó nó hầu như được dùng liên tục từ lúc Windows khởi động đến lúc Shutdown. Chính vì nó đang được dùng nên nếu bạn dùng các lệnh thông thường để xóa/copy file font MS Sansserif, máy sẽ báo lỗi và không cho bạn thực hiện. Để giải quyết vấn đề này, bạn nên gọi các hàm API về quản lý font của Windows, đoạn chương trình C++ sau đây sẽ cho phép bạn thay thế file font MS Sansserif (có hỗ trợ mã tiếng Việt của bạn) vào hệ thống:

     

    BOOL ret;

    // Uninstall font MS Sansserif

    // #1(sserife.fon) của Windows

    ret = RemoveFontResource(“c:\\windows\\ fonts\\sserife.fon”));

    // Xóa các thuộc tính đặc biệt của file như

    // ReadOnly,...

    ret = SetFileAttributes(“c:\\windows\\ fonts\\sserife.fon”,FILE_ATTRIBUTE_NORMAL);

    // Xóa file font

    DeleteFile(“c:\\windows\\fonts\\sserife.fon”);

    // Copy file font MS Sansserif của bạn vào

    // thư mục font

    ret = CopyFile(“c:\\mydata\\ sserife.fon”,”c:\\windows\\fonts\\ sserife.fon”,FALSE);

    // Install font mới vào Windows

    ret = AddFontResource(“c:\\windows\\ fonts\\sserife.fon”);

           

    // Uninstall font MS Sansserif

    // #2(sseriff.fon) của Windows

    ret = RemoveFontResource(“c:\\windows\\ fonts\\sseriff.fon”));

    // Xóa các thuộc tính đặc biệt của file như

    // ReadOnly,...

    ret = SetFileAttributes(“c:\\windows\\ fonts\\sseriff.fon”,FILE_ATTRIBUTE_NORMAL);

     

    // Xóa file font

    DeleteFile(“c:\\windows\\fonts\\ sseriff.fon”);

    // Copy file font MS Sansserif của bạn vào

    // thư mục font

    ret = CopyFile(“c:\\mydata\\ sseriff.fon”,”c:\\windows\\fonts\\ sseriff.fon”,FALSE);

    // Install font mới vào Windows

    ret = AddFontResource(“c:\\windows\\ fonts\\sseriff.fon”);

     

    Để biết danh sách font hiện hành của Windows, bạn có thể gọi hàm API EnumFonts() và hàm callback EnumFontNames() kết hợp. Qui trình sử dụng cụ thể của 2 hàm này được trình bày rõ ràng trong CD MSDN thuộc bộ Visual Studio 2000 của Microsoft.

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