4 个解决方案
#1
字形是什么?
加粗,斜体,下线线这些属性吗?
if( Font->Style.Contains(fsBold) ) //fsBold 加粗, fsItalic 斜体, fsUnderline下线线
{
}
设置的时候这样
Font->Style = Font->Style << fsBold;
加粗,斜体,下线线这些属性吗?
if( Font->Style.Contains(fsBold) ) //fsBold 加粗, fsItalic 斜体, fsUnderline下线线
{
}
设置的时候这样
Font->Style = Font->Style << fsBold;
#2
Font->Style 是 TFontStyles 类型,它是 fsBold、fsItalic 等 TFontStyle 类型的一个集合。
void __fastcall TForm1::btn1Click(TObject *Sender)
{
if (dlgFont1->Execute())
{
// enum TFontStyle { fsBold, fsItalic, fsUnderline, fsStrikeOut };
TFontStyles fss = dlgFont1->Font->Style;
if (fss.Contains(fsBold))
Caption = "fsBold";
if (fss.Contains(fsItalic))
Caption = Caption + "|fsItalic";
if (fss.Contains(fsUnderline))
Caption = Caption + "|fsUnderline";
if (fss.Contains(fsStrikeOut))
Caption = Caption + "|fsStrikeOut";
}
}
#3
这个,逐个保存的话比较的费劲,用序列化的方法比较的好,我记得早期的FontDialog控件有个BUG,就是FontDialog序列化后并不能保存颜色设置,因此我这边给你一个将FontDialog设置信息保存到注册表中并还原回FontDialog中的一套完整方法给你参考:
#include <Registry.hpp>//读写注册表
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 将FontDialog控件的字体设置保存到注册表
if(FontDialog1->Execute()){
LOGFONT lf;
TRegistry ®key = *new TRegistry();
regkey.RootKey = HKEY_CURRENT_USER; // 定义跟键,如果是“HKEY_CURRENT_USER”可以省略这行
regkey.OpenKey("Software\\test",true); // 在注册表中新建一个主键,把改变的字体信息存储在主键中
GetObject(FontDialog1->Font->Handle,sizeof(lf), &lf);
regkey.WriteBinaryData("font", &lf, sizeof(lf)); // 向注册表中写入字体信息
regkey.WriteInteger("fontColor",FontDialog1->Font->Color); // 向注册表中写入字体颜色信息
regkey.CloseKey(); // 关闭该键
delete ®key; // 释放资源
Font = FontDialog1->Font;
ShowMessage("字体信息保存完毕");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{ // 读取注册表中的字体设置
TRegistry ®key100 = *new TRegistry();
regkey100.RootKey = HKEY_CURRENT_USER;
regkey100.OpenKey("Software\\test",false);
if(regkey100.ValueExists("font")){ // 从注册表取值,用于判断键值是否存在
LOGFONT lf;
regkey100.ReadBinaryData("font", &lf, sizeof(lf));
FontDialog1->Font->Handle = CreateFontIndirect(&lf); // 还原字体设置
}
if(regkey100.ValueExists("fontColor"))FontDialog1->Font->Color=regkey100.ReadInteger("fontColor"); // 还原字体颜色设置
regkey100.CloseKey(); // 关闭该键
delete ®key100; // 释放资源
Font = FontDialog1->Font;
//Memo1->Font->Assign(FontDialog1->Font);
}
#4
保存到文件的原理是一样的
#1
字形是什么?
加粗,斜体,下线线这些属性吗?
if( Font->Style.Contains(fsBold) ) //fsBold 加粗, fsItalic 斜体, fsUnderline下线线
{
}
设置的时候这样
Font->Style = Font->Style << fsBold;
加粗,斜体,下线线这些属性吗?
if( Font->Style.Contains(fsBold) ) //fsBold 加粗, fsItalic 斜体, fsUnderline下线线
{
}
设置的时候这样
Font->Style = Font->Style << fsBold;
#2
Font->Style 是 TFontStyles 类型,它是 fsBold、fsItalic 等 TFontStyle 类型的一个集合。
void __fastcall TForm1::btn1Click(TObject *Sender)
{
if (dlgFont1->Execute())
{
// enum TFontStyle { fsBold, fsItalic, fsUnderline, fsStrikeOut };
TFontStyles fss = dlgFont1->Font->Style;
if (fss.Contains(fsBold))
Caption = "fsBold";
if (fss.Contains(fsItalic))
Caption = Caption + "|fsItalic";
if (fss.Contains(fsUnderline))
Caption = Caption + "|fsUnderline";
if (fss.Contains(fsStrikeOut))
Caption = Caption + "|fsStrikeOut";
}
}
#3
这个,逐个保存的话比较的费劲,用序列化的方法比较的好,我记得早期的FontDialog控件有个BUG,就是FontDialog序列化后并不能保存颜色设置,因此我这边给你一个将FontDialog设置信息保存到注册表中并还原回FontDialog中的一套完整方法给你参考:
#include <Registry.hpp>//读写注册表
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // 将FontDialog控件的字体设置保存到注册表
if(FontDialog1->Execute()){
LOGFONT lf;
TRegistry ®key = *new TRegistry();
regkey.RootKey = HKEY_CURRENT_USER; // 定义跟键,如果是“HKEY_CURRENT_USER”可以省略这行
regkey.OpenKey("Software\\test",true); // 在注册表中新建一个主键,把改变的字体信息存储在主键中
GetObject(FontDialog1->Font->Handle,sizeof(lf), &lf);
regkey.WriteBinaryData("font", &lf, sizeof(lf)); // 向注册表中写入字体信息
regkey.WriteInteger("fontColor",FontDialog1->Font->Color); // 向注册表中写入字体颜色信息
regkey.CloseKey(); // 关闭该键
delete ®key; // 释放资源
Font = FontDialog1->Font;
ShowMessage("字体信息保存完毕");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{ // 读取注册表中的字体设置
TRegistry ®key100 = *new TRegistry();
regkey100.RootKey = HKEY_CURRENT_USER;
regkey100.OpenKey("Software\\test",false);
if(regkey100.ValueExists("font")){ // 从注册表取值,用于判断键值是否存在
LOGFONT lf;
regkey100.ReadBinaryData("font", &lf, sizeof(lf));
FontDialog1->Font->Handle = CreateFontIndirect(&lf); // 还原字体设置
}
if(regkey100.ValueExists("fontColor"))FontDialog1->Font->Color=regkey100.ReadInteger("fontColor"); // 还原字体颜色设置
regkey100.CloseKey(); // 关闭该键
delete ®key100; // 释放资源
Font = FontDialog1->Font;
//Memo1->Font->Assign(FontDialog1->Font);
}
#4
保存到文件的原理是一样的