PDA

نسخه کامل مشاهده نسخه کامل : چطوری میشه از فاکس فرستاد؟



mld_mli
11-02-2009, 17:53
قبل از شروع بکار بایستی نکاتی را در این رابطه بدانید: توسط این کامپوننت فقط می توانیم فایهای گرافیکی از نوع TIFF,TIF آن هم با مشخصات زیر را فکس کرد:
مد رنگ : غیر رنگی (Black and White )
عرض تصویر : 1728
ارتفاع : فرقی نمی کند
تفکیک پذیری (ریزولیشن ) : 200 (نه بیشتر نه کمتر)
حالت فشرده سازی: غیر فشرده
با این حساب شرایط کار سخت شد !!! بله اما می توان با نصب کامپوننتهای KDImageEditor و استفاده از آنها همراه با برنامه کارهای گفته شده را بصورت خودکار انجام داد.
ابتدا پروژه جدیدی با اجزاء مورد نیاز ایجاد کنید:





اکنون برای رویدادهای Form1.OnCreate , Combobox1.OnChange همان کدهای پروژهای قبلی را بنویسید.
اکنون باید خط تلفن خود را برای ارسال فکس معرفی کنیم لذا در قسمت رویداد OnCreate کد زیر را اضافه کنید:


procedure TForm1.FormCreate(Sender: TObject);


begin


for C := 0 to KDPhone1.NumberOfLines-1 do begin


KDPhone1.GetLineName(C,S);


ComboBox1.Items.Add(S)


end;


KDPhone1.MediaMode:=mmFax;


Memo1.Lines.Add('Fax Only');


end;
در این کد همانگون که مشاهده می کنید ما از خصوصیت MediaMode برای تنظیم نوع فعالیت خط تلفن استفاده کردیم که می تواند با یکی از سه مقدار mmVoice, mmData, mmFax که به ترتیب برای تماس صوتی، جابجایی داده ها، دریافت و ارسال فکس مقدار دهی شود و ما از مقدار mmFax استفاده کردیم، چنانچه تماس تلفنی برقرار کنیم آنگاه سیستم بصورت خودکار جهت ارسال یا دریافت فکس منتظر می ماند.
نکته : ما می توانیم با انتخاب شی KDPhone1 و رفتن به صفحه خصوصیات نیز این قسمت را تنظیم کنیم.
حال باید برای دکمه StartFax کد زیر را بنویسید:
KDPhone1.DialNumber(Edit1.Text,0);
بله این شماره تماس فکس مورد نظر می باشد.
خب حالا چگونه اطلاعات خود را فکس کنیم؟ چانچه شماره ای که با آن تماس گرفته ایم مربوط به یک دستگاه فکس می باشد و آن دستگاه پس از زنگ خوردن آمادگی خود را برای دریافت فکس اعلام کند ( اتوماتیک یا توسط کاربر) در آن هنگام سیکنالی به مودم ما ارسال می شود که مشخص می کند دستگاه فکس مورد نظر آماده دریافت اطلاعات می باشد. برای دسترسی به این وضعیت می توانیم در قسمت رویداد KDPhone1CallState (برای کسب اطلاعات بیشتر در رابطه با این رویداد درس اول و دوم تلفن را مطالعه کنید ) آنرا پیدا کنیم نام این وضعیت csWaitingForFaxCommand و موقعی اتفاق می افتد که فکس مقابل آمادگی خود را اعلام کرده است فرصت را غنیمت شمرده و اطلاعات خود را در این وضعیت ارسال می کنیم پس کد زیر را در این قسمت (یا صورت پروسیجر جداگانه) بنویسید:
csWaitingForFaxCommand:
begin
err := KDFax1.FaxSend ('مسیر و نام فایل ', 1 , -1 );
if err<>0 then Memo1.Lines.Add( 'Error: '+KDFax1.GetErrorMsg(err) )
else Memo1.Lines.Add('آغاز ارسال فکس');
end;
در قسمت بالا با استفاده از تابع FaxSend فایل مورد نظر را ارسال می کنیم پارامتر اول نشان دهنده صفحه شروع و پارامتر دوم نشان دهنده صفحه پایانی می باشد که ۱- به مفهموم کل صفحات است. شما می توانید با استفاده از یک دیالوگ به کاربر اجازه انتخاب فایل رو بدهید. همچنین اگر قصد شما ارسال فکس از گزارشات برنامه خودتان می باشد می توانید با استفاده از فست ریپورت آنها را تبدیل به فایلهای TIFF کرده و سپس ارسال کنید.
می توان گفت که تا اینجا کار تمام شده است اما در حین ارسال فکس اتفاقات و وضعیتهای مختلفی رخ می دهد که اگر بتوانیم به آنها دسترسی داشته باشیم طبعا می توانیم برنامه بهتری بنویسیم، برای دسترسی به وضعیتهایی که در حین ارسال فکس رخ می دهند بایستی شیئ KDFax1 را انتخاب کرده و در قسمت رویدادها مقابل رویداد OnFaxState دوبار کلیک کنیم، اکنون با نوشتن یک ساختار Case می توانیم به وضعیتهای مختلف دسترسی پیدا کنیم:
procedure TForm1.KDFax1FaxState(Sender: TObject; FaxState: TFaxState; Param1: Integer; StrParam2: string);
begin
Case FaxState of
fsInitializing: Memo1.Lines.Add('آماده سازی دستگاه');
fsConnecting: Memo1.Lines.Add('ارتباط برقرار شد');
fsRemoteFaxID: Memo1.Lines.Add('عنوان فکس مقابل: '+StrParam2);
fsBPSRate: StaticText1.Caption:=(StrParam2); // سرعت ارسال یا نرخ ارسال
fsTraining: Memo1.Lines.Add('در حال ارسال');
fsTrainingFailed: Memo1.Lines.Add('ارسال با شکست مواجه گردید');
fsWritePageText:
begin
KDFax1.FaxSendWriteText( 40, 10, 'From: '+'[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]');
KDFax1.FaxSendWriteText( 750 ,10, FormatDateTime('"Date: "mm/dd/yyyy" Time: "hh:mm',Now));
KDFax1.FaxSendWriteText( 1600,10,'Page: '+ IntToStr(Param1));
end;
fsSendPageDone: Memo1.Lines.Add('ارسال صفحه '+IntToStr(Param1)+' کامل شد ');
fsFaxDone:
if Param1=0 then Memo1.Lines.Add('سند مورد نظر با موفقیت فکس گردید')
else Memo1.Lines.Add('متاسفانه سند مورد نظر با موفقیت ارسال نگردید');
fsError: Memo1.Lines.Add('Error: '+KDFax1.GetErrorMsg(Param1));
end;
end;
وضعیتهای بالا کامل ساده و واضح هستند بجز وضعیت fsWritePageText این وضعیت هنگامی اتفاق می فتاد که سند شروع به ارسال گردد خب ما می توانیم در این هنگام با استفاده از متد FaxSendWriteText ( x, y, text ) مقداری در مختصات صفحه ارسالی بنویسیم x,y بر حسب پیکسل می باشند و Text متنی است که می خواهیم در آن مختصات ظاهر شود برای نمونه در مثال بالا عنوان وبلاگ در گوشه سمت چپ بالای کاغذ تاریخ و ساعت تقریبا وسط و شماره صفحه در گوشه سمت راست بالای کاغذ چاپ خواهد شد.