تبليغاتX
آموزش دلفی
 

آموزش دلفی

درباره وبلاگ

learn delphi


فهرست اصلي

صفحه اصلي

آدرس ايميل

آرشيو وبلاگ


نوشته هاي پيشين

 

شهریور 1385


  RSS  

POWERED BY
BLOGFA.COM

 

 

آيا می دانيد

آيا می دانيد توابع تبديل فرمت ذيل در دلفی وجود دارند که وقوع خطا را نيز نمايش می دهند. يعنی همه اين توابع در صورتی که در هنگام تبديل خطايی رخ دهد مقدار False را به عنوان خروجی بر می گردانند.

تبديل رشته به منطقی با خروجی منطقی

 function TryStrToBool(const S: string, out Value: Boolean): Boolean;

 رشته به تاريخ

 function TryStrToDate(const S: string, out Value: TDateTime): Boolean;

 رشته به عدد اعشاری

 function TryStrToFloat(const S: string, out Value: Extended): Boolean;

 رشته به عدد صحيح ۲ بايتی

 function TryStrToInt(const S: string, out Value: Integer): Boolean;

 رشته به عدد صحيح ۴ بايتی

 function TryStrToInt64(const S: string, out Value: Int64): Boolean;

 رشته به ساعت

 function TryStrToTime(const S: string, out Value: TDateTime): Boolean;

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 2:23 موضوع: | لينک ثابت



طريقه ارسال پارامترها از طريق CommandLine به برنامه و هندل کردن آنها:

طريقه ارسال پارامترها از طريق CommandLine به برنامه و هندل کردن آنها:

يک Button قرار داده و رويداد زير را در آن بنويسيد:

 procedure TForm1.Button1Click(Sender: TObject) ;
var
   j:integer;
begin
   for j := 1 to ParamCount do
     ShowMessage(ParamStr(j)) ;
end;

لذا برای مشخص کردت تعداد پارامترهای ارسالی از ParamCount استفاده می شود و برای مشخص شدن مقدار پارامتر ارسالی از ParamStr استفاده ميشود البته با استفاده از انديس .

ان شاء الله از جلسه آينده به شرح کامل DBGrid  خواهم پرداخت.

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 2:21 موضوع: | لينک ثابت



فيلتر کردن رکوردها

 

طريقه انتخاب مجموعه ای از رکوردها در DBGrid  (فيلتر کردن رکوردهای انتحاب شده)

 var
  x: Integer;
  BMList: array of TVarRec;
begin
  SetLength(BMList, dbgrid1.SelectedRows.Count);
  for X:=0 to dbgrid1.SelectedRows.Count - 1 do
  begin
    BMList[x].VType := vtPointer;
    BMList[x].VPointer := Pointer(dbgrid1.SelectedRows[x]);
    DataModule1.ADOTable1.GotoBookMark(BMList[x].VPointer);
  end;
  DataModule1.ADOTable1.FilterOnBookmarks(BMList);
end;

 

البته قبل از اجرای کد بايد خاصيت MultiSelect  مربوط به DBGrid ‌را TRue کرده باشيد.

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 2:19 موضوع: | لينک ثابت



چگونگی تغير رنگ رکوردهای

در اين جلسه چگونگی تغير رنگ رکوردهای(سطرها) يک DBGrid را توضيح می دهم (مطابق شکل ذيل)

کد ذيل را در رويداد (event) با نام OnDrawColumnCell  مربوط به DBGrid  نوشته شود.

procedure TFForush.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
DBGrid1.Canvas.Font.Color:=clBlack;
if((DBGrid1.DataSource.DataSet.RecNo mod 2)=0)Then
 DBGrid1.Canvas.Brush.Color:=clInfoBK;
if(gdSelected in State)Then
 DBGrid1.Canvas.Brush.Color:=clBlue;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
//برای ستون رديف

if(DataCol=0)Then
begin
 DBGrid1.Canvas.Brush.Color:=clBlack;
 DBGrid1.Canvas.Font.Color:=clYellow;
 DBGrid1.DefaultDrawColumnCell(Rect,0,Column,State);
end;
end;

به همين سادگی !!!(بهتر است dgRowSelect  نيز True  باشد)

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 2:12 موضوع: | لينک ثابت



طریقه لیست کردن فایلها و فولدرهای موجود در مسیر خاص و نمایش آنها در یک

طریقه لیست کردن فایلها و فولدرهای موجود در مسیر خاص و نمایش آنها در یک لیست:

procedure FindAll (const Path: String;
                          Attr: Integer;
                          List: TStrings) ;
var
   Res: TSearchRec;
   EOFound: Boolean;
begin
   EOFound:= False;
   if FindFirst(Path, Attr, Res) < 0 then
     exit
   else
     while not EOFound do begin
       List.Add(Res.Name) ;
       EOFound:= FindNext(Res) <> 0;
     end;
   FindClose(Res) ;
end;

حال رویه بالا را مثلا برای مسیر ویندوز فراخوانی میکنیم.

FindAll('C:\Windows\*.*',faAnyFile,ListBox1.Items)

موفق باشید

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 1:58 موضوع: | لينک ثابت



حرکت بين اشياء

حرکت بين اشياء روی فرم با استفاده از کليدهای جهتی رو به بالا و رو به پايين و اينتر(arrow key and enter) .البته بايد ابتدا خصوصيت KeyPreview  مربوط به فرم را true کنيد سپس کد زير را به رويداد OnKeyDown  فرم اضافه کنيد:

 procedure TForm1.FormKeyDown( Sender : TObject;  var Key: Word;
     Shift : TShiftState  ) ;
var
   Direction : Integer;
begin
   Direction := -1;
   case Key of
     VK_DOWN, VK_RETURN : Direction := 0; {حرکت به پايين}
     VK_UP : Direction := 1; {حرکت به بالا}
   end;
   if Direction <> -1 then
   begin
     Perform(WM_NEXTDLGCTL, Direction, 0) ;
     Key := 0;
   end;
end;

 موفق باشيد.

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 1:56 موضوع: | لينک ثابت



استفاده از دیتابیس اکسز تو دلفی

استفاده از دیتابیس اکسز تو دلفی

امروز میخواستم یه چیز دیگه بنویسم ولی خوب یکی از دوستان سوالی مطرح کرده بودند ، خوب چون اینجا بازدیدکننده مداری !!! حکم فرماست به سوال میپردازم.ado icon in delphi

خوب همون طور که از تایتل این پست بر میاد ، وصل شدن به دیتا بیس اونم از نوع اکسز (Access) هست .البته با دلفی !

اول از همه یه ADOConnection از تب ADO بر میدارید میندازید روی فرم. بعدش یه سری به Properties مربوط بهش بزنید و خصوصیت ConnectionStringسمت راستش یه کلیک میکنید تا یه پنجره مربوط بهش باز بشه ( البته میتونید روی آیکون ADOConnection روی فرم  دو بار کلیک کنید تا پنجرش باز بشه ). Use Connection String رو انتخاب کنید و بعدش روی Build  کلیک کنید .از لیست Microsoft Jet 4.0 OLE DB Provider رو انتخاب کنید .این واسه تعیین نوع دیتابیس شماست که اینی که انتخاب کردید واسه وصل شدن به Microsoft Accesهست.

بعدش روی Next کلیک کنید . صفحه بعدی که میاد مسیر فایل دیتا بیستون رو انتخاب میکنید و اگه USER واسه دیتا بیس ACCESS تون انتخاب کردید که خوب میزنید و گرنه فیلدهای .USER و پسورد رو خالی بزارید . واسه اطمینان هم Test Connection  رو بزنید . اگه درست عمل کرده باشید یه پیغام مبنی بر موفقیت آمیز بودن اتصال میده .

حالا رسیدیم به مشکلی که این دوست عزیز گفتن و این که هنگام وصل شدن به دیتا بیس از اون User و Passwordمیخواد . خوب کار شاقی نیست . فقط باید تو قسمت Properties مربوط به ADOConnection خصوصیت Login Prompt رو به False تغییر بدید . همین ! .

امیدوارم مفید بوده باشه .

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 1:21 موضوع: | لينک ثابت



سياه و سفيد كردن تصوير با دلفي

سياه و سفيد كردن تصوير با دلفي

آيا تا به حال فكر كرديد كه چجوري برنامه هايي مثل فوتوشاپ يك تصوير
رنگي را سياه سفيد مي كنند؟ به دو عكس زير توجه كنيد .يكي قبل از انجام فيلتر برنامه اي
كه در ادامه ميسازيم و ديگري با اعمال فيلتر.


قبل از اعمال فيلتر برنامه



بعد از اعمال فيلتر يا به عبارتي الگوريتم


البته اينو بگم كه اين برنامه كوچيكي كه در ادامه مي بينيد ساده ترين حالت اين فيلتر
است و برنامه هايي مثل فوتوشاپ از الگوريتمهاي پيچيده تري استفاده مي كنند. همين طور
كه مي بينيد ميخوام تو اولين پست آموزشيمDelphi Learning
، يه نمونه از كار كردن با پيكسل ها رو بهتون ياد بدم. اگر ديديد دستورات و اصطلاحات
واستون نا آشناست ، يا به عبارتي اصلا با دلفي كار نكرديد، در قسمت نظرات بگيد تا اونا
رو در پست بعدي توضيح بدم.

بذاريد اول يه كم در مورد پيكسل توضيح بدم :

همين طور كه مي دونيد هر تصوير از يكسري نقاط تشكيل شده كه به اونا پيكسل ميگن.اين
نقاط داراي يه سري خصوصيات هستند . از جمله رنگ اونا. معمولا خصوصيات رنگ pixel ‌ ها
رو با سه حرف (R(Red) , G(Green ) , B(Blue نمايش ميدن . ما
تو اين برنامه كوچولو با اين سه پارامتر كار ميكنيم .

حالا بياييد كم كم بريم سراغ برنامه :

1 – دلفي رو اجرا كنيد و فرم جديدي رو باز كنيد . ابتدا متغيير هايي كه نياز داريم
رو در قسمت كد تعريف مي كنيم . اين متغيير ها رو در قسمت Public به صورت زير مي نويسيم
:



Var B : TBitmap ;

S : String ;


با دستور Create يك متغيير از نوع Bitmap تعريف مي كنيم و تصوير را درون آن Load مي
كنيم. مسير تصوير را قبلا در متغيير S ذخيره كنيد.

B := Tbitmap.create ;

B.loadFromFile( S ) ;


براي نمايش عكس load ‌ شده در متغيير بر روي Form مي توان از يك Image استفاده كرد.بعد
از اين كه Image را بر روي Form قرار داديد ، دستور زير را مي نويسيم.

Image1.Canvas.Draw(0,0,B) ;


حالا نوبت تابع اصلي ميرسه .البته چيز پيچيده اي نيست و خيلي هم ساده است . من اسمشو
گذاشتم Convert_To_Black .

Function Convert_To_Black(B : TBitmap ) : TBitmap ;

Var X,Y : Integer ;

P : PByteArray ;

Begin

For Y : = 1 To B.Height-1 Do

Begin

P := B.ScanLine [Y] ;

For X : = 1 To B.Width-1 Do

Begin

B.Canvas.Pixels[x,y] := RGB (

(p[x*3]-2+P[x*3]-1+p[x*3]) div 3,

(p[x*3]-2+p[x*3]-1+p[x*3]) div 3,

;(p[x*3]-2+p[x*3]-1+p[x*3]) div 3 )

end ;

end ;

Convert_To_Black := B ; //return bitmap image




چيز نا آشنايي كه تو اين تابع بود دستور ScanLine هست . همين طور كه ديد ، كارش اينه
كه يك رديف افقي از پيكسل هاي عكس ( يك خط )‌را با توجه به شماره رديف آن به ما ميده.
بنابر اين مقدار بازگشتي آن آرايه اي از پيكسل هاست .

اساس كار بر اين است كه R , G , B هر نقطه با هم جمع ميشه و سپس بر 3 تقسيم مي شه.
در اينجا ما با دستور ScanLine اين كار رو كرديم و چون خط به خط مي خواند بنابر اين
سرعت بالا است . در آموزش بعدي همين برنامه را با دستور Create.Pixels‌يعني نقطه به
نقطه به جاي خط به خط انجام مي دم...... تموم شد!

Source‌برنامه كه نوشتم رو ميتونيد از اينجا دانلود كنيد :

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

For Download Source File , Please Click Me!


اگه سوالي يا ابهامي براتون پيش اومد ، ميتونيد تو قسمت نظرات (همين پايين نوشته) بگيد

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 1:16 موضوع: | لينک ثابت



قسمت دوم

قسمت دوم:

   كاربرد علامت تساوي در دلفي:

   در دلفي براي تخصيص عملگر =: استفاده مي شود.

y:=mx+b

 همچنين براي بررسي تساوي از = استفاده مي شود.

If A=B then Writeln ('A and B are equal')

شكل ديگر استفاده از علامت تساوي در معرفي ثابت ها است.


Const
    TaxRate = 0.0075

    ثابت ها:

 براي مقادير خاص كه در برنامه زياد استفاده مي شود مي توان از ثابت ها استفاده كرد كه مثال آن در بالا آمده.

    متغييرها:

ازاجزاء ثابت همه زبان ها كه انواع آن عبارتند از:

نوع صحيح:

نوع

محدوده مقادير

تعداد بايت ها در حافظه

علامت دار(قادر به نگهداري عدد منفي است)

Byte 0 تا 255 1 خير
Word 0 تا 65535 2 خير
ShortInt 128- تا 127 1 بلي
SmallInt 32768- تا 32768 2 بلي
Integer 32147483648- تا2147483647 4 بلي
Cardinal 0 تا 2147483647 4 بلي
LongInt 2147483647- تا 2147483647 4 بلي

 

نوع حقيقي:

نوع

محدوده مقادير

تعداد بايت ها در حافظه

Real

+/-1.7E38 ~ +/-2.9E39

6
Single

+/-1.5E-45 ~ +/-3.4E38

4
Double

+/-5.0E-34 ~ +/-1.7E308

8
Extended

+/-3.4E-4932 ~ +/-1.1E4932

10
Comp

-2^63 ~ 2^(63-1)

8

 

نوع ارزي:

اين نوع متغيير ها براي نگهداري مقادير پولي مناسب است و با اجزاي ويژوال مانند Currency Field مورد استفاده قرار مي گيرد. باانواع دادههايي كه در بانك هاي اطلاعاتي براي مقادير پولي بكار مي رود سازگار است.

 

نوع بولي:

نوع

محدوده مقادير

تعداد بايت ها در حافظه

Boolean يك بايتي ترجيحي 1
ByteBool يك بايتي 1
Bool يك كلمه اي 2
WordBool يك كلمه اي 2
LongBool يك كلمه اي مضاعف 4

نوع كاراكتري:

نوع

اندازه بر حسب بايت

آنچه مي تواند نگه دارد

ANSIChar 1 يك كاراكتر ANSI
WideChar 2 يك كاراكتر UniCode
Char 1

 

نوع رشته اي:

نوع

طول

آنچه مي تواند نگه دارد

آيا به تهي ختم مي شود يا خير

ShortString 255 ANSIChar خير
AnsiString حداكثر 3 مگابايت ANSIChar بلي
String يا255 يا حداكثر 3 گيگا بايت ANSIChar بلي يا خير
WideString حد اكثر 1.5 گيگا بايت WideChar بلي

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 1:6 موضوع: | لينک ثابت



قسمت اول

 

قسمت اول:

مقدمه:

دلفي زباني شي گرا، رويداد گرا، ويژوال و داراي محيط RAD  مي باشد. دلفي علاوه بر ساختن شالوده مستحكم Object Pascal ويژگي توليد ويژوال محصولاتي چون  ويژوال بيسيك را نيز ارائه نموده و مزاياي توليد حقيقي را نيز براي برنامه ساز ارائه مي كند.

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

امروزه برنامه نويسان با داشتن ابزار قدرتمند RAD ، Rapid Application Development همچون دلفي قادرند در كوتاه ترين زمان به بهترين شكل نرم افزارهاي تجاري را تهيه كنند.

حال براي شروع به چه چيزهايي احتياج داريم:

ابتدا بايد يكي از جديد ترين نسخه هاي دلفي را روي سيستم نصب كنيم.

در قدم بعد سوالي كه مطرح مي شود اين است كه آيا تا بحال يك زبان ويژوال را تجربه كرده ايد يا نه؟!

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

توجه! حرفه اي ها نخوانند

سه تا از ويژگي هاي بارز زبانهايي مانند دلفي شي گرايي، رويداد گرايي و ويژوال بودن آنها مي باشد.

شي گرايي چيست؟

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

اشيا داراي دو مفهوم Method ، Properties مي باشند. براي تشريح اين دو مفهوم يك شي در دنياي واقعي را در نظر مي گيريم.

براي مثال ماشين را در نظر بگيريد، ماشين ابزاري براي كنترل قسمتهاي مختلف خود دارد مانند كليد چراغ جلو يا كليد برف پاك كن چنين ابزاري شما را ياري مي كنند بدون اينكه از نكات فني و طرز ساخت اينكونه وسايل با خبر باشيد از آنها استفاده كنيد در واقع مشخصات فني هر برف پاك كن در هر ماشين متفاوت مي باشد ولي طرز براه انداختن همه آنها همانند هم است اين ويژگي همانند مفهوم متد در اشيا مي باشد.

همچنين ماشين داراي خصوصياتي است كه نشان دهنده وضعيت آن در يك لحظه زماني مي باشد مانند سرعت اين ويژگي قابل تغيير در ماشين همانند مفهوم Property در اشيا مي باشد.

رويداد گرايي چيست؟

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

ويژوال چيست؟

اتفاق شي گرا شدن برنامه ها برنامه نويسي را  به كارهاي روزمره نزديك كرد اما هنوز اين اشيا واقعي به نظر نمي رسيدند و براي رفع اين مشكل برنامه نويسي Visual يا بصري مرسوم شد كه در اينگونه زبانها برنامه نويس اشياي مورد استفاده را مي توانست ببيند و بدين صورت اشيا ملموس تر بودند اكنون VCL هاي دلفي كه به صورت ويژوال طراحي شده اند به شما اين قدرت را مي دهند كه مثلاً يك دكمه را برداشته و روي فرم خود بگذاريد.

 

 

نوشته شده توسط امین پریشانی در پنجشنبه سی ام شهریور 1385 ساعت 0:49 موضوع: | لينک ثابت



 


T E M P L A T E     D E S I G N E D     B Y     A M I N      P A R I S H A N I