آموزش دلفی در مجید آنلاین

شروع موضوع توسط saalek110 ‏14 نوامبر 2005 در انجمن منطق و الگوریتم برنامه‌نویسی

  1. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    منبع:
    http://delphilog.persianblog.com/1382_8_delphilog_archive.html
    --------------------------------------
    کد تست شده خود را در این قسمت می گذارم ولی قسمتهای قرمز اضافه شود و قسمتهای آبی می گوید که چه ابزارهایی اضافه شود.
    برنامه زیر ساعت و مسیر فایل را نشان می دهد.
    کد (Text):

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
    [COLOR="Blue"]
        Button1: TButton;
        Edit1: TEdit;
        Edit2: TEdit;
    [/COLOR]
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;
    [COLOR="Red"] appldir:string;[/COLOR]

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    [COLOR="Red"]
             appldir:=extractfilepath(paramstr(0));
             Edit1.Text:= TimeToStr(Time);
             Edit2.Text:= appldir;
    [/COLOR]
    end;

    end.
     
     
    آخرین ویرایش: ‏13 می 2007
    نوشته شده توسط saalek110 در ‏13 می 2007
  2. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    منبع:
    http://www.rightclick.ir/forum/ajax_topic-405.html
    -------------------------------------------------------------
    ویندوز چیست (از نگاه برنامه نویسی و توابع API):

    ویندوز یک سیستم عامل چند وظیفه ای و چند کاربره گرافیکی برای کامپیوتر های شخصی است.
    در زمان سیستم عامل Dos کاربران درون یک محیط متنی ساده ، تک کاربره و تک وظیفه ای کارهای خود را انجام می دادند . اما در اواسط دهه 1980 میلادی نیازهای جدیدی پیدا شد از قبیل امکان اجرای چند برنامه همزمان ، امکان دسترسی چند کاربر ، رابط کاربری زیباتر ، مدیریت کامل بر منابع و غیره. اینگونه بود که سیستم عامل Windows متولد شد.
    سیستم عامل Windows به تمام نیازهای فوق پاسخ داد اما محدودیت هایی نیز بوجود آورد مخصوصا برای برنامه نویسان سیستمی.
    در محیط Dos شما مجاز به استفاده از تمام قسمت های حافظه بودید. اما در Windows چنین چیزی نیست زیرا نمی توان به بخشهایی از حافظه که متعلق به برنامه دیگری است دسترسی داشت حتی نمی توان آنها را خواند. و یا استفاده از فضای حافظه مجازی تحت نظر سیستم فایل است که اجازه هیچ گونه دسترسی مستقیم به Hard Disk را به ما نمی دهد. مورد بسیار مهم دیگر این است که در Dos برنامه نویس می بایست خودش با Port ها ارتباط برقرار کند اما در Windows چنین اجازه ای ندارد. و موارد بسیار زیاد دیگر(مخصوصا در ارتباط با سخت افزار).
    اما اینها هیچ کدام ضعف نیست بلکه نشان دهنده قدرت Windows است که اجازه نمی دهد برنامه ها در کارهای یکدیگر دخالت کنند . با وجود این دست برنامه نویس هم برای انجام کارهای مورد نیاز بسته نیست بلکه همان ویندوزی که تمام کارها را بدست می گیرد همان نیز امکاناتی را به برنامه نویس می دهد تا بتواند برنامه سیستمی بنویسد . این امکانات API (Application Programming Interface)نامیده می شوند . در واقع API یکسری توابع استاندارد است که شرکت Microsoft داخل یکسری فایل DLL برای برنامه نویسی سیستمی قرار داده است و بیش از 1000 تابع و رویه (Procedure) می باشد.
    API را اصطلاحا قلب ویندوز می نامند ، هر کاری که در این سیستم عامل انجام می شود API است یعنی خود این سیستم عامل هم برای بسیاری از اعمال خویش نیز از آن استفاده می کند. زبانهای برنامه نویسی که تحت Windows کار می کنند (مثل Delphi) از API استفاده می نمایند . مثلا اگر یک متغیر تعریف کنید یک API بصورت خودکار اجرا شده و مقدار حافظه مورد نیاز را به برنامه شما اختصاص می دهد.
    پس به زبانی می توان ادعا کرد که Windows مجموعه ای از توابع API است و می توان گفت که نه تنها این سیستم عامل ما را محدود نکرده است بلکه کار ما را ساده نموده است. مثلا اگر در Dos مجبور بودیم برای Save یک فایل ، کلی برنامه نویسی کنیم وهمه چیز را در نظر بگیریم که مثلا مبادا اطلاعاتمان روی اطلاعات دیگری Overwrite شود ، در Windows کافی است یک API را فراخوانی کنید و به همین سادگی Window تمام کارهای مربوطه را انجام می دهد.
    در این Topic باز هم از API و نحوه کارکردن با آن ، DLL ها ، Message ها ، DC ها و غیره در چند روز آینده صحبت خواهد شد.


    امروز برای نمونه دو سه تا از API های ساده و کارآمد را معرفی می کنیم. البته قبل از آن این مطلب را بگویم که Delphi استفاده از توابع API را ساده کرده است و ما حداکثر با Use کردن یک فایل از آنها استفاده می کنیم.

    1- رویه ( Procedure ) Sleep:
    با استفاده از این رویه در اجرای برنامه می توان وقفه ای ایجاد کرد.
    شکل کلی این رویه به صورت زیر است. كد:
    کد (Text):
     
    Procedure Sleep(dwMilliseconds:DWord);
     
    همانطور که پیدا است این رویه یک ورودی از جنس DWord می گیرد. این ورودی عددی است که زمان توقف را بر حسب میلی ثانیه مشخص می کند(مثلا عدد 1000 معرف یک ثانیه است).

    مثال:کد زیر مقدار Progress یک ProgressBar را از 0 تا 100 درصد در طول 10 ثانیه زیاد می کند. كد:
    کد (Text):
     
    var
    i:Byte;
    begin
      i:=0;
      while i<100 do
        begin
            i:=i+10;
            ProgressBar1.Position:=i;
            Sleep(1000);
        end;
    end;
     
    2- تابع CopyFile:
    یک فایل را از محلی به محلی دیگر کپی می کند.
    شکل کلی این تابع به صورت زیر است. كد:
    کد (Text):
     
    Function CopyFile (lpExistingFilename, lpNewFilename:PChar, bFailIfExists:BOOL):BOOL;
     

    پارامتر lpExistingFilename یک String(در حقیقت PChar که نوعی رشته است) است که مسیر و نام فایل مبدا را مشخص می کند.
    پارامتر lpNewFilename یک String(در حقیقت PChar که نوعی رشته است) است که مسیر و نام فایل مقصد را مشخص می کند. دقت کنید که نام فایل مقصد نیز باید قید شود و معمولا برابر با نام فایل مبدا گرفته می شود.
    پارامتر bFailIfExists یک مقدار منطقی(Boolean) است که اگر فایل در مقصد وجود داشت چه کاری انجام شود. اگر True بود و فایل مقصد قبلا موجود باشد کار تابع نیمه تمام می ماند و اگر False باشد روی فایل اول Overwrite می گردد.
    خروجی تابع منطقی است و اگر کارش به درستی انجام شود، True و در غیر این صورت False است.
    مثال:خط زیر یک فایل را از درایو C داخل درایو D کپی می کند و اگر فایل در مقصد وجود داشته باشد آنرا Overwrite می کند. كد:
    کد (Text):
     
    CopyFile('C:\Chortke.jpg','D:\Chortke.jpg',False);
     

    3- تابع GetDriveType :
    این تابع نوع هر یک از درایوهای سیستم را مشخص می کند انواعی از قبیل فلاپی ، دیسک سخت ، CDROM و غیره.
    شکل کلی این تابع به صورت زیر است. كد:
    کد (Text):
     
    Function GetDriveType(lpRootPathName:PChar): LongWord;
     
    پارامتر lpRootPathName یک رشته است و نام درایو مورد نظر را مشخص می کند مثل "C:\".

    خروجی این تابع یک عدد است که می تواند مقادیر زیر باشد.
    DRIVE_UNKNOWN: درایوی که معرفی شده است قابل دسترسی نمی باشد. برابر با عدد 0 می باشد.
    DRIVE_NO_ROOT_DIR: درایوی که معرفی شده است وجود ندارد. برابر با عدد 1 می باشد.
    DRIVE_REMOVABLE: برابر با مقدار عددی 2 می باشد و مشخص می کند که دیسک درایو مورد نظر از نوع قابل حمل می باشد.
    DRIVE_FIXED: برابر با مقدار عددی 3 می باشد ومشخص می کند که درایو مورد نظر از نوع ثابت است.
    DRIVE_REMOTE: برابر با مقدار عددی 4 می باشد و مشخص می کند که درایو مورد نظر از نوع درایوشبکه می باشد.
    DRIVE_CDROM: برابر با مقدار عددی 5 می باشد و مشخص می کند که درایو مورد نظر از نوع CD_Drive می باشد.
    DRIVE_RAMDISK: برابر با مقدار عددی 6 بوده و مشخص می کند درایو مورد نظر از نوع درایو های ساخته شده در RAM می باشد.

    مثال: خط زیر مشخص کننده نوع درایو C می باشد. كد:
    کد (Text):
     
    if GetDriveType('C:\') = DRIVE_FIXED then
     ShowMessage ('It is a hard drive Partition');
     

    یک مثال با سه تابع فوق ساخته ام که می توانید بوسیله لینک زیر آنرا همراه Source Code اش DownLoad کنید.


    http://rightclick.ir/downloads/Api_Delphi_Test1_rar

    --------------------------------------------------------------------------------------

    سالک: سورس بالا را دانلود کنید و نتیجه اجرا و کدها را ببینید.
    حالا من کمی شرح می دهم. داریم از توابع api استفاده می کنیم که در بالا گفته شد چی هستند و اما شرح دیگر قسمتهای سورس.
    در تب Dialogs در جعبه ابزار ابزاری به نام OpenDialog داریم که به مااجازه انتخاب فایل می دهد.
    با نگاهی به پروژه می بینیم که دو فرم دارد. بعد اینکه کاربر فایل را انتخاب کرد با دستور :
    کد (Text):

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

    نکات کد نویسی:
    کد (Text):

    i:=0;
    while i<100 do
     begin
      i:=i+10;
      ProgressBar1.Position:=i;
      Sleep(1000);
     end;
     
    در کد بالا یک حلقه while داریم که قبلش متغیری را برابر صفر گرفته و تا این متغیر به 100 نرسیده آن را ده تا ده تا اضافه کرده. و این متغیر را در صفت پوزیشن پروگرس بار ریخته. و همین طور از تابع Sleep استفاده شده داخل حلقه.

    همچنین در کد زیر:
    کد (Text):

    if Edit1.Text<>'' then
     begin
       DRV:=Edit1.Text+':\';
       Case GetDriveType(pchar(DRV)) of
        DRIVE_UNKNOWN:STR:='This Drive is not accessible.';
        DRIVE_NO_ROOT_DIR:STR:='This is not a real drive.';
        DRIVE_REMOVABLE:STR:='It is Removable Drive'+#13+'Like Floppy Drive.';
        DRIVE_FIXED:STR:='It is a hard drive Partition.';
        DRIVE_REMOTE:STR:='It is a network drive.';
        DRIVE_CDROM:STR:='It is CD_ROM Drive.';
        DRIVE_RAMDISK:STR:='It is RAM Drive.';
       end;
     end
    else
     begin
      STR:='Please Enter a Character into edit.';
      Edit1.SetFocus;
     end;
     
    اولا شرط if را می بینیم که اگر داخل Edit1 خالی نباشد یعنی <> (نامساوی) دو تا کوتیشن به هم چسبیده یعنی خالی.
    وقتی خالی نباشد آن Edit یا دستور Case حالات مختلفGetDriveType(pchar(DRV)) بررسی می شود و با هر حالت مقداری به STR داده می شود.
    و در ادامه کد یعنی در این خط:
    کد (Text):

    ShowMessage(STR);
     
    یک کادر دیالوگی(یک پنجره کوچک) حاوی همان STR نمایان می شود.
    بقیه سورس را خودتان تجزیه تحلیل کنید. از شل-تری – ویو مسیر گرفه شده و باز با دستورات if و case واکنشهای مختلفی به کاربر نشان داده شده وقتی که فایلی هم نام در مسیر مقصد موجود بوده و الی آخر.
     
    نوشته شده توسط saalek110 در ‏15 می 2007
  3. saalek110

    saalek110 Well-Known Member

    ارسال‌ها:
    2,765
    تشکر شده:
    1,382
    امتیاز دستاورد:
    113
    مطالبی از :
    http://delphi32.persianblog.ir/
    =====================
    عناوین این سایت. بعضی از آنها را با کد یا شرح نقل کرده ام.
    ================================================

    از :
    http://www.kadironline.blogfa.com/cat-1.aspx

    باز شدن فرم همراه با افکت :
    برای انجام این کار در رویداد OnCreate فرمی که می خواهید با افکت باز بشه خط زیر را اضافه کنید :
    کد (Text):

    AnimateWindow(Form1.Handle, 300, AW_Center);
     
    سالک: چک شد. احتمالا از توابع api است این AnimateWindow .
    =========================================

    از :
    http://www.kadironline.blogfa.com/cat-1.aspx

    عکس گرفتن از فرم:
    کد (Text):

     GetFormImage.SaveToFile('c:\Form.bmp');
     
    سالک: چک شد. در help خود دلفی GetFormImage را سرچ کردم. به اطلاعات زیر برخوردم:

    کد (Text):
     VCL Reference
    GetFormImage method (TCustomForm)


    Returns a bitmap of the form.

    Delphi syntax:

    function GetFormImage: TBitmap;

    C++ syntax:

    Graphics::TBitmap* __fastcall GetFormImage(void);

    Description

    Use the GetFormImage method to obtain a bitmap of the form.
    =========================================
    از :
    http://mansour-jari.persianblog.com/1383_1_29_mansour-jari_archive.html

    تابع(SHOW CURSOR)
    هدف := مخفي و نمایان كردن نشانگر موس
    يك باتن را بروي فرم خودقرار دهيد سپس برو آن دوباركليك كنيد و
    تابع زير را درآن بنوسيد.
    کد (Text):

     windows.ShowCursor(longbool(0));
     
    حالا برنامه را اجرا كنيد سپس بروي گزينه كليك كنيد تا نتيجه را مشاهده كنيد.
    توجه ...
    درصورتي كه مي خواهيد موس به نمايش درآيد مقدار صفر را يك قرار دهيد.

    سالک: چک شد.
    ============================================

    منبع:
    http://www.delphi2008.blogfa.com/
    ======================

    وجود عناصر روی فرم( فرم نمایش داده نمی شود ):
    کد (Text):

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     Form1.Brush.Style :=bsClear;
     Form1.BorderStyle :=bsNone;
    end;
     
    سالک: پروژه بالا باعث میشه که عناصر روی فرم هویدا باشند ولی خود فرم نامرئی باشد. می توانید ابزارهایی هم اضافه کنید به فرم تا این حالت را ببینید.
    برای ایجاد کد FormCreate کاری که من بلدم اینه که بروم به پنجره پراپرتی و روی تب رویدادها events بروم و بعد رویOnCreate دابل کلیک کنم.

    برای پروژه های زیر به سایت اصلی مراجعه کنید:
     
    نوشته شده توسط saalek110 در ‏12 اکتبر 2010
    loo30fer، یاسردرا، ansoft و 2 نفر دیگر از این ارسال تشکر کرده اند.

به اشتراک بگذارید