好看的rou小说你懂的:关于c++ buider RichEdit->SelAttributes->Style的问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/07 11:28:38
关于c++ buider RichEdit->SelAttributes->Style的问题

近日来学习中,编写一个写字板程序,想实现MSWord中的加黑、斜体及下划线等功能,发现用以下方法并不能达到其预想功能。
例如MSWord中有一文字:“为人民服务”,其中“人民”为黑体,“服务”为斜体。我想在其基础上把“为人民服务”几个字再加上下划线。在MSWord中只需选中“为人民服务”,再点击“U”按钮既可。而我用c++ buider 中的RichEdit->SelAttributes->Style并不能达到这样的效果,请问这是为什么呢?
请见如下代码:
void __fastcall TMainForm::ToolButtonBClick(TObject *Sender)
{
if (ToolButtonB->Down) //为选定文本加入粗体属性
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold;

else
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()>>fsBold;
}

void __fastcall TMainForm::ToolButtonIClick(TObject *Sender)
{
if (ToolButtonI->Down) //为选定文本加入粗体属性
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()<<fsItalic;

else
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()>>fsItalic;
}
这是加黑及加斜体的代码。而加下划线代码类似(省略。。。)
以上代码只能使其加同一种Style,例如:“为”字,加了黑体就不能加斜体了。
而我进步修改了以上程序,程序片断如下:
void __fastcall TMainForm::ToolButtonBClick(TObject *Sender)
{
TMDIChild *NowChild=(TMDIChild *)ActiveMDIChild;
if (!ActiveMDIChild) return; //如果没有激活状态的子窗体,直接返回
if (ToolButtonB->Down && ToolButtonI->Down && ToolButtonU->Down)
//为选定文本加入粗体、斜体、下划线属性
{NowChild->RichEdit1->SelAttributes->Style=
TFontStyles()<<fsBold<<fsItalic<<fsUnderline;return;}
if (ToolButtonB->Down && ToolButtonI->Down)
//为选定文本加入粗体、斜体属性
{NowChild->RichEdit1->SelAttributes->Style=
TFontStyles()<<fsBold<<fsItalic;return;}
if (ToolButtonB->Down && ToolButtonU->Down)
//为选定文本加入粗体、下划线属性
{NowChild->RichEdit1->SelAttributes->Style=
TFontStyles()<<fsBold<<fsUnderline;return;}
if (ToolButtonB->Down) //为选定文本加入粗体属性
{NowChild->RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold;return;}

else
…………
}
这是加黑的代码。而加斜体及加下划线代码类似(省略。。。)
发现虽然可以实现同一文字同时拥有多种Style但,但也无法实现像文章开头所说的MSWord的功能。
虽然加入更多的代码运算可以实现MSWord的功能,但是难道这简单的加黑功能,非要加上近百句的代码才能实现吗???
百思不得其解,可能还有些属性我不知道,所以望各位高手帮小弟。。。
是啊,如果是以下代码的话,只能使文字只有一种Style,例如:“为”字,点击了“B”按钮后加黑,然后再点“I”按钮(即斜体按钮)后加斜体,而加黑属性没有了。。
void __fastcall TMainForm::ToolButtonBClick(TObject *Sender)
{
if (ToolButtonB->Down) //为选定文本加入粗体属性
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold;

else
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()>>fsBold;
}

void __fastcall TMainForm::ToolButtonIClick(TObject *Sender)
{
if (ToolButtonI->Down) //为选定文本加入斜体属性
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()<<fsItalic;

else
NowChild->RichEdit1->SelAttributes->Style=TFontStyles()>>fsItalic;
}

思路混乱啊。

正确的解题应该是这样子滴,我想。。。。

1.事件在点击各个按钮时分别触发。
2.获取选中的文字
3.得到文字的style及其属性值。
4.如果点击的是加粗按钮,则看style属性值是否已经有加粗,
如果已经加粗,则去掉加粗属性;如果没有加粗,则加粗。
也就是说仅改变style的粗体属性。
5.同理,不应该去判断当前按下了的那些按钮状态。