最近做项目时候,遇到一些需要上标的问题,如: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;
好了,这个写入与读取副文本格式的小例子就结束了。
|