技术开发 频道

Delphi与Word之间的融合技术(3)

   【IT168 技术文档】 五、从数据库读取文件到本地硬盘和从本地硬盘读取文件到数据库

    在数据库上使用Image二进制字段保存,使用Stream流的方式。

    创建文件流:

    Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);

    Word_FileStream.Position:=0;

    保存到数据库的Image字段:

    TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);

    从数据库读取文件到本地硬盘:

   TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);

    释放文件流:

    Word_FileStream.Free;

    六、全局消息的定义

    因为word和Delphi程序是两个软件,相互之间通讯比较麻烦,所以使用全局消息的方法进行。全局消息必须首先注册,Windows返回系统空闲的消息号,当注册的消息相同时,Windows系统返回同一个值,这样就保证了使用这个消息号在两个程序之间通讯。

    定义消息的办法:

    szMessageString: pchar = ''XIDIAN_11_Stone'';

    FMyJoinMessage := RegisterWindowMessage(szMessageString);

    发送消息的方法:

    SendMessage(对方句柄,消息,消息附带短变量,消息附带长变量)

    七、Delphi程序接收消息的方法

    Delphi接收消息有两种,一是重载特定消息,二是重载WndProc函数,在里面选择相应消息进行处理。

    法一,每次只能处理一条消息,而法二能够同时处理多条消息。
 
    对于法二,声明如下:

    procedure WndProc(var Message: Tmessage);override

    必须注意,使用时需要在处理完自己消息处理后继承WndProc(Message)函数,否则系统会崩溃!

    八、Word中Combo对话框的动态生成以及Change事件

    建立类模块Combohander,在内部定义事件

    Public WithEvents ComboBoxEvent As Office.CommandBarComboBox

    定义Combo控件产生事件的模块

   Dim ctlComboBoxHandler As New ComboBoxHandler

   产生Combo对话框

   Set Cbo_ChooseDoc = CommandBars("添加的菜单").Controls.Add(Type:=msoControlComboBox, Temporary:=True)

    进行文件句柄设置,以产生Combo_Change事件

    Set ctlComboBoxHandler.ComboBoxEvent = Cbo_ChooseDoc

    产生事件后,在类模块Combohander内选择ComboBoxEvent的Change事件,即可书写事件代码

    Sub ComboBoxEvent_Change(ByVal Ctrl As Office.CommandBarComboBox)

    九、一些Word的事件

    VBA代码中处理的Word事件有:Document_Close

    Application事件中需要处理的有:DocumentBeforeClose,DocumentChange。

    Document_Close:事件在文档关闭时产生事件

    DocumentBeforeClose:在文档被关闭以前先于Word判断文档是否保存,给出相应提示并进行相应处理。

    DocumentChange:文档切换,在文档从自己修改的文稿和其他人修改的文稿之间切换产生事件,主要处理设置文档权限等
0
相关文章