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;
问的问题是:它是怎么过滤的?
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宽字符