分享

delphi中利用TRichEdit实现上标 下标问题

 aaie_ 2011-12-09

最近做项目时候,遇到一些需要上标的问题,如:10的6次方。一般的文本控件无法实现,幸好delphi中有TRichEdit控件可以解决此类问题。现将实现过程叙述如下:

1、新建一个工程,就按默认命名吧。在form1上放至3个button及1个RichEdit,其name分别为:button1,button2,button3,RichEdit1。

为了达到上下标的格式,则需要一个处理函数,目的是设置其在y方向上的偏移量。过程如下:

procedure MySetCharFormat(var RichEdit:TRichEdit;CharacterFormat:TCharacterFormat);
var
Format:TCharFormat;
begin
Format.cbSize:= sizeof(Format);
Format.dwMask:= CFM_OFFSET;
case (CharacterFormat) of
CFM_Superscript:
Format.yOffset:= 60;
CFM_Subscript:
Format.yOffset:= -60;
CFM_Normal:
Format.yOffset:= 0;
end;
RichEdit.Perform(EM_SETCHARFORMAT,SCF_SELECTION,Longint(@Format));
end;

大家可能看到上面的case中出现的枚举类型了吧,对了,还要在form1的var form1:Tform1;上面加上一个枚举类型 type TCharacterFormat=(CFM_Superscript, // 上标
CFM_Subscript, // 下标
CFM_Normal // 正常文本
);

下面在button1的onclick事件中实现上标:

procedure TForm1.Button1Click(Sender: TObject);
begin
MySetCharFormat(RichEdit1,CFM_Superscript);
end;

在button2的onclick事件中实现下标:

procedure TForm1.Button2Click(Sender: TObject);
begin
MySetCharFormat(RichEdit1,CFM_Subscript);
end;

在button3的onclick事件中实现正常显示:

procedure TForm1.Button3Click(Sender: TObject);
begin
MySetCharFormat(RichEdit1,CFM_Normal);
end;

以上就实现了上下标的要求了。

下面要将此文本格式要保存到数据库中。

在你的数据库中建立一张表叫UpDownFlag,建立一个字段叫info其类型为text。

此时在form1上再放两个button,分别命名为btnSave,btnRead.

在btnSave的OnClick事件中如下:

procedure TForm1.btnSaveClick(Sender: TObject);
var
StringStream : Tmemorystream;
begin
try
StringStream :=Tmemorystream.Create;
RichEdit1.Lines.SaveToStream(StringStream); //在这里创建一个流
RichEdit1.PlainText := true;

with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('insert into UpDownFlag(info) values(:a)');
Parameters.ParamByName('a').LoadFromStream(StringStream,ftString);
ExecSQL;
end;

finally
StringStream.Free; //用完了马上Free掉
end;

end;

读取信息时,在btnRead的Onclick事件中如下代码:

procedure TForm1.btnReadClick(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from UpDownFlag');
Open;
Last;
RichEdit1.Text := FieldByName('info').AsString;
end;
end;

好了,这个写入与读取副文本格式的小例子就结束了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多