字体的style怎么保存到文本文件里?

Chris 2003-01-18 11:23:54
如題
...全文
44 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
myy 2003-01-18
  • 打赏
  • 举报
回复
注意StringToCtrlFont,FontToString是成对的,因为他们的格式是约定的,
当然,你也可以自己另外定义字符串格式。
myy 2003-01-18
  • 打赏
  • 举报
回复
Sorry,我这样写是为了通用,但没想到 TControl::Font 是protected的,
你用的时候,可以改为:

bool __fastcall TFmMain::StringToCtrlFont(TForn *f,AnsiString s)
{
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;
f->Charset=TFontCharset(scs);
f->Name=AnsiString(fn);
f->Size=sz;
f->Color=TColor(clr);
if(sty&1) f->Style=f->Style<<fsBold;
else f->Style=f->Style>>fsBold;
if(sty&2) f->Style=f->Style<<fsItalic;
else f->Style=f->Style>>fsItalic;
if(sty&4) f->Style=f->Style<<fsUnderline;
else f->Style=f->Style>>fsUnderline;
if(sty&8) f->Style=f->Style<<fsStrikeOut;
else f->Style=f->Style>>fsStrikeOut;
return true;
}

但调用时要:

StringToCtrlFont(Label1->Font,"字符串");
Chris 2003-01-18
  • 打赏
  • 举报
回复
多谢但是提示TControl::Font' is not accessible
myy 2003-01-18
  • 打赏
  • 举报
回复
AnsiString __fastcall TFmMain::FontToString(TFont *f)
{
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)
{
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;
}
Chris 2003-01-18
  • 打赏
  • 举报
回复
没人会吗?

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧