主要是对GetFontUnicodeRanges的使用
// 获取选择的字体的所有Unicode范围
procedure TMarkerSymForm.doGetUnicodeRange;
var
size : DWORD;
lpgs : PGlyphSet;
i, j : Integer;
nStart, nEnd : Integer;
oldFont : string;
begin
m_Unicode := ' ';
oldFont := dgCMCharacter.Canvas.Font.Name;
dgCMCharacter.Canvas.Font.Name := fcboCMFont.FontName;
size := GetFontUnicodeRanges(dgCMCharacter.Canvas.Handle, nil);
if size < > 0 then begin
GetMem(lpgs, size);
GetFontUnicodeRanges(dgCMCharacter.Canvas.Handle, lpgs);
for i := 0 to lpgs.cRanges do begin
nStart := Integer(lpgs.ranges[i].wcLow);
nEnd := nStart + lpgs.ranges[i].cGlyphs;
for j := nStart to nEnd do begin
m_Unicode := m_Unicode + WChar(j);
end;
end;
Dispose(lpgs);
end;
dgCMCharacter.Canvas.Font.Name := oldFont;
end;
// m_Unicode保存字体中所有的Unicode宽字符
// 获取选择的字体的所有Unicode范围
procedure TMarkerSymForm.doGetUnicodeRange;
var
size : DWORD;
lpgs : PGlyphSet;
i, j : Integer;
nStart, nEnd : Integer;
oldFont : string;
begin
m_Unicode := ' ';
oldFont := dgCMCharacter.Canvas.Font.Name;
dgCMCharacter.Canvas.Font.Name := fcboCMFont.FontName;
size := GetFontUnicodeRanges(dgCMCharacter.Canvas.Handle, nil);
if size < > 0 then begin
GetMem(lpgs, size);
GetFontUnicodeRanges(dgCMCharacter.Canvas.Handle, lpgs);
for i := 0 to lpgs.cRanges do begin
nStart := Integer(lpgs.ranges[i].wcLow);
nEnd := nStart + lpgs.ranges[i].cGlyphs;
for j := nStart to nEnd do begin
m_Unicode := m_Unicode + WChar(j);
end;
end;
Dispose(lpgs);
end;
dgCMCharacter.Canvas.Font.Name := oldFont;
end;
// m_Unicode保存字体中所有的Unicode宽字符