انيميشن

من يك انيماتور شدم

http://3d-palm.blogfa.com

راه اندازی سایت

از دوستانی که به سایت ما مراجعه می کنند بسیار سپاسگذاریم

دوستانی که سوالی دارند و یا با مشکل برنامه نویسی مواجه شده اند می تواند با مراجعه به سایت رسمی ما و درج مشکل خود در قسمت انجمن پرسش و پاسخ به جوابهای خود در سریعترین زمان ممکن دسترسی پیدا کنند.

Website: http://www.p9it.ir/

Forum: http://www.p9it.ir/index.php?option=com_fireboard&Itemid=64

 

بازگشت

بازگشت

 با سلام خدمت دوستان عزیزم

خیلی دلم برای شما تنگ شده بود. پوزش مرا بخاطر تاخیری طولانی در ارائه مطالب بپذیرید.

مشکلات متعدد و مشغله خیلی زیاد باعث شد که نتونم مطالب جدیدی بنویسم.

اگه به خاطر داشته باشید در یکی از  پستهای قبلی نوشته بودم که مرکز آموزشی فن آوری اطلاعات فرانت تاسیس شد اما متاسفانه بعد از مدتی شدیدا به اسم اون گیر دادن و گفتن که مطابق با استانداردهای نامگذاری نمی باشد و باید اسمش رو عوض کنید و مجوز رو بهم ندادن بخاطر همین کلی دوندگی کردم و آخرش هم به نتیجه نرسیدم و الان اسم مرکز از فرانت جنوب به پدیده نو تغیر یافت. مشکلات دیگه ای هم گیربان گیرم بود که به حمد خدا تموم شد.

از این هفته به بعدٰ هفته ای یک مطلب در این وبلاگ برای شما دوستان گلم می زارم

در ضمن از تمامی دوستانی که در این مدتی با تماس تلفنی یا پیام کوتاه و همچنین ایمیل با من تماس گرفتن کمال تشکر رو دارم. و نیز از دوستانی که نسبت به ما اعتماد داشتن و DVD دلفی رو خریداری کردن سپاسگذارم. 

آرم مرکز آموزشی پدیده نو

Delphi DVD with best Componnet Collection

Delphi DVD with best Component Collection

با سلام خدمت برنامه نویسان

از اعتماد برخی دوستان که اقدام به خرید DVD دلفی کردند سپاس گذارم.

این بار برای شما دو نمونه DVD  آماده کردم که می توانید آنها را تهیه کنید.

بسته اول:

                         

شامل نرم افزار Delphi 2007 for WIN32 همراه با نرم افزار Delphi for PHP   که هر دوی آنها آزمایش شده هستند و دارای کرک هم نیز می باشند.

بسته دوم:

                         

علاوه بر مشخصات بسته  یک، دارای مجموعه ای بی نظیر از کامپوننتهایی که به ندرت یافت می شوند و یا اینکه گرانقیمت هستند می باشد تمام کامپوننتها تست شده و همراه با آخرین نسخه و سورس می باشند برای نمونه می توان به FastReport 4.2 جهت گزارش گیری با محیطی فارسی و همچنین کامپوننت TMS-CeeTools جهت برنامه نویسی موبایل و نیز KDTools برای خط تلفن و نیز TMS محبوبترین و زیباترین مجموعه گرافیکی همراه با کاملترین DBGrid و نیز Raize مجموعه ای با 7 گروه که بیش از 100 کامپوننت زیبا و کارا یا VCL Skin, SuiSkin, BusinessSkin همراه شیکترین سکین Alpha که در نوع خود بی نظر بوده و می توانید برنامه های بسیار جذاب با آن تهیه کنید برای برنامه نویسان ریاضیات ، بانکهای اطلاعاتی و...  نیز موارد دیگری را قرار دادم

در حدود بیش از 70 نمونه کامپوننت در این محصول پیدا خواهید کرد و مطمین باشید علاوه بر اینکه پشیمان نخواهید شد، غافلگیر می شوید.

نحوه تهیه DVD:

مبلغ مربوطه را به شماره حساب (  0301805078007   )  سیبا بانک ملی  کد شعبه ( 7072  )  بنام احمد محمودی واریز کرده و سپس تصویر اسکن شده فیش بانکی را همراه با مشخصات کامل و آدرس دقیق  با ذکر کد پستی را به یکی از ایمیلهای زیر ارسال کنید. پس از دریافت ایمیل از طرف شما بسته درخواستی با پست سفارشی به آدرس شما ارسال می گردد و شماره حواله بانکی را نیز برای شما از طریف ایمیل یا SMS   ارسال می کنیم.

Faranet.co@gmail.com

Am_mahmoodi2004@yahoo.com

Mobil (SMS) : 09163502137

درس سوم : ارسال فکس

درس سوم : ارسال فکس

من فکر می کردم که دیگه کسی به وبلاگم سر نمی زنه خواستم کم کم از نوشتن مطالب دست بکشم اما ...  در ضمن من خیلی سرم شلوغه برای همین فرصت نمی کنم زود به زود آپدیت کنم راستی به زودی یک وب سایت راه اندازی می کنم و همچنین در جواب یکی از دوستان بنام رهگذر بایستی عرض کنم من کوچیتر از اینم که جواب دوستان گلم رو ندم تنها دلیلش اینه که من سر نمی زدم.

بریم سر اصل مطلب مقاله که در انتظارش بودید: چطوری میشه از فاکس فرستاد؟

قبل از شروع بکار بایستی نکاتی را در این رابطه بدانید:

توسط این کامپوننت فقط می توانیم فایهای گرافیکی از نوع TIFF,TIF  آن هم با مشخصات زیر را فکس کرد:

 مد رنگ : غیر رنگی (Black and White  )

عرض تصویر : 1728

ارتفاع : فرقی نمی کند

تفکیک پذیری (ریزولیشن ) : 200  (نه بیشتر نه کمتر)

حالت فشرده سازی: غیر فشرده

با این حساب شرایط کار سخت شد !!! بله اما می توان با نصب کامپوننتهای KDImageEditor و استفاده از آنها همراه با برنامه کارهای گفته شده را بصورت خودکار انجام داد.

اما اکنون جهت آزمایش من برای شما یک راه حل با فتوشاپ جهت تمرین آماده کردم اگر مایل باشید فایل آموزشی نحوه ساخت فایل TIFF با فتوشاپ جهت فکس با دلفی را دانلود کرده و مطالع کنید ( البته در نمونه برنامه ای که جهت دانلود برای شما آماده کردم یک فایل نمونه می تواتنید پیدا کنید).

ابتدا پروژه جدیدی با اجزاء مورد نیاز همانند شکل زیر ایجاد کنید:

                                             

اکنون برای رویدادهای  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: '+'http://delphigroup.blogfa.com');

           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  متنی است که می خواهیم در آن مختصات ظاهر شود برای نمونه در مثال بالا عنوان وبلاگ در گوشه سمت چپ بالای کاغذ تاریخ و ساعت تقریبا وسط و شماره صفحه در گوشه سمت راست بالای کاغذ چاپ خواهد شد.

 تصویر زیر نمونه پس از اجرای برنامه نمونه می باشد:

                                  

در پایان هم می خواستم برای خراب بودن لینک دانلود دلفی برای پی اچ پی مطلب قبلی عذرخواهی کنم ... اشتباهی آدرس رو نوشته بودم ولی الان تصحیح شد.

همچنین می خواستم در اینجا از دوست بسیارعزیز  آقای حسین صبحانی تشکر کنم ...  مخلصیم داداش.

            مژده مژده آخرین نسخه                                             

      ... همین امروز گیرم اومد منتظر باشید  FastReport.v4.2.Full.Source             

           دانلود آموزش ساختTIFF                       دانلود نمونه برنامه                                              

دلفی برای PHP

 

دانلود نسخه کامل همراه با کرک Delphi for PHP

با سلام خدمت دوستان برنامه نویس

دیروز ایمیل یکی از دوستان به دستم رسید، ایشون نوشته بودن که وبلاگم کم کم از حالت قبلی داره خارج میشه و کمرنگتر وقتی نگاه کردم دیدم واقعا همینطور هم هست حال برای جبران امروز می خوام شما رو غافلگیر کنم و نسخه دلفی برای PHP ورژن 2007 رو جهت دانلود گذاشتم.

مفتخر هستم که جزو اولین برنامه نویسان ایرانی هستم که دلفی ۲۰۰۷ رو بدست آوردم

       

همانطور که مطلع هستید شرکت برلند امتیاز دلفی را به شرکت CodeGear فروخته و این شرکت جدید محصول جدیدی از دلفی را در دو نسخه Delphi for Win32  و Delphi for PHP  ارائه کرده که بسیار قوی و سریع می باشد من خودم به شخصه بسیار لذت بردم تازه یک مژده براتون دارم در نسخه 2007 دلفی تمام کامپوننتهای دلفی های قدیمی نصب می شوند در حالی که قبلا امکان پذیر نبود پس نگران این نباشید چون من برنامه ام را با دلفی 6 یا 7 یا 2006 نوشتم نمی تونم اون رو اینجا ویرایش کنم ... چون می توانید همان کامپوننتها رو در این نسخه بدون هیچ دردسری نصب کنید.

اما من در اینجا برای شما نسخه Delphi for PHP رو گذاشتم و همانطوریکه از اسمش پیداست برای آن برنامه نویسانی طراحی شده که قصد تهیه برنامه های PHP  دارند لازم به ذکر است که در این محصول دیگر شما نیاز به نصب Apache  ندارید و خود دلفی براتون سرور محلی نصب خواهد کرد به راحتی بگم مستقیم در این محیط برنامه PHP بنویسید و اجرا کنید. محیطی با ظاهر و قابلیتهای دلفی ولی برنامه نویسی PHP.

طرز نصب این محصول بسیار ساده و مانند بقیه برنامه ها می باشد فقط بعد از پایان نصب فایل درون شاخه Crack   را در مسیر نصب برنامه کپی کنید.

امیدوارم با این کار تونسته باشم دل شما را به دست آورده باشم.

مبارکتون باشه

                                                                              دانلود

 

       

نمایش و ویرایش فیلدهای Memo در DBGrid

نمایش و ویرایش فیلدهای Memo در DBGrid

با سلام خدمت برنامه نویسان محترم

در لابلای مقالات مربوط به تلفن پاسخ سوال یک دوست عزیز را آماده کردم که ممکن است سوال برخی از شما ها باشد.

سوال : چگونه می توان متن مربوط به فیلدی که از نوع  Memo  است را در DBGrid  نشان داد و ویرایش کرد؟

در حالت عادی چنین کاری صورت نمی گیرد اما غیر ممکن هم نیست! برای دستیابی به این هدف مراحل زیر را دنبال کنید:

ما در تمرین زیر از یک دیتابیسی استفاده کرده ایم که با Access طراحی شده است و دارای یک جدول با سه فیلد به شرح زیر می باشد شما نیز می توانید چنین پایگاهی را طراحی کنید یا اینکه از دیتابیسهای خودتان استفاده کنید.

Tabel1

Text ( 12 )

Name

Text ( 12 )

Fam

Memo

Address

و نیز برنامه ما متشکل از یک فرم Form1 یک adoTable1 یک DataSource1 و یک DBGrid1 می باشد که پس از نتظیم رشته اتصال ( AdoTabel1.ConnectionString ) بر روی آن جدول دابل کلیک کرده و تمام فیلدهای آنرا اضافه کردیم.

                    

 گام اول: نمایش فیلد در DBGrid

روی Tabel  یا Queryمورد نظر دابل کلیک کرده و سپس فیلد مورد نظر را که از نوع Memo  است را انتخاب کنید اکنون به قسمت Event ها رفته و مقابل رویداد OnGetText دابل کلیک کنید و سپس کد زیر را وارد کنید

procedure TForm1.ADOTable1AddressGetText(Sender: TField; var Text: string;

  DisplayText: Boolean);

begin

     Text := Copy( ADOTable1Address.AsString,1,50 )

end;

به همین سادگی حال برنامه را اجرا کنید و از نتیجه لذت ببرید. اما اگر سعی کنید که اطلاعات را ویرایش کنید با پیغام خطا مواجه خواهید شد پس ویرایش نکنید و به جای آن گام دوم را بخوانید...

گام دوم ویرایش فیلد

برای اینکار کمی بیشتر بایستی کار کنیم، جهت ویرایش اینگونه فیلدها نمی توان درون DBGrid این کار را انجام داد پس یک فرم کوچک و جمع و جور برای این منظور ایجاد می کینم، لطفا یک فرم جدید به برنامه اضافه کنید و بعد بر روی آن فرم یک شئ Memo قرار دهید و خصوصیت Align آن را بر روی alClient   تنظیم کنید تا به اندازه کل فرم بسط پیدا کند.

خُب تا اینجا کافیست حال به فرم اصلی که حاوی DBGrid هست برگشته و DBGrid1  را انتخاب کنید و سپس در مقابل رویداد KeyDown دابل کلیک کرده و کد زیر را بنویسید:

procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;

  Shift: TShiftState);

begin

  If  key = VK_RETURN  then begin

    if  DBGrid1.SelectedField  = ADOTable1Address then

      with Form2 do

      begin

         Memo1.Text := ADOTable1Address.AsString;

            Form2.ShowModal;

            ADOTable1.Edit;

         ADOTable1Address.AsString := Memo1.Text;

      end;

  end;

end;

برنامه اکنون آماده بهره برداری می باشد. اگر شما کمی خلاقیت به خرج دهید می توانید کد بالایی را بصورت یک پروسیجر در آورده و در DBGrid های دیگر از آن استفاده کنید.

بیشتر بدانیم:

در گام اول رویداد  OnGetTextبه کار رفته است. این رویداد زمانی اتفاق می افتاد که جدول می خواهد اطلاعات مربوط به رکوردها را دریافت کند و فیلد مربوطه متن خود را بدست آورد. خب این بهترین فرصتی است که ما می توانیم برای نمایش متن تصمیم بگیریم و آنرا به متن دیگری تغییر بدهیم که برای انجام این کار بایستی متن جدید را به متغیر Text بدهیم برای مثال اگر ما این مقدار را تایپ کنیم Text := 'FaraNet';  در آنصورت تا همیشه مقدار FaraNet را به کنترلها می فرستد و فقط این عبارت را خواهیم دید اما این عبارت فقط جنبه صوری دارد و بر محتوای اصلی فیلد اثری ندارد، خب در این تمرین ما با استفاده از تابع Copy از فیلد اصلی به مقدار 50 کاراکتر برداشتیم و به متغیر Text واگذار کردیم تا آنرا نمایش دهد شما می توانید مقدار 50 را کم یا زیاد کنید.

در گام دوم می دانید که رویداد OnKeyDown موقعی اتفاق می افتاد که دکمه ای از روی صفحه کلید فشرده شود در این هنگام کد آن توسط متغیر Key قابل دسترسی هست، خب چون ما تصمیم داشتیم که ویرایش را با کلیک اینتر فعال کنیم برای همین در شرط از مقدار VK_RETURN تعریف شده در دلفی که بیانگر کلید Enter و معال کد 13 می باشد استفاده کردیم البته می توانستیم از کد 13 نیز استفاده کنیم و اما شرط دوم بسیار مهم است چون ما در این شرط بررسی کردیم که اگر فیلد فعال همان فیلد مورد نظرمان است در آن صورت Form2 که مربوط به ویرایش است را فراخوانی کند در غیر اینصورت چنانچه ما از این شرط استفاده نمی کردیم در آنصورت با فشردن اینتر بر روی هر فیلدی در DBGrid فرم مربوط به ویرایش فیلد آدرس ظاهر می شد و این مطلب برای مشتری ناخوشایند می باشد.در ادامه مراحل هم که مشاده می فرمائید مقدار فعلی فیلد را ابتدا به شئ Memo مربط به فرم دوم ارسال کردیم و بعد آن فرم را ظاهر کردیم تا پس اطلاعات ویرایش شوند و بعد از بستن فرم دوم حتما قرار دادن جدول در حالت ویرایش الزامی می باشد تا مقدار جدید را بپذیرد در غیر اینصورت با خطای عدم درج و ویرایش مواجه می شدیم....

امیدوارم که این مطلب سود و منفعتی برای شما دوستان عزیز داشته باشد و امیدوارم که توانسته باشم کمک کوچکی به شما برنامه نویسان عزیز کرده باشم

مطمینا نظرات شما موجب تقویت روحیه ما خواهد بود و ایمان پیدا می کنیم که مطالبی که که قرار می دهیم مطالعه می شوند پس از نظزات سبزتان ما را بی نصیب نگذارید

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

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

با سلام و تشکر از دوستان عزیز که ما را با ایملها و نظرات خود دلگرم می کنند

ایمیلهایی از برخی دوستان به دست ما رسیده که سوالاتی تقریبا مشابه در آنها نوشته شده و حاکی از اشکالاتیست که در برنامه نویسی خط تلفن برای این غزیزان به وجود آمده است.

مشکل اول: دوستان نوشته اند  که برنامه بر روی مودم ما درست جواب نمی دهد؟

خدمت شما عرض کنم که این برنامه ها همگی تست شده هستند و به درستی جواب می دهند اما من از مودم External  استفاده می کنم و مطمینم که روی مودمهای External جواب می دهد اما برای مودمها Internal مطمین نیستم و ممکن است هر مدلی را نپذیرد.

مشکل دوم: برخی دوستان نوشته اند که ما فایهای صوتی خودمان که می خواهیم پخش شوند را برای برنامه معرفی می کنیم امام متاسفانه پخش نمی شوند!؟

خدمت دوستان بایستی عرض کنم که شما نمی توانید از هر فایل صوتی استفاده کنید چونکه ابزارهای KD فقط فایلهای *.Wav را پشتیبانی می کنند آن هم با این شرایط که این فایلها بایستی دارای فرمتی با این مشخصات  8,000hz;16bit;mono باشد اگر فایل صوتی شما از نوع Wav باشد ولی مشخصات آن متفاوت باشد مثلا Stereo باشد پخش نخواهد شد. پس ابتدا شما هر فایلی که دوست داشته باشید حتی اگر MP3 باشد را ابتدا به فرمت Wav تبدیل کنید و مشخصات آن را بصورت بالا در آورید سپس در برنامه از آن استفاده کنید برای این کار برنامه های کمکی زیادی موجود می باشد. من برای شما نحوه تغییر دادن مشخصات یک فایل Wav را به روش خود ویندوز در پایین آموزش داده ام با من همراه باشید:

ابتدا برنامه Sound Recorder را اجراء کنید می توانید آنرا در مسیر زیر پیدا کنید

Start > All Programs > Accessories >  Entertainment > Sound Recorder

حالا از منوی File ، فایل صوتی خود را باز کرده و سپس بقیه مراحل را مانند شکل زیر انجام داده و در انتها از منوی File گزینه Save  را انتخاب کنید تا فایل با مشخصات جدید ذخیره شود به شما قول می دهم که این فایل توسط مودم شما قابل پخش خواهد بود.

                 

دوستان عزیز با نظرات خود ما را در پیشبرد هر چه بهتر وبلاگ یاری فرمائید .

پاسخ به تماس گرفته شده و تشخیص دکمه های فشرده شده

پاسخ به تماس گرفته شده و تشخیص دکمه های فشرده شده

با سلام خدمت دوستان و مخاطبین عزیز

از تاخیری که در ارائه مطالب پیش آمد عذرخواهی می طلبم و خدمتتان عزض کنم که تنها دلیل آن تجهیز و راه اندازی مرکز IT بود.

ما در مقاله قبلی یادگرفتیم که چگونه از طریق برنامه و مودم با تلفنهای مختلف تماس بگیریم و پیغام خودمان را پخش کنیم، ایمیلهای زیادی هم از طرف دوستان دریافت کردم که با مشکلاتی مواجه شدن و حتماً در این رابطه مقاله ای برای رفع این ایرادها خواهم نوشت. امروز می خواهیم عکس حالت بالا را انجام دهیم و این بار می خواهیم یک سیستم پاسخگو پیاده سازی کنیم، بدین شکل که وقتی تماس گیرنده ای به شماره ما زنگ بزند سیستم آنرا تشخیص داده و پاسخ آنرا بدهد. باما باشید:

برای انجام چنین کاری بایستی ابتدا موارد زیر را انجام دهیم:

1-                   خط تلفن را به مودم کامپیوترمان وصل کنیم

2-                  خط راتباطی را انتخاب بکنیم و آنرا فعال کنیم

3-                  در قسمت کنترل وضعیتها کد مناسب برای وضعیت csReferring بنویسیم

لطفاً پروژه جدیدی را شروع کنید و بر روی فرم آن اشیاء زیر را قرار دهید:

                                                       

اکنون قسمت Var را همانند درس اول ( مقاله آغاز ارتباط و کنترل خط) طراحی کنید همچنین قسمت رویدادOnCreate   را به همان صورت و نیز کد مربوط به ComboBox1 را نیز همانند کد درس اول بنویسید و در پایان شئی KDPhone1 را انتخاب و برای رویداد OnCallState آن همان کد درس اول را وارد کنید.... بسیار خُب تا اینجا تمام برنامه ما تکراری بود!! پس چگونه می توان تماس گرفته شده را تشخیص داد؟ برای این کار وضعیت به خصوصی را شئی KDPhone  دارا می باشد که نام این وضعیت csReferring است و بایستی آنرا به وضعیتهای onCallState اضافه بکنیم، اگر ما برنامه را اجرا کنیم و خط ارتباطی ( مودم) را فعال کنیم و بعد از آن شخصی با ما تماس بگیرد آنگاه وضعیت csReferring بطور خود کار رخ خواهد داد اما این کافی نیست و هنوز برنامه ما قادر به پاسخ نمی باشد لذا برای اینکه پاسخگویی و ارتباط آغاز گردد بایستی در این وضعیت ما از تابع Answer(0) استفاده می کنیم (مانند این است که گوشی را برداشته باشیم)  در زیر کد مربوط به رویداد onCallState مربوط به KDPhone1 را برای شما باز نویسی کرده ام:

case CallState of

 csConnected  :

   begin

      Memo1.Lines.add ('تماس برقرار شد' );

           Err := KDVoice1.Play( KDPhone1.WavePlayID,'start.wav',0,-1 );

             Memo1.Lines.add ('در حال دريافت شماره');

      if err<>0 then ShowMessage(KDPhone1.GetErrorMsg(err));

   end;

csDisconnected :    Memo1.Lines.add ('ارتباط قطع شد');

csRing: Memo1.Lines.add ('در حال زنگ خوردن');

csBusy:

   begin

           Memo1.Lines.add ('خط ارتباطي مشغول مي باشد');

          KDPhone1.Hangup;

   end;

   csError:

    begin

       Memo1.Lines.add ('خطایی در تماس رخ داده است');

       KDPhone1.Hangup;

    end;

  csOffering:

    begin

          Memo1.Lines.add ('دریافت تماس جدید');

                err := KDPhone1.Answer(0);

         if err<>0 then ShowMessage(KDPhone1.GetErrorMsg(err));

    end;

 end; //case

به همین سادگی بود تنها چیزی که اضافه کردیم همان کدی هست که در بالا با رنگ متفاوت نشان داده شده است. لازم به ذکر است بعد از آنکه تابع Answer به تماس پاسخ داد وضعیت csConnect رخ خواهد داد که ما در اینجا از این فرصت اسفاده کردیم و یک فایل صوتی خوش آمد گویی قرار دادیم تا به محض تماس برای طرف مقابل پخش گردد.

خب اما قسمتی که برخی دوستان ایمیل فرستادن و بی صبرانه منتظر آن هستند، چگونه در هنگام برقراری تماس می توانیم بفهمیم که کاربر تماس گیرنده کدام دکمه های گوشی خود را فشار می دهد تا بتوانیم با توجه به آنها برنامه ای خواصی بنویسیم؟ خوشبختانه KD راه حل ساده ای برای این موضوع گذاشته است که من در اینجا فقط به ذکر یک مثال ساده اکتفا می کنم. برای دسترسی به این قابلیت بایستی ابتدا شیئ KDPhone1 را انتخاب کرده و سپس در قسمت Event مقابل رویداد onDigitDetected دوبار کلیک کنید، این همان چیزیست که ما نیازمندیم و KD آنرا موقعی که دکمه ای از سمت تماس گیرنده فشار داده شود فراخوانی می کند به شکل زیر دقت کنید:

procedure TmainForm.KDPhone1DigitDetected(Sender: TObject; Digit: Char;  CallHandle: Integer);

begin

    if Digit='1' then …………

    if Digit='2' then …………

   if Digit='*' then …………

end;

در رویداد فوق متغیر Digit از نوع کاراکتر بوده و شماره یا علامت فشرده شده توسط طرف مقابل را  به ما می دهد اکنون شما برای تمرین کد زیر را به برنامه خود اضافه کنید:

 
    if Digit='1' then KDVoice1.Play( KDPhone1.WavePlayID,'1.wav',0,-1 );
    if Digit='2' then KDVoice1.Play( KDPhone1.WavePlayID,'2.wav',0,-1 );
    if Digit='3' then KDVoice1.Play( KDPhone1.WavePlayID,'3.wav',0,-1 );
    if Digit='4' then KDVoice1.Play( KDPhone1.WavePlayID,'4.wav',0,-1 );
    if Digit='5' then KDVoice1.Play( KDPhone1.WavePlayID,'5.wav',0,-1 );

 

در مثال فوق با فشرده شدن هر عدد یک فایل صوتی برای تماس گیرنده پخش می شود و اگر علامتی فشرده شود مانند * , #   فایل صوتی دیگری پخش می شود. البته شما می توانید یک شماره چند رقمی را دریافت کنید و برای آن برنامه بنویسید برای مثال مشترکی که از طریق تلفن شماره اشتراک خود را وارد می کند تا اطلاعاتی را دریافت کند و ....  البته برای این کار بایستی یک قانونی قرار بدهید و آنرا در هنگام آغاز تماس، به تماس گیرنده اطلاع دهید مثل خاتمه ورود شماره با فشردن دکمه * لطفاً مثال زیر را ملاحظه فرمائید:

procedure TmainForm.KDPhone1DigitDetected(Sender: TObject; Digit: Char;  CallHandle: Integer);

begin

   If Digit='*' then begin

    //  کد و عملیات مورد نظر

     N := '';

  End

     else

   N := N+Digit;

end;

می بینید که مساله بسیار ساده هست کاربر ارقام مربوط به کد خود را یکی یکی وارد می کند و برای پایان از دکمه * استفاده می کند و در بالا متغیر N یک متغیر از نوع رشته ای و بصورت سراسری معرفی شده استکه در آن شماره نهایی ثبت می شود و پس از خاتمه عملیات دوباره این متغیره خالی شده و منتظر شماره بعدی می ماند.  ما از این روش در یک برنامه برای انبار شرکت گاز میانکوه خوزستان استفاده کردیم و مدتیست که سیستم پاسخ گوی انبار فعال است البته ما اطلاعات تماس گیرنده شماره درخواست تاریخ و ساعت آن را در برنامه ثبت می کنیم تا برنامه بتواند اطلاعات آماری برای ما نشان دهد.

خب این درس هم به امید خدا تمام شد و امیدوارم که به درد شما دوستان گلم خورده باشد به یاری خدا در روزهای آینده مقالات دیگری در این رابطه قرار خواهم داد ... نظر فراموش نشه.

نکته 1 : گوشی تماس گیرنده بایستی در حالت Tone باشد

نکته 2 : فایلهای صوتی را می توانید پس از دانلود برنامه در مسیر اصلی پیدا کنید.

                                                                  دانلود برنامه

 

مركز آموزش IT

مركز آموزش IT

با سلام خدمت دوستان از اينكه نتونستم مقالات جديد رو توي وبلاگ بزارم متاسفم شايد اين هفته اين كار رو بكنم. دليل تاخير هم راه اندازي مركز آموزشي فن آوري اطلاعات با همكاري دوستام در اميديه هست كه به اميد خدا اسفند ماه افتتاح خواهد شد