全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4428
推到 Plurk!
推到 Facebook!

WinFax DDE VCL(含原始程式碼)

 
fengcheng
一般會員


發表:17
回覆:21
積分:7
註冊:2002-04-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-11 19:48:39 IP:211.74.xxx.xxx 未訂閱
這是可利用winfax將資料傳出去的vcl 其中是使用呼叫dde的方式 如果其他人有更好的想法或程式, 請修改好之後上傳給大家分享。
附加檔案:00018720_WZWinFaxDde.zip
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-11 21:13:06 IP:192.168.xxx.xxx 未訂閱
引言: 這是可利用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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-26 16:39:52 IP:59.124.xxx.xxx 訂閱
有使用範例嗎!!謝謝!!
pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-26 18:14:44 IP:220.141.xxx.xxx 訂閱
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, 註解 無‧
系統時間:2024-05-03 15:46:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!