2010-06-06 6 views
14

Tôi đang làm việc trên một ứng dụng yêu cầu một phông chữ loại mã vạch thực sự cụ thể không có khả năng trên PC của người dùng.Nhúng một phông chữ vào delphi

Tôi có thể nhúng phông chữ vào ứng dụng bằng cách nào đó hoặc tôi có cần sử dụng trình cài đặt để cài đặt phông chữ không?

+5

Bạn có thể làm cả hai. Tôi có 1 câu hỏi, đó là phông chữ của bạn? hoặc, bạn có thể phân phối lại không? –

+1

Bạn có thể nhúng nó làm tài nguyên. Xem thêm http://stackoverflow.com/questions/2305344/how-to-use-external-fonts –

Trả lời

7

Có, bạn có thể lưu nó dưới dạng tài nguyên trong tệp EXE và trên máy tính của người dùng, bạn có thể trích xuất tệp dưới dạng tệp bằng cách sử dụng cá thể TResourceStream. Sau đó, bạn có thể gọi hàm AddFontResource API. Cuối cùng, bạn nên gửi một tin nhắn WM_FONTCHANGE đến tất cả các cửa sổ cấp cao nhất trong hệ thống (Kiểm tra phần Ghi chú của mô tả AddFontResource trong trang web MSDN).

Nếu bạn cần mã mẫu, hãy cho tôi biết.

+2

Lưu ý rằng bạn có thể vi phạm một số luật bản quyền hoặc hạn chế giấy phép, nếu bạn không có quyền phân phối lại cho phông chữ này. –

10

Theo tôi, cách dễ nhất là sử dụng AddFontMemResourceEx trong trường hợp phông chữ được nhúng dưới dạng tài nguyên vào EXE. Nó cho phép tải phông chữ trực tiếp từ bộ nhớ, không cần phải lưu phông chữ vào tệp.

Mã số Ví dụ:

function LoadResourceFont(const ResourceName, FontName : string) : boolean; 
var 
    ResStream : tResourceStream; 
    FontsCount : integer; 
    hFont : tHandle; 
begin 
    ResStream := tResourceStream.Create(hInstance, ResourceName, RT_RCDATA); 
    hFont := AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount); 
    result := (hFont <> 0); 
    ResStream.Free(); 
end;