📄 adfaxsrv.pas
字号:
with TStandardFaxDisplay(FStatusDisplay.Display) do begin
if First then begin
fsLabel2.Caption := 'Job file name:';
fsLabel3.Caption := 'Job name:';
end else if Last then begin
fsLabel2.Caption := 'Fax file name:';
fsLabel3.Caption := 'Cover file name:';
end;
fsFaxFileName.Caption := CurrentJobFileName;
fsCoverFileName.Caption := CurrentJobHeader.JobName;
fsDialAttempt.Caption := IntToStr(CurrentRecipient.AttemptNum + 1);
end;
end;
if Assigned(FFaxServerStatusEvent) then begin
if FSwitchingModes then
Status := fpSwitchModes
else if FFaxServerMode = fsmSend then
Status := FSendFax.FaxProgress
else if FFaxServerMode = fsmReceive then
Status := FRecvFax.FaxProgress
else
Status := 0;
OnFaxServerStatus(Self, FaxMode, First, Last, Status);
end;
end;
procedure TApdCustomFaxServer.FInternalPortToggle(CP: TObject;
Opening: Boolean);
begin
if Assigned(FFaxServerPortOpenCloseEvent) then
FFaxServerPortOpenCloseEvent(Self, Opening);
end;
procedure TApdCustomFaxServer.FInternalSendQueryTimer(Sender: TObject);
var
JobFileName, FaxFileName, CoverFileName: TPassString;
Recipient: TFaxRecipientRec;
begin
if csDestroying in ComponentState then Exit;
if FFaxInProgress then
Exit;
FaxFileName := '';
CoverFileName := '';
{ shut the timer down while we are looking }
FSendQueryTimer.Enabled := False;
if Assigned(FServerManager) then
if FServerManager.GetJob(Recipient, Self, JobFileName, FaxFileName,
CoverFileName) then begin
{ generate the manager's OnQuery event }
if Assigned(FServerManager.FFaxServerManagerQueriedEvent) then
FServerManager.FFaxServerManagerQueriedEvent(FServerManager,
Self, JobFileName);
CurrentJobFileName := JobFileName;
CurrentJobNumber := Recipient.JobID;
CurrentRecipient := Recipient;
FServerManager.GetJobHeader(CurrentJobFileName, CurrentJobHeader);
HeaderSender := CurrentJobHeader.Sender;
PhoneNumber := Recipient.PhoneNumber;
HeaderLine := Recipient.HeaderLine;
HeaderRecipient := Recipient.HeaderRecipient;
HeaderTitle := Recipient.HeaderTitle;
FaxFile := FaxFileName;
CoverFile := CoverFileName;
CheckPort;
if not FComPort.Open then begin
{ the port couldn't be opened, so we'll just update the status }
{ so we can try to get the port later }
FServerManager.UpdateStatus(CurrentJobFileName,
CurrentJobNumber, Abs(ecCommNotOpen), False);
FSendQueryTimer.Enabled := True;
Exit;
end;
{ save Monitoring, we will revert in the FInternalFaxFinish event }
FOldMonitoring := Monitoring;
{ turn off receive mode }
if FWaitForRing then begin
FSwitchingModes := True;
FRecvFax.CancelFax;
DelayTicks(18, True);
end else
FSwitchingModes := False;
{ make sure we don't have any residual input }
FComPort.FlushInBuffer;
FaxServerMode := fsmSend;
FSendFax.StartTransmit;
end else begin
{ generate the manager's OnQuery event, no job ready }
if Assigned(FServerManager.FFaxServerManagerQueriedEvent) then
FServerManager.FFaxServerManagerQueriedEvent(FServerManager,
Self, '');
if FSendQueryInterval <> 0 then begin
FSendQueryTimer.Interval := FSendQueryInterval * 1000;
FSendQueryTimer.Enabled := True;
end;
if not FMonitoring then begin
{ done with the port, close it }
if FComPort.TapiMode = tmOn then
FTapiDevice.CancelCall
else
FComPort.Open := False;
end else if not FWaitForRing then begin
FaxServerMode := fsmReceive;
FRecvFax.StartReceive;
FWaitForRing := True;
end else
FSwitchingModes := False;
end;
end;
procedure TApdCustomFaxServer.FInternalTapiPortOpenClose(Sender: TObject);
begin
{ this event handler is only used to update the flag }
WaitingOnTapi := False;
end;
procedure TApdCustomFaxServer.FInternalTapiFail(Sender : TObject);
begin
WaitingOnTapi := False;
end;
procedure TApdCustomFaxServer.ForceSendQuery;
var {!!.02}
OldPaused : Boolean; {!!.02}
begin
OldPaused := FServerManager.FPaused; {!!.02}
FServerManager.Paused := False; {!!.02}
FInternalSendQueryTimer(nil);
FServerManager.Paused := OldPaused; {!!.02}
end;
function TApdCustomFaxServer.GetBytesTransferred: LongInt;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.BytesTransferred
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.BytesTransferred
else
Result := 0;
end;
function TApdCustomFaxServer.GetCurrentPage: Word;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.CurrentPage
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.CurrentPage
else
Result := 0;
end;
function TApdCustomFaxServer.GetDialAttempt: Word;
begin
if Assigned(FSendFax) then
Result := FSendFax.DialAttempt
else
Result := 0;
end;
function TApdCustomFaxServer.GetDialAttempts: Word;
begin
Result := FDialAttempts;
end;
function TApdCustomFaxServer.GetFaxProgress: Word;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.FaxProgress
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.FaxProgress
else
Result := 0;
end;
function TApdCustomFaxServer.GetHangupCode: Word;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.HangupCode
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.HangupCode
else
Result := 0;
end;
function TApdCustomFaxServer.GetModemBPS: LongInt;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.ModemBPS
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.ModemBPS
else
Result := 0;
end;
function TApdCustomFaxServer.GetModemChip: string;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.ModemChip
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.ModemChip
else
Result := '';
end;
function TApdCustomFaxServer.GetModemECM: Boolean;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.ModemECM
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.ModemECM
else
Result := False;
end;
function TApdCustomFaxServer.GetModemModel: string;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.ModemModel
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.ModemModel
else
Result := '';
end;
function TApdCustomFaxServer.GetModemRevision: string;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.ModemRevision
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.ModemRevision
else
Result := ''
end;
function TApdCustomFaxServer.GetPageLength: LongInt;
var
F: File;
begin
Result := FPageLength;
if FPageLength = 0 then
if (FFaxFile <> '') and FileExists(FFaxFile) then begin
AssignFile(F, FFaxFile);
Reset(F, 1);
FPageLength := FileSize(F);
CloseFile(F);
Result := FPageLength;
end;
end;
function TApdCustomFaxServer.GetRemoteID: string;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.RemoteID
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.RemoteID
else
Result := '';
end;
function TApdCustomFaxServer.GetSessionBPS: Word;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.SessionBPS
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.SessionBPS
else
Result := 0;
end;
function TApdCustomFaxServer.GetSessionECM: Boolean;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.SessionECM
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.SessionECM
else
Result := False;
end;
function TApdCustomFaxServer.GetSessionResolution: Boolean;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.SessionResolution
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.SessionResolution
else
Result := True;
end;
function TApdCustomFaxServer.GetSessionWidth: Boolean;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.SessionWidth
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.SessionWidth
else
Result := True;
end;
function TApdCustomFaxServer.GetSupportedFaxClasses: TFaxClassSet;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.SupportedFaxClasses
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.SupportedFaxClasses
else
Result := [];
end;
function TApdCustomFaxServer.GetTotalPages: Word;
begin
if FFaxServerMode = fsmSend then
Result := FSendFax.TotalPages
else if FFaxServerMode = fsmReceive then
Result := FRecvFax.TotalPages
else
Result := 0;
end;
procedure TApdCustomFaxServer.Notification(AComponent: TComponent;
Operation: TOperation);
{ - handle dependent components coming and going }
begin
inherited Notification(AComponent, Operation);
if Operation = opRemove then begin
if AComponent = FComPort then begin
FComPort := nil;
if not (csDesigning in ComponentState) then begin
FSendFax.ComPort := nil;
FRecvFax.ComPort := nil;
end;
end;
if AComponent = FFaxLog then
FFaxLog := nil;
if AComponent = FFaxPrinter then begin
FFaxPrinter := nil;
FPrintOnReceive := False;
end;
if AComponent = FServerManager then
FServerManager := nil;
if AComponent = FStatusDisplay then
FStatusDisplay := nil;
if AComponent = FTapiDevice then begin
FTapiDevice := nil;
if Assigned(FComPort) then
FComPort.TapiMode := tmOff;
end;
end else if Operation = opInsert then begin
if AComponent is TApdCustomComPort then begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -