我想将我用的Font的设置存在一个INI文件里。但在保存和读取方面对Font.Style和Font.CharSet不知道如何处理,请各位大侠帮忙解决下。谢谢

解决方案 »

  1.   


    AnsiString __fastcall TFmMain::FontToString(TFont *f) 
    {  //调用:  AnsiString lf=FontToString(Label1->Font);
      AnsiString fs="";
      int fsy=0;
      if(f->Style.Contains(fsBold))  fsy=fsy|1;
      if(f->Style.Contains(fsItalic))  fsy=fsy|2;
      if(f->Style.Contains(fsUnderline))  fsy=fsy|4;
      if(f->Style.Contains(fsStrikeOut))  fsy=fsy|8;
      fs=AnsiString(f->Size)+","
         +AnsiString(fsy)+","
         +AnsiString((unsigned int)(f->Color))+","
         +AnsiString((unsigned int)(f->Charset))+","
         +f->Name;
      return fs;
    }bool __fastcall TFmMain::StringToCtrlFont(TControl *c,AnsiString s)
    {  //调用:  StringToCtrlFont(Label1,lf);
      int sz=-1,sty=-1;
      unsigned int clr=0;
      unsigned int scs=0;
      char fn[65]={0};
      sscanf(s.c_str(),"%d,%d,%d,%d,%64c",&sz,&sty,&clr,&scs,fn);
      if(sz>=0 && sty>=0 ) 
        fn[64]=0;
      else 
        return false;
      c->Font->Charset=TFontCharset(scs);
      c->Font->Name=AnsiString(fn);
      c->Font->Size=sz;
      c->Font->Color=TColor(clr);
      if(sty&1) c->Font->Style=c->Font->Style<<fsBold;
      else      c->Font->Style=c->Font->Style>>fsBold;
      if(sty&2) c->Font->Style=c->Font->Style<<fsItalic;
      else      c->Font->Style=c->Font->Style>>fsItalic;
      if(sty&4) c->Font->Style=c->Font->Style<<fsUnderline;
      else      c->Font->Style=c->Font->Style>>fsUnderline;
      if(sty&8) c->Font->Style=c->Font->Style<<fsStrikeOut;
      else      c->Font->Style=c->Font->Style>>fsStrikeOut;
      return true;
    }
      

  2.   

    Font.CharSetz有对应的代码,保存的时候直接保存这个代码就可以了至于Style,由于是集合性质的属性,所以我看也只能分别保存了
      

  3.   

    方法N多:
    http://www.eping.net/fourm/dispbbs.asp?boardID=8&ID=113