WinFax DDE VCL(含原始程式碼) |
|
fengcheng
一般會員 發表:17 回覆:21 積分:7 註冊:2002-04-23 發送簡訊給我 |
這是可利用winfax將資料傳出去的vcl
其中是使用呼叫dde的方式
如果其他人有更好的想法或程式,
請修改好之後上傳給大家分享。
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 這是可利用winfax將資料傳出去的vcl 其中是使用呼叫dde的方式 如果其他人有更好的想法或程式, 請修改好之後上傳給大家分享。感謝fengcheng兄,無私的貢獻自行研發元件, 經我測試Compile會有錯誤,因您使用ShowError function, 這是在您另一個unit中的,但未附上,所以我將它改為ShowMessage再放上去了, 能否有一個使用範例呢? 謝謝您! P.S:安裝方法,Component -> Install Component -> Unit File Name=WZWinFaxDde.pas -> Ok -> Compile ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
tas52332
一般會員 發表:23 回覆:24 積分:9 註冊:2002-07-04 發送簡訊給我 |
|
pceyes
尊榮會員 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
1. 環境是 WinFax9.0,其他版本可能不Work。
2. 可以從元件內容的註解來瞭操作方式,自己試囉! WZWinFaxDde.pas [code delphi] unit WZWinFaxDde; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls,DdeMan; type TwfResolution=(wfHIGH,wfLOW); TwfMode=(wfFAX,wfBFT); TWZWinFaxDde = class(TDdeClientConv) private FSendDate : TDate; FSendTime : TTime; FFAXName : String; FFAXNumber: String; FCompany : String; FSubject : String; FBillingCode : String; FKeyword : String; FMode : TwfMode; FCoverPage : String; FAttachment : String; FShowsendscreen:Boolean; FResolution:TwfResolution; FDdeService : String; FDdeTopic : String; FFillcoverpage : TStrings; function CloseWinFaxLink():Boolean; {關閉WinFax連結} procedure SetFillcoverpage(Value: TStrings); protected function chkFaxData():Boolean; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; procedure BeginSend(); {開始傳送} procedure AddSendMan(); procedure AddOtherData(); procedure SendFax(); {開啟傳送} procedure EndSend(); {結束傳送} procedure GoIdle(); {關閉自動接收} procedure GoActive(); {開啟自動接收} procedure ReceiveFaxNow; {開啟手動接收} function NumberFaxesReceived:Integer;{傳回未讀取的傳真資料} function FaxStatus:String;{傳回傳真狀態} function TimeUntilNextOutgoing:string; {傳回下次傳送的日期時間} //本來在provate procedure wfRecipient(); { 存寫收件者詳細資料(例如,姓名和傳真號碼)和事件詳細資料(例如,日期和時間)} procedure wfAttach(); { 存寫您要包括在傳真中的附件之路徑和檔名} procedure wfShowsendscreen();{傳送要求給 WinFax 來顯示「傳送」對話方塊} procedure wfResolution(); {存寫傳送傳真所用的解析度} procedure wfSendfaxUI(); {強制 WinFax 去傳送事件,但不將文件列印至 WinFax} procedure wfSetcoverpage();{指定您要在傳真中包括的封面之檔名} procedure wfFillcoverpage();{存寫封面上出現的文字訊息} function SetTransmitLink():Boolean; {開啟Transmit Topic} function SetControlLink():Boolean; {開啟Control Topic} published property wfSendDate : TDate read FSendDate write FSendDate; property wfSendTime : TTime read FSendTime write FSendTime; property wfFAXName : String read FFAXName write FFAXName; property wfFAXNumber: String read FFAXNumber write FFAXNumber; property wfCompany : String read FCompany write FCompany; property wfSubject : String read FSubject write FSubject; property wfBillingCode : String read FBillingCode write FBillingCode; property wfModeSet : TwfMode read FMode write FMode; property wfKeyWord : String read FKeyWord write FKeyWord; property wfCoverPage : String read FCoverPage write FCoverPage; property wfAttachment : String read FAttachment write FAttachment; property wfShowSendscr : Boolean read FShowsendscreen write FShowsendscreen; property wfResolutions : TwfResolution read FResolution write FResolution; property wfFillcover : TStrings read FFillcoverpage write SetFillcoverpage; property DdeService : String read FDdeService; property DdeTopic : String read FDdeTopic; end; procedure Register; implementation procedure Register; begin RegisterComponents('WZ Control', [TWZWinFaxDde]); end; constructor TWZWinFaxDde.Create(AOwner: TComponent); begin inherited Create(AOwner); FSendDate := Date; FFAXName := ''; FCompany := ''; FFAXNumber := ''; FSubject := ''; FBillingCode := ''; FMode := wfFAX; FCoverPage := ''; FAttachment := ''; FShowsendscreen := True; FResolution := wfHIGH; FFillcoverpage := TStringList.Create; FKeyword := ''; end; destructor TWZWinFaxDde.Destroy; begin inherited Destroy; end; procedure TWZWinFaxDde.SetFillcoverpage(Value: TStrings); begin FFillcoverpage.Assign(Value); end; procedure TWZWinFaxDde.wfRecipient(); var cMode:string; begin { 存寫收件者詳細資料(例如,姓名和傳真號碼)和事件詳細資料(例如,日期和時間)} {Fax Number 要撥號的完整傳真號碼(最多 46 個字元)。 Time(選擇性的) 傳送傳真的時間 (hh:mm:ss)。若省略時間,則會在指定日期的午夜傳送傳真,或之後執行 WinFax 時傳送。 Date(選擇性的) 傳送傳真的日期 (mm/dd/yy)。若省略日期,則在下一個指定日期傳送傳真,或之後執行 WinFax 時傳送。 Name(選擇性的) 收件者的姓名(最多 29 個字元)。 Company(選擇性的) 收件者的公司名稱(最多 42 個字元)。 Subject(選擇性的) 傳真的主旨(最多 79 個字元)。 Keyword(選擇性的) 事件關鍵字(最多 33 個字元)。 Billing Code(選擇性的) 事件計費代碼(最多 26 個字元)。 Mode(選擇性的) 事件的傳遞方式:BFT(二進位檔案轉送)或 Fax(預設方式)。若省略 Mode 子參數,則將事件視為一般傳真傳輸。} IF FMode=wfFAX then cMode := 'FAX' else cMode := 'BFT'; PokeData('sendfax',PCHAR('recipient(' '"' FFAXNumber '",' '"' FormatDateTime('hh:mm:ss',FSendTime) '",' '"' FormatDateTime('mm/dd/yy',FSendDate) '",' '"' FFaxName '",' '"' Fcompany '",' '"' FSubject '",' '"' FKeyword '",' '"' FBillingCode '",' '"' cMode '")' )); end; procedure TWZWinFaxDde.wfAttach(); begin //附件 IF FAttachment <> '' then PokeData('sendfax',PCHAR('attach("' FAttachment '")')); end; procedure TWZWinFaxDde.wfShowsendscreen(); var sShowScreen:String; begin if FShowsendscreen then sShowScreen := '1' else sShowScreen := '0'; {傳送要求給 WinFax 來顯示「傳送」對話方塊} {0 = 否(略過螢幕)1 = 是(顯示螢幕)} PokeData('sendfax',PCHAR('showsendscreen("' sShowScreen '")') ); end; procedure TWZWinFaxDde.wfResolution(); var sResolution : string; begin IF FResolution=wfHIGH then sResolution :='HIGH' else sResolution :='LOW'; {存寫傳送傳真所用的解析度 HIGH 200 x 200 dpi LOW 100 x 200 dpi } PokeData('sendfax',PCHAR('resolution("' sResolution '")')); end; procedure TWZWinFaxDde.wfSetcoverpage();{指定您要在傳真中包括的封面之檔名} begin IF FCoverPage <> '' then PokeData('sendfax',PCHAR('setcoverpage("' FCoverPage '")')); end; procedure TWZWinFaxDde.wfFillcoverpage();{存寫封面上出現的文字訊息} begin IF FFillcoverpage.Text <> '' then PokeData('sendfax',PCHAR('fillcoverpage("' FFillcoverpage.Text '")')); end; procedure TWZWinFaxDde.wfSendfaxUI(); begin PokeData('sendfax','SendfaxUI'); end; procedure TWZWinFaxDde.BeginSend(); begin SetTransmitLink; end; procedure TWZWinFaxDde.AddSendMan(); begin //存寫收件者詳細資料 wfRecipient; end; procedure TWZWinFaxDde.AddOtherData(); begin //設定解析度 wfResolution; //增加附件 wfAttach; //設定封面 wfSetcoverpage; //設定封面文字 wfFillcoverpage; //傳送要求給 WinFax 來顯示「傳送」對話方塊 wfShowsendscreen; end; procedure TWZWinFaxDde.EndSend(); begin CloseWinFaxLink; end; procedure TWZWinFaxDde.SendFax(); begin //送出傳真 wfSendfaxUI; end; procedure TWZWinFaxDde.GoIdle(); begin If SetControlLink then begin IF not ExecuteMacro('GoIdle',True) then Showmessage('無法停止自動接收'); CloseLink; end; end; procedure TWZWinFaxDde.GoActive(); begin IF SetControlLink then begin IF not ExecuteMacro('GoActive',True) then showmessage('無法開啟自動接收'); CloseWinFaxLink; end; end; procedure TWZWinFaxDde.ReceiveFaxNow; begin IF SetControlLink then begin IF not ExecuteMacro('ReceiveFaxNow',True) then showmessage('無法開啟手動接收'); CloseWinFaxLink; end; end; function TWZWinFaxDde.chkFaxData():Boolean; begin Result := not(FFAXNumber=''); // IF not Result then ShowWarning('沒有傳真號碼'); end; function TWZWinFaxDde.NumberFaxesReceived:Integer; var cNum : string; begin Result := 0; IF SetControlLink then begin cNum := RequestData('NumberFaxesReceived'); Result := StrToInt( cNum ); CloseWinFaxLink; end; end; function TWZWinFaxDde.FaxStatus:String;{傳回傳真狀態} begin Result := ''; IF SetControlLink then begin Result := RequestData('Status'); CloseWinFaxLink; end; end; function TWZWinFaxDde.TimeUntilNextOutgoing:string; {傳回下次傳送的日期時間} begin Result := ''; IF SetControlLink then begin Result := RequestData('TimeUntilNextOutgoing'); CloseWinFaxLink; end; end; function TWZWinFaxDde.SetTransmitLink():Boolean; begin Screen.Cursor := crAppStart; Result := SetLink('FAXMNG32', 'TRANSMIT'); if not(Result) then begin Screen.Cursor := crDefault; showmessage('無法連至WinFax9.0[TRANSMIT],請檢查程式是否開啟!!'); end; end; function TWZWinFaxDde.SetControlLink():Boolean; begin Screen.Cursor := crAppStart; Result := SetLink('FAXMNG32', 'CONTROL'); if not(Result) then begin Screen.Cursor := crDefault; showmessage('無法連至WinFax9.0[CONTROL],請檢查程式是否開啟!!'); end; end; function TWZWinFaxDde.CloseWinFaxLink():Boolean; begin CloseLink; Result := True; Screen.Cursor := crDefault; end; end. [/code]
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-09-26 18:16:01, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |