在开始-运行中,输入CharMap
弹出字符映射表,
选择某一字体,能够获取到该字体的有效字符,
是怎么做到的?最近正在研究这个

解决方案 »

  1.   

    字符本身就是UNICODE,和字体没有关系。具体画出来什么样子可以用CreateFont改变字体,然后画出来(TextOut)就可以了。
      

  2.   

    你没有试过CharMap,它可以过滤掉一些不必要的字符,但我们遍历的话,会全部打出来,
    问的问题是:它是怎么过滤的?
      

  3.   

    具体API函数是什么?指点一下
      

  4.   

    // 获取选择的字体的所有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宽字符