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

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

روی 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
با سلام خدمت دوستان از اينكه نتونستم مقالات جديد رو توي وبلاگ بزارم متاسفم شايد اين هفته اين كار رو بكنم. دليل تاخير هم راه اندازي مركز آموزشي فن آوري اطلاعات با همكاري دوستام در اميديه هست كه به اميد خدا اسفند ماه افتتاح خواهد شد

درس اول : آغاز ارتباط و کنترل خط
درس اول : آغاز ارتباط و کنترل خط
نکته : برای ایجاد ارتباط بایستی حتما یک دستگاه مودم بر روی کامپیوتر شما نصب باشد و خط تلفن به آن متصل باشد.
جهت ایجاد ارتباط بایستی سه عمل اولیه انجام دهید:
1- ابتدا بایستی خط ارتباطی را برای برنامه مشخص کنید. منظور اینست که شما از طریق کدام پورت یا کدام مودم می خواهید تماس را برقرار کنید و آن خط را بایستی فعال کنید.
2- بایستی شماره گیری را آغاز کنید. پس از اجرای درست و موفقیت آمیز مرحله بالا خط تلفن آماده خواهد بود که شماره تلفن مورد نظر را بصورت رشته ای وارد کنید و شماره گیری را آغاز کنید.
3- بایستی وضعیت ارتباطی را بررسی کنید. پس از شماره گیری بایستی بررسی کنید که آیا ارتباط برقرار شد، خط مشغول است و...
برای درک بیشتر و بهتر مثالی در زیر آماده کرده ام که با همدیگر آن را مورد مطالعه قرار می دهیم:
ابتدا وارد دلفی شده و یک پروژه جدیدی شروع کنید و اجزاء زیر را بر روی فرم مانند شکل را قرار دهید:

در مثالهای زیر توابع، متدها و خصوصیهای مربوط به کامپوننتهای تلفن را با رنگ نارنجی جهت راحتی کار نشان داده ایم و در مورد آنها توضیحاتی را نوشته ایم، البته لازم بذکر است که کلیه توابع در صورت موفقیت مقدار صفر را بر می گردانند و در صورت عدم موفقیت کد مربوط به خطا را بصورت عدد بر می گردانند که ما در برنامه زير از متغیر err برای ذخیره کد خطا و سپس نمایش خطای مربوط به آن استفاده کردیم.
1- ابتدا در قسمت Var اصلی برنامه سه متغیر با نامهای زیر تعریف کنید:
var
Form1: TForm1;
I : Word;
S : WideString;
err : Word;
implementation
2- بر روی فرم دوبار کلیک کرده تا رویداد OnCreate فرا خوانی شود و سپس کد زیر را وارد کنید:
procedure TForm1.FormCreate(Sender: TObject);
begin
for I := 0 to KDPhone1.NumberOfLines-1 do
begin
KDPhone1.GetLineName( i,s );
ComboBox1.Items.Add(S)
end;
end;
در کد فوق همانگونه که مشاهده می کنید از یک حلقه شمارشی برای بدست آوردن خطوط ارتباطی موجود در کامپیوترمان استفاده کرده ایم. در این حلقه از خصوصیت NumberOfLines برای بدست آوردن تعداد خطوط استفاده کردیم سپس با استفاده از تابع GetLineName( i,s ) برای بدست آوردن نام خط ارتباطی و ذخیره آن در متغیر S استفاده کردیم و در انتها مقدار S را درون ComboBox1 اضافه کردیم تا برنامه موقع اجراء لیستی از خطوط ارتباطی را جته انتخاب به ما نشان دهد.
3- اکنون بر روی ComboBox1 دابل کلیک کنید و کد زیر را وارد کنید:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
err := KDPhone1.LineActive(ComboBox1.ItemIndex,True);
if err<>0 then ShowMessage(KDPhone1.GetErrorMsg(err))
else Memo1.Lines.add('خط ارتباطی آماده می باشد');
end;
در فوق ما کدی نوشتیم که کاربر با انتخاب هر کدام از خطوط موجود در ComboBox1 بتواند آن خط را بعنوان خطوط فعال توسط تابع LineActive( LineNumber , True ) معرفی و فعال کند. چنانچه فعال سازی خط با مشکل مواجه شود آنگاه با استفاده از تابع GetErrorMsg(err) پیغام مربوط به آن خطا را بدست آورده و نمایش می دهیم. شما می توانید درون اسامی مربوط به خطوط و دستگاههاي ارتباطي نام مودم خود را یافته و آنرا انتخاب کنید.
4- اکنون بر روی دکمه Dial دابل کلیک کنید و کد زیر را بنویسید:
procedure TForm1.Button1Click(Sender: TObject);
begin
err := KDPhone1.DialNumber( Edit1.Text,0 );
if err<>0 then ShowMessage(KDPhone1.GetErrorMsg(err));
end;
توسط تابع DialNumber( Edit1.Text,0 ); شماره تایپ شده توسط کاربر در Edit1.Text شروع به شماره گیری می گردد. شما می توانید شماره ثابتی را درون این تابع بصورت رشته ای بنویسید.
|
csError |
csRemotePartyDisconnected |
csDisconnected |
|
csOfferedCallDropped |
csBusy |
csConnected |
|
csWaitingDisconnection |
csOffering |
csProceeding |
|
csNoDialTone |
csRing |
csDialing |
|
csWaitingForFaxCommand |
csRemovedFromConference |
csInConference |
|
csOnHold |
csRingBack |
csDialTone |
|
|
|
csUnhold |
اکنون شئی KDPhone1 را انتخاب کرده و سپس از پنجره Object Inspector به تب Events رفته و در مقابل OnCallState دابل کلیک کنید و سپس کد زیر را بنویسید:
procedure TForm1.KDPhone1CallState(Sender: TObject; CallState: TCallState;
Param1, Param2, CallHandle: Integer);
begin
case CallState of
csDialing : Memo1.Lines.Add( 'در حال تماس گرفتن');
csConnected :
begin
Memo1.Lines.Add( 'تماس برقرار شد' );
Err := KDVoice1.Play( KDPhone1. WavePlayID,'C:\ Wellcome.Wav',0,-1 );
if err<>0 then ShowMessage(KDPhone1.GetErrorMsg(err))
else Memo1.Lines.Add('در حال پخش پیغام');
end;
csDisconnected : Memo1.Lines.Add( 'ارتباط قطع شد' );
csBusy:
begin
Memo1.Lines.Add( 'خط تلفن مشترک مشغول می باشد' );
KDPhone1.Hangup;
end;
csError:
begin
Memo1.Lines.Add( 'خطایی در تماس رخ داده است' );
KDPhone1.Hangup;
end;
end; //of case
end;
به نظر می رسد کمی گیج کننده باشه ولی کامل منطقی و جالب می شه گفت با کد نویسی درست وضعیتها می شه کنترل بیشتری بر روی سیستم داشته باشیم اما شرح کدها:
وضعيت csDialing موقعي اتفاق مي افتد كه تلفن طرف مقابل در حال زنگ خوردن باشد.
وضعیت csConnected موقعی اتفاق می افتد که خط ارتباطی و شماره طرف مقابل با موفقيت وصل شود که در اینصورت ما بعد از نمایش پیغامی مناسب توسط شئی KDVoice1 و با استفاده از تابع Play فایل صوتی Wellcome.Wav واقع در درایو C: را پخش کردیم که در این هنگام طرف مقابل آن صدا را خواهد شنید لازم بذکر است که فایل صوتی حتما باید از نوع Wav باشد.
وضعیت csBusy موقعی رخ می دهد که تلفن مقابل زنگ مشغولی بخورد که ما در این هنگام پس از نمایش پیغام مناسب سعی بر قطع ارتباط با استفاده از متد Hangup کردیم این متد هر کجا بکار رود موجب قطع ارتباط شده و وضعیت csDisconnected را بوجود می آورد.
وضعیت csError موقعی بکار می رود که در هر صورتی خطای در ارتباط رخ دهد. که در این هنگام ما سعی بر قطع ارتباط می کنیم.
توضیح در مورد تابع Play : این تابع برای پخش صدا بکار می رود که پارامتر اول آن نشان دهنده محل پخش فایل صوتی است اگر مقدار آن 1- باشد یعنی صدا از طریق کارت صدای کامپیوتر جاری پخش شود و اگر از تابع WavePlayID مربوط به شیئ KDPhone استفاده کنیم آنگاه خط تلفن را برای پخش بکار می گیرد، در پارامتر دوم بایستی مسیر و نام فایل صوتی را مشخص کنیم، پارامتر سوم محل آغاز پخش فایل را مشخص می کند که عدد صفر نشانه شروع از ابتدا می باشد و آخرین پارامتر محل پایان فایل صوتی را نشان می دهد که مقدار 1- نشان دهنده پایان فایل است.
6- اکنون شئی KDVoice1 را انتخاب کرده و سپس از پنجره Object Inspector به تب Events رفته و در مقابل OnSoundState دابل کلیک کنید و سپس کد زیر را بنویسید:
procedure TForm1.KDVoice1SoundState(Sender: TObject; State: TSoundState; BytePosition, ErrorNumber: Integer);
begin
ssPlayDone:
begin
Memo1.Lines.Add( 'پخش فایل صوتی با موفقیت به پایان رسید' );
KDPhone1.Hangup;
end;
ssError:
begin
KDPhone1.Hangup;
Memo1.Lines.Add( 'خطایی در پخش صدا رخ داده است' );
end;
end; // of case
end;
شئی KDVoice داری 11 وضعیت مختلف و کاربردی می باشد که در اینجا فقط به 2 از آنها اشاره کردیم (در مقالات بعدی این شئ بیشتر مورد بررسی قرار خواهد گرفت) . در وضعیت اول که در هنگام پایان پخش فایل صوتی اتفاق می افتد ما پیغامی را نمایش دادیم و سپس ارتباط را قطع کردیم.
اين هم تصويري از برنامه اجرا شده:

اینجانب در حال آماده کردن یک فایل ini مرجع کل خطاهای کامپوننت به زبان فارسی هستم که در اسرع وقت در اختیار شما قرار خواهم داد.
شما می توانید با استفاده از یک بانک اطلاعاتی برنامه ای بنویسید که به تلفن نفرات موجود تماس گرفته و پیغامی را پخش کند و در صورتی که موفق نشود فلگی (یک فیلد از نوع بولی) را علامت بزند تا شما بعدا به آن رسیدگی کنید و در صورت موفقیت نفر بعدی را بگیرد. مثلا سیستمی یادآوری تاریخ آزمون شاگردان. البته میشه برنامه های دیگری را نوشت در مقالات بعدی شما را با مطالب جالبتر و کاربردیتر آشنا می کنم.
خوب دوستان عزیز تا اینجا چطور بود نظر خودتان را برای بهتر شدن مطالب بنویسید منتظر نظرات شما هستم
در روهاي آينده بيش از۵ مقاله كاربردي و بهتر قرار خواهم داد منتظر باشيد...
مقدمه مقالات تلفن : آموزش نصب
مقدمه مقالات تلفن : آموزش نصب
با سلام همانگونه كه قول دادم مطالب را از امروز شروع مي كنم
ابتدا کامپوننت را از پایین دانلود کرده و سپس آنرا از حالت فشرده در آورده (با برنامه Winrar) و سپس آنرا در مسیر دلخواهی کپی کرده و نصب کنید در ضمن پس از باز كردن فايل از حالت فشرده پوشه اي با نام Sound را در آن پيدا خواهيد كرد كه فايلهاي صوتي مورد نياز تمارين و مثالها درون آن هست.
نحوه نصب به این شکل می باشد که ابتدا دلفی را اجرا کرده و سپس از منوی Component > Install Packges را کلیک کرده و سپس بر روی دکمه Add.. کلیک کرده و سپس وارد مسیر شده و فایل KDTeleDelphi2006.bpl یا KDTeleDelphi7.bpl (بستگی به نسخه دلفی شما) را انتخاب کرده و در خاتمه OK را کلیک کنید.
اکنون گروه جدیدی با نام KDTele Tools به کامپوننتهای دلفی اضافه می شود که شامل 8 جزء زیر می باشد:
|
KDPhone |
ایجاد ارتباط تلفی و کنترل تلفن |
|
KDVoice |
ضبط و پخش صدا بر روی خط تلفن |
|
KDFax |
ارسال و دریافت فکس |
|
KDFile |
ارسال و دریافت هر گونه فایل |
|
KDSpeack |
پخش متن دلخواه بصورت صدا بر روی خط تلفن |
|
KDListen |
دریافت فرمانهای صورتی |
|
KDSerialPort |
کنترل و ارسال داده از طریق پورت سریال |
|
KDWaveEditor |
کنترل صدا و نمایش موج صوتی |
در مقالات بعدی استفاده از این اجزاء را همراه با ذکر مثال توضیح خواهم داد و سعی بر این است که با ساده ترین مثالهای ممکن نحوه استفاده از آنها را توضیح دهم و انشا... به یاری امام زمان در پایان سعی بر نوشتن پروژه های حرفه ای و کاربردی خواهم کرد. یا علی................
برنامه نویسی خط تلفن
برنامه نویسی خط تلفن

این بار می خواهم با یک مقاله جذاب و کاربردی شما را قافل گیر کنم که ممکن است این مقاله تا 3 قسمت طول بکشد، در این مقاله با مطالب زیر آشنا می شویم:
· نصب و آشنايي با متدها
· راهندازي و ارسال پيغام از طريق خط تلفن
· شماره گیری و پخش صدا از طریق تلفن
· طراحی تلفن پیامگیر ( عکس العمل به شماره فشرده شده)
· ارسال فایل از طریق تلفن
· ارسال فکس
· ظبط صدای تماس گیرنده و تارخ و ساعت تماس
· و...
تنها کاری که شما بایستی انجام دهید اینست که ابتدا کامپوننت تلفن را که در پستهای پیشین قرار داده ام دانلود کنید و پس از نصب آن بر روی دلفی کارهای زیر را انجام دهید:
1. از نصب بودن مودم روی کامپیوتر خود مطمين شويد
2. خط تلفن را به مودم وصل کنید
3. گام به گام مطالب آتی را دنبال کنید.
به زودي ....
جدا کننده ارقام
جدا کننده ارقام (کاری از دوست عزیز حمیدرضا پنجي )
با سلام
این بار من فقط یک میزبانم چونکه دوست عزیز جناب آقاي حميدرضا پنجي یونیتی با نام UnitArgham.pas را برایم ایمل کرده است که توسط تابع موجود در آن می توان دریافت اطلاعات توسط EditBox را محدود به اعداد کرد و از ورود اطلاعات غیر عددی جلوگیری کرد. در ضمن می توان اعداد دریافت شده را با جدا کننده از هم نشان داد .

الف) نحوه افزودن یونیت به برنامه:
1- ابتدا آنرا دانلود کرده و سپس آنرا از حالت فشرده خارج کنید و در یک پوشه نگهداری کنید.
2- اکنون پروژه مورد نظر خود را باز کرده و این یونیت را به آن اضافه کنید، که برای انجام این کار کافیست از منوی Project > Add to Project … Shift+F11 را انتخاب کرده و بعد از آن وارد مسیر مربوط به یونیت شده و روی Open کلیک کنید.
3- حال درون هر فرمی که می خواهی این یونیت را به کار ببرید وارد شده و با استفاده از منوی File > Use Unit و انتخاب این یونیت آن را برای آن فرم فعال کنید.
ب) نحوه بکار گیری توابع موجود در یونیت:
بر روی EditBox مورد نظر دابل کلیک کرده و کد زیر را وارد کنید:
Edit1.Text :=Argham( Edit1.Text , 1);
Edit1.SelStart :=length( Edit1.text );
در صورت داشتن هرگونه پرسشی در این زمینه می توانید با خود آقا حمید تماس بگیرید آدرس ایمیل ایشان:
Hrpanji @ yahoo.com
من شخصاَ از آقا حمید تشکر می کنم و منتظر کارهای دیگر ایشان هستم .
شما دوستان عزیز می توانید نمونه کارها یا مقالات خودتان را برای من بفرستید تا با نام خودتان در وبلاگ قرار دهم.
در پایین می توانید یونیت و نمونه برنامه نوشته شده توسط آقای حمید را دانلود کنید:
Fast Report 3.2 همراه با آموزش نصب
Fast Report 3.2 همراه با آموزش نصب
با سلام
چندین ایمیل بدستم رسید که در آن متاسفانه دوستان از عدم موفقیت در نصب Fast Report نوشته بودند، به آنها حق می دهم زیرا که من نسخه اصلی و شلوغ آنرا در وبلاگ گذاشته بودم ، که در آن میبایست برخی از فایلها باز شده و کمپایل شوند و همچنین چندین مرحله عمل کپی از مسیرهای مختلف را انجام داد، برای راحتی کار دوستان این بار نسخه کمپایل شده و گلچین شده برای دلفی 7 و 2006 را که آماده نصب می باشد را برای شما آماده کرده ام ( لقمه آماده) شما فقط کافیست پس از دانلود کردن و خارج کردن آن از حالت فشرده و کپی کردن در یک مسیر دلخواه مراحل زیر را به ترتیب انجام دهید:
1- تمام فایلهایی که با نام f*.bpl , f*.dcp شروع می شوند را یافته و آنها را در مسیر C:\Windows\System32 کپی کنید.
2- اکنون وارد دلفی 7 شده و سپس از منوی Component > Install Package را انتخاب کرده و بر روی دکمه Add کلیک کنید، اکنون در پنجره ظاهر شده وارد مسیر مربوط به Fast Report شده و تمام فایلهایی که با نام dcl*.bpl شروع می شوند را انتخاب کرده و سپس دکمه Open را کلیک کنید مانند شکل زیر:

راستی بعد از نصب مسیر Fast Report رو نه تغییر بدید نه حذف کنید OK ؟
در ضمن من این نسخه را بصورت فارسی کمپایل کردم.
تمام مطالب گفته شده در بالا برای دلفی 2006 هم به همان صورت می باشد.
تهیه برنامه های بانک اطلاعاتی مبتنی بر Client/Server
تهیه برنامه های بانک اطلاعاتی مبتنی بر Client/Server
یکی از دوستان عزیز آقاي نادري درخواست کرده اند که نحوه نوشتن برنامه های مبتنی بر Client/Server را توضیح دهم. من هم درخواست ایشان را با کمال میل تقبل کرده و توضیحاتی مختصر در این ضمینه در حدی که اصول کار مشخص شود را ارائه کرده ام:
این مقاله به کلیات مطلب اشاره کرده و کارهای اولیه و اصلی را توضیح داده است برای دانش بیشتر به کتب و مقالات و بهتر از همه به مثالها و راهنمای نرم افزارها مراجعه کنید.
در برنامه هایی که بصورت Client/Server نوشته می شوند مانیاز به آیتمهای زیر داریم:
1. یک شبکه کامپیوتری LAN :(در اینجا منظور یک شبکه با حداقل 2 کامپیوتر)
2. یک کامپیوتر سرور:
منظور از کامپیوتر سرور این نیست که حتماً سخت افزار پیشرفته داشته باشد یا حتی اینکه سیستم عامل سرور نظیر ویندوز سرور 2003 بلکه می تواند یک کامپیوتر معمولی با یک سیستم عامل معمولی مانند ویندوز XP داشته باشد. اما بهتر است که Windows Server 2003 باشد که در آن سرویس Active Directory راه اندازی گردیده شده باشد تا بتوانید یک شبکه Client/Server مبتنی بر Domain پیداه سازی کرده که می توان گفت با این روش امنیت شبکه و بانکهای اطلاعاتی موجود در کامپیوتر سرور را بالا برد. البته سعی شود بهترین کامپیوتر موجود را انتخاب کنید در ضمن سعی کنید تا حد ممکن از این کامپیوتر استفاده های جانبی نکرده و فقط موقع کار، آنرا جهت سرویس دهی روشن بگذارید. مطلب را کوتاه می کنم و فرض من در این مقاله استفاده از یک شبکه معمولی Peer To Peer با کامپیوترهای معمولی و فاقد سیستم عامل سرور.
3. یک پایگاه داده سرور
برای چنین برنامه هایی ما نیاز به یاپگاههای داده قویتر و فراتر از Access داریم پایگاه داده های که خود سروری برای پاسخ به تقاضا های و کنترل ترافیک باشند در اینجا من پایگاه معروف و قدرتمند SQL Server را معرفی می کنم. کافیست که نرم افزار آن را از بازار تهیه کرده و در یک کامپیوتر که آنرا بعنوان سرور در شبکه انتخاب کردید نصب بکنید. خدمت شما بایستی عرض کنم که حداقل اطلاعاتی که شما در مورد SQL Server باید بدانید1- ایجاد پایگاه داده جدید 2- ایجاد جدول در پایگاه داده و 3-معرفی سطح دستری کاربران است البته ایجاد ارتباط (Relationship)هم پیشنهاد می شود که فکر کنم با مراجعه به کتابهای مربوطه در عرض مدت زمان بسیار کوتاه به توانید به این منظور نایل آئید.
توجه : در هنگام نصب SQL Server از شما تقاضای وارد کردن یک نام برای آن می شود. در این مثال من اسم DaraServer را انتخاب کردم.

موارد گفته شده نیازمندیهای اولیه یک برنامه مبتنی بر Client/Server می باشد.
آغاز کار برنامه:
ما در این مثال درون سرور SQL که نام آنرا DataServer گذاشته ایم یک پایگاه داده با نام Personel ایجاد کردیم که در آن سه جدول با نامهای PInfo (اطلاعات عمومی کارمندان)، PSalary ( اطلاعات حقوق کارمندان) و PRest ( اطلاعات مرخصیها).
· ایجاد پایگاه اطلاعاتی در SQL Server
· ایجاد ارتباط بین برنامه و پایگاه داده
· افزودنTable یا Query در برنامه
· قرار دادن کنترلهای مورد نیز روی فرمها
· آغاز برنامه نویسی

ایجاد ارتباط:
در دلفی دو روش برای ایجاد ارتباط بین برنامه شما و پایگاه داده وجود دارد یکی استفاده از اجزاء dbExpress و دومی استفاده از اجزاء (dbgo) ADO می باشد. که هر دو قدرتمند و پاسخگو می باشند ما در اینجا به دلیل معروفیت و سادگی از ADO استفاده خواهیم کرد:
1. وارد دلفی شده و یک پروژه جدیدی را شروع کنید.
2. یکData Module به برنامه اضافه کنید و خاصیت Name آنرا DC بگذارید.
3. اکنون به تبADO مربوط به در دلفی 7 یا dbGo در دلفی 2006 بروید و یک شئی TADOConnection را روی صفحه DC قرار داده و نام آنرا SQLConnection بگذارید.
4. حال بر روی Connection دوبار کلیک کرده تا صفحه ای با با دو کادر ظاهر شود ... حال دکمه Build را کلیک کنید تا صفحه شکل زیر ظاهر شود که دارای 4 تب می باشد در تب اول (Provider) از لیست موجود گزینه Microsoft OLE DB Provider for SQL Server را اتخاب کرده و سپس روی Next کلیک کنید اکنون تب Connection فعال می شود در این تب تنظیمات را مطابق شکل زیر انجام دهید:
5. اکنون Ok را کلیک کنید.
6. حال شیئ SQLConnection را انتخاب کرده و خصوصیت LoginPrompt آنرا برابر با False قرار دهید در غیر ینصورت با هر بار ورد یوزر و پسورد ورود به پایگاه داده خواهد شد.
خُب به شما تبریک می گویم تا اینجا توانستید برنامه را با بانک اطلاعاتی در سرور مرتبط کنید.
7. اکنون خصوصیتهای AdoTable1 را بصورت زیر تنظیم کنید
· Name > tblPersonel
· Connection > SQLConnection
· TableName > PInfo
8. اکنون Table شما آماده است و شما کافیست روی آیکن آن دوبار کلیک کنید تا پنجره فیلدها باز شده و سپس با کلیک راست و انتخاب آیتم Add All Field نمام فیلدهای مربوط به جدول PInfo واقع در پایگاه داده Personel در سرور DataServer را اضافه کرده و آنها را ببینید.
ما باقی کارها مشابه به کار با بانکهای اطلاعاتی محلی است اما لازم به ذکر است که در ADO تنظیم خصوصیتهای CursorLocation و CursorType اهمیت ویژه ای دارد و همچنین اجزاء TADOCommand و TADOQuery بسیار پر استفاده هستند و اما مهمتر از همه اینکه شما بایستی دستورالعملهای مربوط به فرامین SQL را هر چه بیشتر بلد باشید و بتوانید در برنامه نویسی بکار ببرید قدرت و انعاف بیشتری را می توانید در تولید برنامه های Client/Server بکار بگیرید.
در انتها هم باز کردن اتصال بایستی خصوصیت Connect مربوط به شئی SQLConnection را برابر با True قرار داده و همچنین جداول را Open کنید.
برنامه مكانيزه برگزاري آزمونهاي چهارگزينه اي
برنامه مكانيزه برگزاري آزمونهاي چهارگزينه اي
با سلام
امروز براي شما برنامه اي جهت دانلود قرار دادم كه مي توانيد از آن براي برگزاري آزمونهاي چهار گزينه اي استفاده كنيد. اين برنامه را قبلا هم در وبلاگ قرار داده بودم اما يك سري اشكالاتي داشت كه پس از برطرف كردن آنها اكنون برنامه اصلاح شده آن را براي شما قرار دادم. من اين برنامه را بيشتر براي آن دسته از دوستاني كه در امر آموزش فعاليت دارند پيشنهاد مي كنم . جهت كسب اطلاعات بيشتر در مورد نحوه استفاده از برنامه به راهنماي آن مراجعه كنيد. حتما دانلود كنيد...
كامپوننت منشي تلفن
كامپوننت منشي تلفن
با سلام به دوستان
تعدادي از دوستان تقاضاي كامپوننتي كردن كه بتوان با استفاده از آن يك منشي تلفن ايجاد كرد .

كامپوننتي كه من براي شما در اينجا گذاشتم بسيار كامل بوده و داراي توابع زياد و قوي مي باشد. در ضمن اين نسخه كامل كامپوننت مي باشد و نياز به كرك يا سريال نمي باشد براي فهميدن نحوه استفاده از آن با Help آن مراجعه كنيد كه داراي مثالهاي مختلفي مي باشد. اميدوارم خوشتان بيايد ... منتظر نظرات شما هستم.
FastReport 3.2 Full Source
FastReport 3.2 Full Source
با سلام توجه توجه لينكها عوض شدند و براي شما دو نمونه گذاشتم نسخه كامل و نسخه ستاپي

بنا به درخواست دوستان عزيز مبني بر قرار دادن نسخه كامل FastRepot عرض كنم كه اينجانب نمونه هاي مختلفي را بصورت نسخه كامل دارم كه چند نمونه بصورت Setup و چند نمونه ديگر را بايستي بصورت Package . در اينجا براي شما نسخه Package كه از دلفي 4 تا دلفي 2006 را ساپورت مي كند همچنين قابليت نمايش پيغامها بصورت فارسي را دارد قرار داده ام و خدمتتان عرض كنم كه اين نسخه بصورت Full Source مي باشد و نيازي به كرك يا سريال ندارد.
در صورت تمايل نسخه Setup آنرا نيز براي شما قرار خواهم داد. منتظر نظرات، سوالات و پيشنهادات كارساز شما هستم.
Label فرمت بندي شده
Label فرمت بندي شده
با سلام خدمت دوستان از تاخيري داشتم معذرت مي خوام
امروز مي خوام يك مطلب بسيار كوچكي را بنويسم كه بيشتر دوستانم با آن درگيري داشته اند و چندين بار از من پرسيده اند، اينكه چگونه مي توان يك عدد را (از هر كجا) موقع نمايش دادن در يك Label بصورت قالبندي شده نمايش داد؟ مثلا حاصلجمع تعدادي عدد را بصورت قالبندي شده بر اساس واحد پول نشان داد؟
عرض كنم كه براي وارد كردن اطلاعات مشكل را مي توان با شيئ MaskEdit حل كرد ولي براي نمايش دادن شئي وجود ندارد اما در عوض دلفي توابع بسيار قدرتمندي ارائه كرده كه مي توان از آنها استفاده كرد. همه شما با تابعي به نام IntToStr() آشنايي داريد و توابع FlotToStr(), CurrToStr() و... خوب تمام اين توابع نمونه ديگر نيز با نام IntToStrF(),CurrToStrF(),FlotToStrF() و... دارند كه در اينجا حرف F گرفته شده از عبارت Format مي باشد و مي تواند نتيجه بدست آمده را بصورت قالبندي شده برگرداند.
من در زير يك مثال آورده ام كه مي توانيد آنرا مطالعه كنيد :

در اين مثال يك Edit1 , Button1 , Label1 ,Label2 روي فرمي قرار داده شده اند و سپس براي رويداد OnClick شئي Button1 كد زير نوشته شده است:
procedure TForm1.Button1Click(Sender: TObject);
Var N : Currency;
begin
N := StrToCurr(Edit1.Text);
Label2.Caption := CurrToStrF(N,ffCurrency,0);
end;
همانطور كه مشاهده مي كنيد ابتدا مقادر موجود در Edit1 را پس از تبديل درون متغير N قرار داديم، سپس با استفاده از تابع CurrToStrF() آنرا تبديل به واحد پول كرديم. آخرين پارامتر تابع كه در اينجا عدد صفر است بيانگر تعداد ارقام اعشاري است كه مجاز به نمايش آنها مي باشد (در كشور ما براي واحد پول صفر است).
نكته : متغير N مي تواند Integer , LongInteger , Word , LongWord , … باشد.
اميدوارم كه اين مطلب به درد شما خورده باشد.
تعدادي سوالات در قسمت نظرات دوستان عزيز پرسيده اند كه در اسرع وقت پاسخ خواهم داد.
عذرخواهي و برطرف كردن مشكل دانلود
عذرخواهي و برطرف كردن مشكل دانلود

با عرض معذرت از خراب بودن لينكهاي دانلود پست قبلي و نگذاشتن رمز مربوط به آنها . تمامي لينكهاي زير را تغيير دادم مي توانيد اين لينكهاي جديد را براي دانلود استفاده كنيد بدون نياز به رمز![]()
در ضمن ممكنه من تا دو هفته ديگه نتونم مطلب جديدي بنويسم
Rave,UML,GIF
Rave,UML
در پاسخ به سوالات یکی از دوستان محترم:
1- گزارشگيري Rave :
2- ايجاد UML :
1- گزارشگيري Rave :خدمت شما بایستی عرض کنم که جهت اینکه بتوان اطلاعات موجود در بانکهای اطلاعاتی یا فایلهای محلی را بصورت جداول و فرمهای قالبندی شده و زیبا برای ارسال به چاپگر آماده کرد نیاز به برنامه ها و کامپوننتهای مخصوص براي انجام اين كار هست که اصطلاحا به این عمل تهیه گزارش یا Reporting می گویند و مي توان به محصولات زير اشاره كرد:
Quick Report : در نسخه های پیشین دلفی (قبل از دلفی 7 ) از این کامپوننت ها استفاده می شد که هنگام تهیه گزارش می توانستيدراحت به تک تک اجزاء گزارش دسترسی داشت و گزارش پس از ایجاد نیز در دل فایل .exe قرار می گرفت و با برنامه قابل حمل بود.
Rave : در نسخه 7 به بعد بورلند این کامپوننتها را به کار گرفت این اجزاء محیطی حرفه ای و قدرتمند دارند و می توان گزارشات بسیار زیبایی با آنها ایجاد کرد من جمله توانایی این اجزاء ذخیره گزارش با فرمت TXT,PDF,RTL,HTM می باشد و از قابلیتهای دیگر آن اینکه فایلهای گزارش بصورت جدا در دیسک ذخیره می شوند و این یعنی اینکه می توان در صورت نیاز بدون دستکاری کد برنامه فقط گزارشات را تغیر داد و آن فایلها را با برنامه منتشر کرد. نيز كاربر مي تواند درون اين گزارشات كد نويسي نيز انجام دهد.http://www.nevrona.com
Fast Report : یک محصول بسیار زیبا و قدرتمند می باشد که بایستی بصورت جداگانه آن را خریداری کرد و سپس آنرا بر روی دلفی نصب کرد، گزارش ساز بسیار حرفه ای و در عین حال ساده که قابلیت تولید انواع گزارشات ستونی و سطری همراه با زاویه دوران و همراه با محیط فارسی پشتیبانی از نوشته های فارسی/انگلیسی قابلیت ذخیره گزارش بصورت TXT,HTML,PDF,RTF,XML,XLS,Mail,BMP,JPG,TIF,GIF,CSV و همچنین مجهز بودن به قابلیت کد نویسی درون برنامه و مجهز بودن به کامپوننتهای پیش نمایش درون فرم برنامه و نیز قابلیت ذخیره بر روی دیسک یا در دل فایل اجرایی، قابلیت تهیه گزارش در برنامه exe و نیز پشتیبانی از تمام پایگاههای داده مجهز به کلاسها توابع و ... واقعا می توان گفت که کم کسری باقی نگذاشته. من نسخه Full Source D5..D10 را دارم http://www.fast-report.com
Crystal Report: گزارش ساز حرفه اي و كامل فعلا نسخه XI آن براي دلفي .NET طراحي شده،فعلا به دليل كمبود وفت قادر به آموزش Rave نيستم اما مقالهاي آماده ديگر دوستانم را براي دانلود قرار مي دهم در ضمن سعي مي كنم در آينده يك مقاله جامع راجب Rave بنويسم. http://www.businessobjects.com/products/reporting/crystalreports/default.asp
2- ايجاد UML : در مورد درخواست برنامه طراحي گرافهاي UML كه با كد دلفي (پاسكال) ذخيره شود بايستي عرض كنم كه خود برنامه دلفي مي توان اين كار را به راحتي انجام داد، كافيست كه از منوي View گزينه Model View را كليك كنيد و... اما با اين همه من برنامه اي بسيار ساده براي دانلود در پايين قرار دادم. http://barnamenevis.org/forum/showthread.php?p=13025
مخفي كردن پوشه ها
مخفي كردن پوشه ها
با سلام
دوست عزيزم آقاي امين پريشاني در خواست برنامه اي با موضوع زير كرده اند كه خدمت شما عرض مي كنم:
میخواهم تمام فلدر ها در لیست باکس با توجه به آدرس تائین شده ظاهر شود و با استفاده از پاپ منو روی آن راست کلیک کنیم و با انتخاب گزینه مخفی فلدر مورد نظر مخفی شود.
در پاسخ به درخواست اين دوست عزيزمان بايستي عرض كنم كه با وجود جزء SheeTree نياز به اينكه مسيري رو انتخاب كني و سپس فولدرهاي آن در يك ليست باكس ظاهر شود نيست اما با اين همه من روش كار رو همراه با يك برنامه نمونه در وبلاگ قرار خواهم داد:
اولين مطلبي كه بايستي بدانيد اين است براي تنظيم خوصيت يك فابل يا فولدر از تابع زير استفاده كنيم:
SetFileAttributes( 'نام فايل', خصوصيت);
· نام فايل: مي توان در اين قسمت نام فايلي را مشحض كرد با اينكه آدرس يك پوشه.
· خصوصيت: مي توان يكي از مقادير زير باشد :
|
بايگاني |
faArchive |
|
مخفي |
faHidden |
|
فهرست |
faDirectory |
|
سيستمي |
faSysFile |
|
فقط خواندني |
faReadOnly |
|
بي نوع |
faAnyFile |
حال براي مخفي كردن فولدر (پوشه) كافيست كد زير را بنويسيد: در اين كد فولدري با نام Project واقع در درايو E: به عنوان مثال استفاده شده است
SetFileAttributes( 'E:\Project' , +faHidden );
به همين سادگي،... اما چيزي كه شما در خواست كرده ايد:
يك پرژه جديدي شروع كنيد سپس اجزاء زير را رو ي آن قرار دهيد:
Label1, Edit1 , ListBox1 , Button1
اكنون در قسمت VAR اصلي برنامه متغير Path : String; را تعريف كنيد.
روي Edit1 دابل كليك كنيد و كد زير را بنويسيد:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Button1.Enabled :=Edit1.Text <> EmptyStr;
end;
حال روي Button1 دابل كليك كرده و كد زير را وارد كنيد:
اين كد باعث مي شود كه نام فولدرهاي موجود در مسير مشخص شده درون ليست باكس اضافه شوند.
procedure TForm1.Button1Click(Sender: TObject);
Var
FF : TSearchRec;
begin
Path := Edit1.Text;
if not DirectoryExists(Path) then begin
ShowMessage('Invalid path!! '+Path);
Exit;
end;
ListBox1.Clear;
FindFirst(Path+'\*.*',faAnyFile,ff);
repeat
if ff.Attr=faDirectory then
ListBox1.Items.Add(FF.Name);
until (FindNext(ff)<>0);
end;
حال روي PopupMenu1 كليك كرده و گزينه Set Hidden رو اضافه كرده و سپس روي اين گزينه دوبار كليك كرده و كد زير را تايپ كنيد:
procedure TForm1.Hidden1Click(Sender: TObject);
var
DirName : String;
begin
DirName := path+'\'+ListBox1.Items.Strings[ListBox1.ItemIndex];
SetFileAttributes( PChar(DirName) ,+faHidden);
ListBox1.Items.Delete(ListBox1.ItemIndex);
end;
كار به پايان رسيد و شما مي توانيد اكنون برنامه را اجراء كنيد و نتيجه را ببينيد. البته برنامه بالا به ساده ترين شكل ممكن نوشته شده و شما مي توانيد با سليقه خودتان كار بهتري ارايه دهيد.
دانلود اين مقاله
دانلود كد برنامه
ارسال و دریافت اطلاعات Excel
ارسال و دریافت اطلاعات Excel
در پاسخ به ایمیل یکی از دوستان محترم:
شاید برای شما هم پیش آمده که مایل به باز کردن یک فایل Excel توسط دلفی و ذخیره اطلاعات درون آن باشید. راه حل این امر بسیار ساده است، کافیست که شما کمی ADO (dbgo)در دلفی بلد باشید. بله دوستان دسترسی به فایلهای Excel مانند بانک اطلاعاتی می باشد با کمی تفاوت.

جهت باز کردن یک فایل Excel ابتدا بایستی توسط برنامه با آن ارتباط برقرار کنیم. پس لازم است یک جزء AdoConnection روی فرم قرار دهیم و سپس رشته اتصال آن را با مقادیر زیر تنظیم کنیم: ( من پیشنهاد می کنم که این کد را در رویداد OnCreate فرم قرار دهید)
AdoConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=مسیر و نام فایل اکسل;'+
'Extended Properties=Excel 8.0;';
AdoConnection1.Open;
تا اینجا ما فقط یک ارتباط بین برنامه و فایل مورد نظر برقرار کردیم. حال برای واکشی اطلاعات دلخواه از فایل بایستی از یک جزء ADOQuery استفاده کنیم پس یک جزء ADOQuery1 روی فرم قرار دهید و خصوصیت Connection آنرا برابر AdoConnection1 قرار دهید و در خصوصیت SQL مربوط به آن بایستی کد زیر را وارد کنید:
'SELECT * FROM [نام شیت$]';
example : 'SELECT * FROM [Sheet1$]';
حتما باید از علامت $ در انتهای نام شیت استفاده کنید.
اکنون باید برای دیدن اطلاعات بر روی فرم از یک جز DBGrid استفاده کنید و آنرا توسط یک جز DataSource باADOQuery مرتبط سازید. پس یک جزء DataSource1 روی فرم قرار دهید و خصوصیت Dataset آنرا برابر با ADOQuery1 قرار دهید و سپس یک جزء DBGrid1 روی فرم قرار داده و خصوصیت DataSource آنرا برابر با DataSource1 قرار دهید. کدی در زیر آماده کرده ام که با یک فایل اکسل در درایو E: ارتباط برقرار کرده و سپس محتوای شیت اول آنرا نمایش می دهد، من در این مثال خصوصیت مربوط به اجزاء را بصورت کد نویسی تنظیم کرده ام در حالی که شما می توانید در هنگام طراحی این عمل را انجام دهید: این فقط یک کد کلاسیک می باشد و داشتن یه برنامه کاملا نیاز به سلیقه فردی دارد.
procedure TForm1.FormCreate(Sender: TObject);
begin
AdoConnection1.LoginPrompt := False;
AdoConnection1.ConnectionString :=
'Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source= E:\Book1.xls ;'+
'Extended Properties=Excel 8.0;';
AdoConnection1.Open;
AdoQuery1.Connection := AdoConnection1;
DataSource1.DataSet := AdoQuery1;
DBGrid1.DataSource := DataSource1;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Text:='SELECT * FROM [Sheet1$]';
Open;
end; //پایان کویری
end;// پایان زیر برنامه
اکنون برنامه را اجرا کنید و نتیجه را ببینید!! می بینید که در عنوان بالای DBGrid نام فیلدها همان آدرس مربوط به سلولهای اکسل می باشد. حالا شما می توانید به هر سلولی که دوست دارید رفته و اطلاعات را تغیر دهید یا اطلاعات جدید را وارد کنید و پس از خروج از برنامه آن فایل را در اکسل باز کنید و نتیجه را مشاهده کنید. لازم به ذکر است که خدمت شما عرض کنم جهت استفاده از این برنامه نیازی نیست که برنامه اکسل روی سیستم شما نصب باشد و بدون آن نیز برنامه جواب می دهد.
من برای شما برنامه جهت دانلود آماده کرده ام که می توانید با آن فایل مورد نظر خود را از هر مسیر انتخاب کرده و وارد هر شیت آن شده و اطلاعات آنرا دستکاری کنید و نیز یک سری اطلاعات آماری در مورد آن به دست بیاورید و همچنین با کلیک بر روی عنوان هر فیلد اطلاعات را مرتب سازی کنید، شما می توانید جهت تمرین آنرا دانلود کرده و کد ساده آنرا مطالعه کنید. (تصویر برنامه)

نظر يادتون نره
كامپوننت نسخه اصلي VCLSkinو SUISkin
كامپوننت نسخه اصلي VCLSkin و SUISkin
امروز دوتا كامپوننت زيبا براي شما در نظر گرفتم كه هر دو بصورت Full Source همراه با ابزار و مجموعه Skin آماده هستند و مي توانيد با دانلود آنها به برنامه خود پوسته هاي زيبا و حرفه اي بدهيد.. البته ناگفته نماند كه يك كامپوننت بسيار زيبا و شيك دارم كه خيلي خيلي خيلي بهتر از اينهاست و پوسته ها را بصورت متريال تغير مي دهد مثل اشياء بصورت چوپ، شيشه، آب، يخ، پلاستيك و ...
بعد از دانلود فايلها بايستي آنها را از حالت فشرده درآوريد كه در اين صورت نياز به پسوردي كه در قسمت نظرات هست خواهيد داشت.. نظر يادتون نره!!


نمايش PowerPoint Slid Show
نمايش PowerPoint Slid Show
با سلام
يكي از دوستان عزيزم جناب آقاي آرش فرامرزي سوالي پرسيده اند به اين عنوان: يه سوال داشتم مي خواستم بدونم چطوري به برنامه تودلفي يه slide show اضافه كرد؟
راه حل ساده است شما بايد ابتدا بايد از تب Servers كامپوننت PowerPointApplication رو روي فرم بگذاريد و سپس از طريق يك دكمه Button يا هر چيز ديگري كد زير را تايپ كنيد:
PowerPointApplication1.Presentations.Open('مسير و نام فايل پاورپوينت',0,0,0);
Example:PowerPointApplication1.Presentations.Open(GetCurrentDir+'\test.ppt',0,0,0);
PowerPointApplication1.Presentations.Item(1).SlideShowSettings.Run;
حالا برنامه را اجرا كرده و نتيجه را ببينيد. البته كامپوننتهاي جالبي در اين رابطه وجود دارد كه براي كسب اطلاعات بيشتر مي توانيد به آدرس http://www.add-in-express.com مراجعه كنيد.
افزودن فونت دلخواه در دل فایل .exe
افزودن فونت دلخواه در دل فایل .exe
دوست عزیزم آقایحسن زاهد پرسیده اند آیا روشی وجود دارد که فونتی را به درون فایل exe برنامه خودمون بصورت داخلی اضافه کنیم و نیازی به توضیع آن نداشته باشیم.
بله جهت انجام این کار مراحل زیر را با ما باشید:
گام اول: تزریق فایل در دل برنامه:
الف) شما باید ابتدا در یک درایوی فایلی با پسوند *.RC (نام فایل اختیاریست(با مقادیر زیر ایجاد کنید. برای اینکار برنامه Notepad را اجرا کرده و عبارت MY_FONT ANYOL1 "BZAR.TTF" را تایپ کنید. اکنون به منوی فایل رفته و Save را انتخاب کرده و سپس در یک مسیر دلخواه (سعی کنید مسیر ساده ای باشد) فایل را با نام دلخواه ولی پسوند RC ذخیره کنید من در این جا از نام SetFont.RC استفاده کرده ام و مسیر مورد نظرم را درایو E: انتخاب کردم اما در مورد شما... خود دانید. در اینجا عبارت BZAR.TTF نام فایل فونت مربوطه می باشد و شما می توانید هر فونت دیگری را جایگزین کنید. مانند شکل زیر:

ب) اکنون بایستی فایل مربوط به فونت مورد نظر را نیز در مسیری که فایل SetFont.RC قرار دارد کپی کنید. برای این کار می توانید از طریق Star à Control Panel à Fonts رفته و فونت مورد نظر را Copy کرده و سپس در مقصد ذکر شده Paste کنید. همانگونه که در شکل فوق می بینید من این فایل BZAR.TTF در مسیر ذخیره فایل SetFont.RC کپی کرده ام .
ج) اکنون بایستی فایل SetFont.RC را توسط فرمان BRCC32کمپایل کنید. برای انجام این کار لطفا از طریق منوی Start àRun رفته عبارت CMD را تایپ کرده تا Command Prompt ظاهر شود. حال فرمان زیر را تایپ کرده و اینتر کنید:
E:\> BRCC32 SetFont.RC

اکنون در صورت بازگشت مشاهده خواهید کرد که فایلی با نام SetFont.RES در همان مسیر ایجاد شده است. این فایل همان فایلی است که ما به آن نیاز داریم. اکنون این فایل را در مسیری که برنامه مورد نظر خود را ذخیره کرده اید کپی کنید و سپس وارد دلفی شده برنامه مورد نظر خود را باز کرده و خط زیر را در آن اضافه کنید:
{$R SetFont.res}
شاید باورتان نشود ولی همین خط کوتاه موجب می شود که در اولین کمپایل فایل مربوطه به درون فایل اجرایی برنامه شما ( YourProject.exe ) اضافه شود. تقریبا نصف راه را رفتم تا اینجا ما توانستیم فونت مورد نیاز را در دل برنامه جای بدهیم. نصف بعدی کار نحوه استفاده از آن در برنامه است که در زیر توضیح خواهم داد. با ما باشید...
گام دوم: استفاده از فونت در برنامه:
در این قسمت روی فرم اصلی برنامه کلیک کنید و سپس رویداد onCreate رو فعال کنید و حال کد زیر را در آن بنویسید:
procedure TForm1.FormCreate(Sender: TObject);
Var
ResFile : TResourceStream;
begin
1- ResFile := TResourceStream.Create(HInstance,'MY_FONT',pchar('ANYOL1'));
2- ResFile.SaveToFile('LOVE.TTF');
3- ResFile.Free;
4- AddFontResource(pchar('LOVE.TTF'));
5- SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
حتما دوست دارید بفهمید که چه اتفاقی می افتد. ساده هست به زبان خیلی ساده می توان گفت که ما در اینجا راه رو معکوس طی می کنیم یعنی اینکه از فونت ادغام شده در دل فایل EXE دوباره یک فایل فونت در همان مسیر برنامه ایجاد می کنیم (خط 1و2) که من در اینجا نام LOVE.TTF را برای این فونت در نظر گرفتم ( شما می توانید هر نام دیگری یا حتی نام اصلی آنرا استفاده کنید). و سپس این فونت جدید حاصل شده رو به مجموعه فونتهای ویندوز اضافه می کنیم (خط 4) حال برای اینکه ویندوز مطلع شود بایستی یک پیغام برای آن بفرستیم (خط 5) ( این پیغام WM_FONTCHANGE را هر موقعی که تغیراتی بر روی فونتهای ویندوز انجام بدهیم بایستی به ویندوز HWND_BROADCAST بفرستیم (یک مقاله توپ در رابطه با پیغامها خواهم نوشت کی... خدا می دونه.
اکنون برای آزمایش نتیجه یک Button روی فرم قرار دهید، سپس روی Button1 دوبار کلیک کرده و کد زیر را بنویسید:
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Font.Name :='LOVE';
Button1.Font.Size := 20;
end;
و چنابچه مایل بودید پس از خروج از برنامه فونت مربوطه از قسمت فونتهای ویندوز حذف شود. می توانید یکی از رویدادهای onClose یا onDistory را فعال کرده و کد زیر را بنویسید:
procedure TForm1.FormDestroy(Sender: TObject);
begin
1- RemoveFontResource(pchar('LOVE.TTF'));
2- SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
3- DeleteFile('LOVE.TTF');
end;
همانگونه که می بینید با استفاده از خط شمار 1 فونت مربوطه را از ویندوز پاک کردیم اما برای اینکه ویندوز مطلع گردد و به برنامه ها نیز اطلاع بدهد بایستی دوباره همان پیغام را برای ویندوز ارسال کنیم (خط 2). اما اگر به خاطر داشته باشید خدمت شما عرض کردم که در این برنامه فایل از فونت ذخیره شده بر روی دیسک ایجاد می گردد لذا اگر مایل باشید می توانید برای تکمیل کار خط شماره 3 را نیز اضافه کنید. البته اگر کمی بیشتر بخواهید به برنامه انعطاف بدهید می توانید فایل مربوط به فونت را بعد از اینکه به ویندوز اضافه کردید از همان محل آنرا حذف کنید یا اینکه آنرا توسط فرمان SetFileAttributes('LOVE.TTF',faHidden); موقتا مخفی کنید و در صورت لوزم آنرا حذف کنید.
شما می توانید یه فایلی RC کاملتری ایجاد کنید و فونتهای زیادی را درون آن قرار دهید و در واقع یک برنامه FontSetup برای ویندوز بسازید بدون نیاز به برنامه هایی مانند InstalShield . راستی تمام مراحل بالا را که طی کردید دیگر به هیچ کدام از فایلهای RC , REC , TTF ندارید و تنها کافیست که برنامه EXE را به مقصد بدهید. در زیر متن کامل برنامه رو تکرار کردم:
var
Form1: TForm1;
implementation
{$R SetFont.RES}
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
Var
ResFile : TResourceStream;
begin
ResFile := TResourceStream.Create(HInstance,'MY_FONT',pchar('ANYOL1'));
ResFile.SaveToFile('LOVE.TTF');
ResFile.Free;
AddFontResource('LOVE.TTF');
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Font.Name :='LOVE';
Button1.Font.Size := 20;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
RemoveFontResource(pchar('LOVE.TTF'));
DeleteFile('LOVE.TTF');
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
امیدوارم که توضیحات فوق مورد پسند واقع گردد. دوستان من ادامه کار من فقط با دلگرمیهای شما میسر است پس حتما در قسمت نظرات نظر یا پرسش خود را حتما بنویسید.
نصب فونتهای مورد نیاز یک برنامه
نصب فونتهای مورد نیاز یک برنامه
دوستی پرسیده اند که چگونه می توان فونتهای استفاده شده در یک برنامه را همراه با برنامه توضیع کنیم بطوری که کامپیوتر مقصد قادر به شناسایی و استفاده از آنها باشد. ممکن است این پرسش برای شما هم پیش آید.
خدمت شما عرض کنم که برای نیل به این هدف چندین روش وجود دارد که به نظر من بهترین روش این است که هنگام ساخت Setup برای برنامه خود فونتها رو نیز درون Setup قرار دهید. البته شما می توانید برای برنامه ستاپ جدا و برای فونتها نیز یک ستاپ دیگر بسازید و بعد با ساخت یک Autorun برای CD مربوطه هم دکمه ای برای نصب برنامه هم دکمه ای برای نصب فونتها قرار بدهید که کاربر به اختیار نصب کند. اما راه عاقلانه اینست که فونتها و برنامه رو در قالب یک ستاپ ایجاد کرده و به کاربر بدهید.
مراحل انجام کار:
فرض ما بر این است که شما قبلا برنامه Install Shield رو نصب کرده باشید (این برنامه را می توانید درون CD خود دلفی پیدا کنید). و نیز فرض بر این است که شما در حد ابتدای با این محیط آشنا باشید.

مواد لازم: برنامه Install Shield را اجرا کرده و سپس بعد از ایجاد پروژه جدید و تنظیمات اولیه اکنون به قسمت Specify Application Data رفته و بر روی قسمت File کلیک کنید. و فایلهای برنامه و فایلهای بانک اطلاعاتی مورد نیاز را در قسمت مربوط به خودشان بکشید و اکنون بر روی قسمت [ProgramFilesFolder] کلیک راست کرده و گزینه Show Predefined Folder کلیک کرده و در نهایت گزینه [FontsFolder] را کلیک کنید تا به لیست مسیرها اضافه شود و حال از ساختار درختی بالا مسیری که فونتها را آنجا ذخیره کرده بودید را کلیک کرده تا فونتهایش در سمت راست ظاهر شوند و سپس آنها را انتخاب کرده و با ماوس درگ کرده و بر روی [FontsFolder] رها کنید. می توان گفت که کار تمام شده است. فقط کافیست که پروژه را کمپایل کرده و حاصل آنرا که یک فایل Setup می باشد رو توضیع کنیم.
در ضمن من در زیر جالبترین فرنتهای فارسی که محصول شرکت برنا می باشد رو بصورت یک فایل فشرده برای دانلود قرار داده ام . همچنین یک Setup از قبل ساخته شده ای را برای نصب فونتها در ویندوز ساخته ام که جهت دانلود برای شما قرار می دهم.
![]()
دانلود ستاپ آماده
ذخيره تنظيمات DBGrid
ذخيره تنظيمات DBGrid
شايد براي شما پيش آمده باشد كه پس از نوشتن يك برنامه ديتابيس خواسته باشيد كه DBGrid را بر اساس سليقه خود تنظيم كنيد براي مثال همانند شكل:

1- اندازه ستونها را بزرگتر يا كوچكتر كنيد
2- رنگ عنوان و يا رنگ فونتها و يا رنگ سلولها و ... را تغير دهيد.
3- بخواهيد جاي ستونها رو تغييردهيد .
خوب بعضي از اين كارها اتوماتيك انجام مي شوند مثل آيتم 1 و 3 و براي بعضيها بايد اين امكانات را فراهم كنيم مانند گزينه 2 .... اما در هر صورت اين تنظيمات موقتي هستند و تا زماني كه در برنامه هستيد اعمال مي شوند و با خروج از برنامه و بازگشت مجدد مشاهده مي كنيد كه تمام اون تنظيمات از بين رفته و به حالت اوليه برگشته!!! را جل چيست؟؟
زياد نگران نباشيد راه حل بسيار ساده اي وجود دارد. شايد يكي از راه حلها استفاده از فايلهاي INI باشد بله مي تواند باشد اما كد نويسي زيادي نياز دارد چون تنظيمات گريد زياد هستند(اندازه، موقعيت، رنگ ستونها، رنگ سطرها، نوع و رنگ فونتها و....) بهترين روش استفاده از متد زير در هنگام خروج از فرم ( Form.OnClose ) مي باشد:
DBGrid.Columns.SaveToFile('مسير و نام فايل');
procedure TForm1.FormShow(Sender: TObject);
begin
DBGrid.Column.SaveToFile('c:\test.dat');
end;
و براي باز گرداني تنظيمات هنگام ورود به فرم ( Form.OnShow ) از متد زير استفاده كنيد:
DBGrid.Columns.LoadFromFile('مسير و نام فايل');
procedure TForm1.FormShow(Sender: TObject);
begin
DBGrid.Columns.LoadFromFile('c:\test.dat');
end;
ديديد كه به سادگي امكان ايجاد يك DBGrid سفارشي ميسر است.
من در پايين يك يونيتي ساختم با نام DBUser مي توانيد انرا دانلود كنيد و سپس آنرا به پروژتون اضافه كنيد و سپس توي قسمت Uses مانند زير آنرا اضافه كنيد:
….
var
Form1: Tform1;
implementation
uses
{$R *.dfm}
….
درون اين يونيت يك زيربرنامه اي با نام DBGrid) مورد نظر SaveGrid( براي ذخيره تنظيمات موجود مي باشد. كافيست شما از اين پروسيجر در هنگام خروج از فرم استفاده كنيد. براي مثال SaveGrid( DBGrid1 );.
درون اين يونيت يك زيربرنامه اي با نام DBGrid) مورد نظر LoadGrid ( براي بازيابي تنظيمات موجود مي باشد. كافيست شما از اين پروسيجر در هنگام ورود به فرم استفاده كنيد. براي مثال LoadGrid ( DBGrid1 );.
پروسيجر SaveGrid بطور خودكار يك فولدري با نام Config درون همان مسير برنامه شما ايجاد مي كند و درون آن تنظيمات DBGrid را با نام براي مثال Form1DBGrid1.cfg ذخيره مي كنه. و پروسيجر LoadGrid از همان فايلها استفاده خواهد كرد

اين وبلاگ صرفا براي به اشتراك گذاشتن اطلاعات و همچنين راهنمايي دوستان و پاسخ به سوالات و مشكلات موجود در بزنامه نويسي با زبان شيرين دلفي مي باشد. تمام اطلاعات بطور رايگان در اختيار عموم قرار مي گيرد.