关于在组件中调用word输入试题信息,在word中输入试题信息,因为试题信息比较复杂,可能有特殊符号/公式/图片表格等信息,所以调用word,关闭后返回试题信息到该组件,能保存组件中的试题信息到数据库,能从数据库中读出该试题信息显示到组件中,可是richedit不行呀,怎么实现这个功能?
解决方案 »
- 怎么对toolbar上的一个toolbutton发送点击消息?
- 我想要实现的是那种就像浏览文件夹那样,在根目录中建一个文件夹后会在执行后的treeview中显现出来,其文件夹中的txt或doc文件能够显现在richedit中
- 一个画圆的算法,大家看看什么地方错了
- 高分求: dll在中使用DOMDocument出错,高手赐教...
- 各位大哥帮忙,一个小小的报表问题
- 连接excel自动化服务器的问题
- 记事本的关于,调用了哪个dll的哪个函数?
- 键盘消息被vcl处理过程的一点心得
- PE文件
- 如何屏蔽 with ?
- access 中两张表有共同的字段帐号,查询同一帐号在两张表中出现次数大于1的记录。
- 有深圳的想做DELPHI+SQLSERVER 开发兼职吗?
读到OleContainer:
先 MyMemoryStream.CopyFrom(ADOBlobStream,ADOBlobStream.Size);
然后 OleContainer1.LoadFromStream(MyMemoryStream)从OleContainer保存到数据库:
先 OleContainer1.SaveToStream(MyMemoryStream);
然后 ADOBlobStream.CopyFrom(MyMemoryStream,MyMemoryStream.Size);
你可以把你要调用的Word文档以二进制的形式存进数据库里,然后再读取到OleContainer中显示出来,它是可以编辑修改的,就像直接使用Word一样,最后你可以把修改后的文档再次存进数据库,那就实现了你要的功能了。
你可以先双击那OleContainer新建一个Word文档对象
大概写了个代码,你看看吧://把Ole中的文档存到数据库
procedure TForm1.BtnSaveFromOleClick(Sender: TObject);
var
MyBlobStream : TADOBlobStream;
MyMemoryStream : TMemoryStream;
BlobFiled : TBlobField;
begin
ADOQuery2.Open; //连接到你要操作的数据表
ADOQuery2.Insert;
MyMemoryStream := TMemoryStream.Create;
OleContainer1.SaveToStream(MyMemoryStream);
BlobFiled := TBlobField(ADOQuery2.FieldByName('FileBlob')); //假设存文档的字段为FileBlob
MyBlobStream := TADOBlobStream.Create(BlobFiled, bmWrite);
Try
MyBlobStream.Seek(0, soFromBeginning);
MyMemoryStream.Position := 0;
MyBlobStream.CopyFrom(MyMemoryStream, MyMemoryStream.Size);
finally
MyMemoryStream.Free;
MyBlobStream.Free;
end;
ADOQuery2.Post;end;//读到Ole
procedure TForm1.BtnLoadFromOleClick(Sender: TObject);
var
MyBlobStream : TADOBlobStream;
MyMemoryStream : TMemoryStream;
BlobFiled : TBlobField;
begin
if MemoSqlCmd.Text <> '' then
ADOQuery2.SQL.Text := MemoSqlCmd.Text; //这里用了个Memo写SQL语句
if ADOQuery2.Active then Close;
ADOQuery2.Open;
BlobFiled := TBlobField(ADOQuery2.FieldByName('FileBlob'));
MyMemoryStream := TMemoryStream.Create;
MyBlobStream := TADOBlobStream.Create(BlobFiled, bmRead);
Try
MyMemoryStream.CopyFrom(MyBlobStream, MyBlobStream.Size);
MyMemoryStream.Position := 0;
OleContainer1.LoadFromStream(MyMemoryStream);
finally
MyBlobStream.Free;
MyMemoryStream.Free;
end;
OleContainer1.Run;
end;