在數據庫上使用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:文檔切換,在文檔從自己修改的文稿和其他人修改的文稿之間切換產生事件,主要處理設置文檔權限等