تبلیغات :
خرید لپ تاپ استوک
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 1 از 2 12 آخرآخر
نمايش نتايج 1 به 10 از 15

نام تاپيک: چند نکته کاربردی در دلفی

  1. #1
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض چند نکته کاربردی در دلفی

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

    نكات مفید كار در محیط دلفی

    محیط دلفی برای برنامه نویسی یکی از بهترین محیطهای برنامه نویسی است گذشته از کارکرد داخلی و کمپایلر آن که بسیار قوی و سریع است، محیط آن یعنی IDE آنهم قدرت بسیار زیادی دارد که باعث شده یکی از بهترین ادیتورها باشد. در این مقاله من سعی بر این داشته ام تا با ارائه یک سری از نکات و کلیدهای میانبر که می توانند برای کار در دلفی بسیار مفید و کارا باشند، کمک کنم تا شما بتوانید با قدرت بیشتر به برنامه نویسی و کار در این محیط قدرتمند ادامه دهید.

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

    جستجو در متن بصورت مستقیم:
    برای اینکار کلیدهای Ctrl+E را بفشارید و بدنبال آن شروع به تایپ کلمه مورد نظر کنید نتیجه آن را خود ببینید. برای اینکه به کلمه بعدی بروید کافیست کلید F3 را بزنید.

    ایجاد فرورفتگی در کد:
    بعضی اوقات - که خیلی هم پیش می‌آید - لازم است که یک مقداری از متن را بصورت بلوک شده به جلو و یا عقب ببریم. منظور دندانه دار کردن متن است که به خوانایی برنامه کمک می کند. برای اینکار می تونید از کلید Ctrl +Shift+I برای جلو بردن و Ctrl+Shift+U برای عقب برگرداندن متن بلوک شده استفاده کنید.

    پرش به قسمت تعریف یک شی (Object):
    ببنید شی مورد نظرتون (از قبیل VCL, Procedure, Function,...) در کجا و چطور تعریف شده می توانید کلید Crtl رو پایین نگه داشته و روی شی مورد نظر Click کنید.

    برای تغییر حالت کاراکترها:
    شما می توانید یک قسمت از متن (که ممکن است با حروف بزرگ و یا کوچک تایپ شده باشد) را انتخاب کنید و با زدن کلیدهای Ctrl+O+U به ترتیب تمامی حروف کوچک آن قسمت از متن را به حروف بزرگ و تمامی حروف بزرگ آنرا به حروف کوچک تبدیل کنید. برای تعییر حالت یک کلمه نیز میتوانید روی کلمه مورد نظر رفته و کلیدهای Ctrl+K+F برای بزرگ کردن و کلیدهای Ctrl+K+E را برای کوچک کردن حروف آن کلمه بکار برد.

    درست کردن ماکرو متنی:
    این امکان بسیار مفید است و می تواند بسیاری از کارهای نوشتاری را کاهش دهد با اینکار شما میتوانید یک سری از کارهای تکراری که روی متون انجام می دهید را بصورت ماکرو در آورده و از آنها به راحتی استفاده کنید. برای شروع به ضبط ماکرو کلیدهای Ctrl+Shift+R را بفشارید و آن سری کارهایی را که می خواهید را انجام دهید و سپس برای اینکه به کار ضبط ماکرو پایان دهید کلیدهای Ctrl+Shift+R را دوباره بزنید. حال برای استفاده از ماکرو کافیست در هر جا که لازم بود کلیدهای Ctrl+Shift+P را بفشارید.

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

    گذاشتن علامت روی متن:
    این کار که به BookMark معروف است بسیار مفید و کارا می باشد. در هنگامی که شما روی قسمتی از متن برنامه کار میکنید و می خواهید به یک قسمت دیگر بروید ممکن است برای برگشتن به مکان اول خود کمی مشکل پیدا کنید. ولی شما میتوانید با زدن چند دکمه به محل مورد نظرتون باز گردید. برای اینکار در خطی که قصد دارید علامت بگذارید کلیدهای Ctrl+Shift+0..9 را بفشارید. منظور اینست که کلیدهای Ctrl+Shift را نگه دارید و یکی از اعداد 0 تا 9 را وارد کنید تا آن خط به همان شماره علامت گذاری شود و سپس هر جا که خواستید بروید و سپس هر بار که کلید Ctrl را نگه دارید و شماره مورد نظر را وارد کنید به همان خط باز خواهید گشت. البته توجه داشته باشید که فقط می توانید 10 خط را با این روش علامت گذاری بکنید و برای برداشتن علامت ها کافیست روی همان خط دوباره کلید Ctrl+shift و شماره‌ای که برای آن خط وارد کرده اید را بفشارید با اینکار علامت آن خط برداشته می شود.

    ایجاد کلاس مورد نظر:
    شما هنگامی که در قسمت Private و یا Public یک type، روال یا تابع درست کردید لازم دارید که قسمتی را برای قرار دادن کدهای مربوط به آن روال یا تابع را ایجاد کنید. برای اینکار شما پس از اینکه نام تابع را تایپ کردید می توانید کلیدهای Ctrl+Shift+C را فشار دهید تا دلفی یک قسمت برای نوشتن کدهای مورد نظرتان ایجاد کند.

    ظاهر کردن پنجره Code insight:
    شما حتما به اهمیت و مفید بودن این قسمت دلفی واقفید که در هنگام کد نویسی تا چه حد می تواند کارها را راحت کند. بله در هنگام وارد کردن کدها بعد از وارد کردن نام یک کلاس و یا Object با زدن یک نقطه (.) پنجره Code Insight‌ ظاهر می شود. حال در بعضی وقتها شما ممکن است که نقطه را قبلا وارد کرده باشید و یا در مواقع دیگر این پنجره ظاهر نشود. در این صورت برای اینکه پنجره را ظاهر کنید باید دوباره نقطه را وارد کنید ولی راه آسانتری هم وجود دارد و آن اینست که کلیدهای Ctrl+Speacebar را فشار دهید.

    ظاهر کردن پنجره Code Parameter:
    همانند بالا در هنگام ظاهر شدن Hint مربوط به راهنمای توابع که معمولاً بعد از گذاشتن پرانتز مربوط ظاهر میشود و در مورد پارامترهای لازم می باشد نیز می توانید از کلیدهای Ctrl+Shift+SpaceBar استفاده کنید.

    رفتن از قسمت تعریف توابع و روالها به قسمت کد آنها:
    همیشه این نیاز وجود خواهد داشت که شما در هنگامی که دارید به دنبال یک روال در قسمت type میگردید بعد از پیدا کردن نام آن می خواهید که خود آن تابع یا روال را نیز ببنید. برای اینکار خوب حتما نام آن را جستجو میکنید ولی یک راه آسانتر اینست که شما روی نام آن تابع قرار گیرید و کلیدهای Ctrl+Shift+Up/Down را بزنید. در اینحالت اگر روی کد تابع باشید به قسمت تعریف آن خواهید رفت.

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


  3. #2
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض مدیریت حافظه در دلفی

    سلام

    مدیریت حافظه در دلفی

    تخصیص خودکار حافظه
    وقتی شما از نوع‌های پایه (Integer ،real ،word و…) برای ایجاد متغییرهای خود استفاده می کنید، هیچ نگرانی درباره تخصیص حافظه آن وجود ندارد چون دلفی خودش آنرا تخصیص حافظه می کند و سپس آزاد میکند.

    type
    TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
    var
    Name : String; {256 Bytes}
    X, Y : Integer; {4 + 4 = 8 Bytes}
    List : array [0..10] of Double; {8 * 11 = 88 Bytes}
    Today : TDay; {1 Byte}

    دراین نمونه پس از پایان برنامه، تمام حافظه تخصیص داده شده فراخوانی و آزاد می شود.


    تخصیص حافظه دینامیکی
    در این حالت برنامه نویس احتیاج دارد تا انباره حافظه را شخصا" تخصیص و آزاد کند.

    نوع Pointer
    اشاره‌گرها در دلفی می‌توانند شکل‌های مختلفی را در برگیرد. نخست، نوع اشاره‌گری که یک آدرس حافظه را برای نوع ویژه‌ای از داده، همانند صحیح، رشته و غیره نگه میدارد (Typed Pointer).

    var
    ;Number : ^Integer
    ;Name : ^String

    دوم، اشاره‌گرهای بدون نوع. اشاره‌گرهای بدون نوع (Untyped Pointers) خیلی به نوع معمولی خود شبیه هستند. اما محدودیت‌هایی مثل اینکه باید به نوع خاصی اشاره (Point) کند را ندارد.

    var
    ;Something : Pointer

    حال اشاره‌گر بدون نوع ما می تواند به هر نوعی از داده اشاره کند. برای تخصیص حافظه آن، از کمپلکس بیش از یک بیت استفاده میکنیم. برای مثال برنامه زیر کامپایل می شود ولی در زمان اجرا حافظه‌ای تخصیص نمیشود.

    begin
    New(Something);
    Dispose(Something);
    end;


    برای تخصیص حافظه کامپایلر باید بداند که نوع داده ما برای تخصیص حافظه چیست:
    type
    IntPtr = ^Integer;

    var
    Something : Pointer;
    begin
    Something := New(IntPtr);
    Integer(Something^) := 10;
    Dispose(Something);
    end;



    تخصیص بلاکی از حافظه
    ما می‌توانیم از اشاره به بلاک‌هایی از تخصیص حافظه در سیستم استفاده کنیم. این کار را با رویه‌های GetMem و FreeMem برای تخصیص و آزاد سازی حافظه استفاده میکنیم.
    var
    Something : Pointer
    begin
    GetMem(Something, 100);
    FreeMem(Something, 100);
    end;



    اشاره به حافظه از قبل تخصیص داده شده
    هر دو نوع اشاره‌گرها می توانند به هر جایی از حافظه اشاره بکنند. این بدان معناست که آنها می‌توانند اشاره به فضای اشغال شده با داده‌هایی که در حال حاضر موجودند داشته باشند. این نمونه اشاره‌گر احتیاجی به تخصیص حافظه ندارد.
    var
    Something : Pointer;
    MyString : PChar; // type PChar = ^Char;

    begin
    GetMem(Something, 100);
    MyString := Something;
    StrCopy(Something, 'Hello World');
    FreeMem(Something, 100);
    end;



    حافظه Heap
    Heap شامل قسمتی از حافظه موجود در یک برنامه است که آنرا حافظه پویا می نامیم. Heap بخشی است که در آن تخصیص و تعریف حافظه به صورت تصادفی (Random) اتفاق می‌افتد. این به آن معناست که اگر شما سه بلاک از حافظه را به طور متوالی تخصیص دهید، می توانید بعد از هر دستور آنرا از بین ببرید. مدیر Heap جزئیات را برای شما نگهداری می کند. بنابراین شما به سادگی می توانید یک حافظه جدید را با GetMem و یا بوسیله صدا زدن constructor هنگام ساختن یک شی درخواست کنید و دلفی به شما یک بلاک جدید را برخواهد گرداند. Heap یکی از سه فضای موجود در برنامه کاربردی را استفاده کرده و دوتای دیگر به صورت فضای یکپارچه (Global) و پشته قرار می گیرند.


    حافظه Stack
    Stack شامل قسمتی از یک بخش از حافظه موجود یک برنامه است که دینامیکی است اما برای تخصیص و آزادسازی فرامین مخصوص دارد. تخصیص Stack به صورت LIFO می باشد. این بدان معناست که آخرین حافظه شیء شما تخصیص داه خواهد شد و سپس حذف می شود. حافظه پشته در روتین‌های نوعی استفاده می‌شود. وقتی شما یک روتین را صدا میزنید، پارامترهایش و روتین نوع آن در پشته ریخته می شود. همچنین پارامترهایی که در یک روتین تعریف میشوند، در پشته ذخیره میشوند و وقتی روتین خاتمه پیدا می کند تمام آنها به طور خودکار از بین می رود.

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


  5. #3
    آخر فروم باز soldier's Avatar
    تاريخ عضويت
    May 2006
    پست ها
    2,505

    پيش فرض

    سلام
    ببخشيد من اين نوشته ها رو جاي ديگه اي ديدم
    اگر منبع داره بنويس!

  6. #4
    در آغاز فعالیت
    تاريخ عضويت
    May 2006
    پست ها
    5

    پيش فرض

    چه جوری میشه در دلفی یه کامند را کلیک کرد و یک اهنگ پخش شو بدون اینکه پنجره اوپن دیالوگ باز شود

  7. #5
    آخر فروم باز soldier's Avatar
    تاريخ عضويت
    May 2006
    پست ها
    2,505

    پيش فرض

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

  8. #6
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض تغییر Hint برای هر ستون از DBGrid در دلفی

    سلام
    گفتم که منبع رو بعد مقاله آخر میگم.

    تغییر Hint برای هر ستون از DBGrid در دلفی

    ابتدا باید یک عنصر جدید مبتنی بر TDBGrid ایجاد کنید و رویداد OnMouseMove را فراخوانی کنید:
    type
    TMyDBGrid = class(TDBGrid)
    published
    property OnMouseMove;
    end;


    اگرچه شما در رویداد OnMouseMove مختصات X و Y را بدست خواهید آورد، اما شما باید ستون مورد نظر را پیدا کنید. برای ادامه کار لازم است که سطر زیر را در قسمت protected قرار دهید:

    procedure WMMouseMove(var Message : TWMMouse); message WM_MOUSEMOVE;


    همچنین متغیر های زیر را در قسمت public اضافه نمایید:
    MouseRow : integer;
    MouseCol : integer;


    بنابراین متد WMMouseMove بصورت ریر خواهد بود:
    procedure TMyDBGrid.WMMouseMove(var Message : TWMMouse);
    var
    t : TGridCoord;
    begin
    t := MouseCoord(Message.XPos, Message.YPos);
    MouseCol := t.x;
    MouseRow := t.y;
    inherited;
    end;


    ما ابتدا فیلدهای XPost و YPos را از ساختار WMMouseMove تنظیم میکنیم:
    procedure TForm2.MyDBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y:
    Integer);
    begin
    if (((dgIndicator in MyDBGrid1.Options) and (MyDBGrid1.MouseCol > 0)) or
    ((not (dgIndicator in MyDBGrid1.Options)) and (MyDBGrid1.MouseCol <> -1)))
    and (MyDBGrid1.MouseCol <> OldMouseCol) then begin
    OldMouseCol := MyDBGrid1.MouseCol;
    if dgIndicator in MyDBGrid1.Options then
    MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol - 1].FieldName
    else
    MYDBGrid1.Hint := MyDBGrid1.Columns[MyDBGrid1.MouseCol].FieldName;
    end;
    end;


    حالا مجددا" تعریف زیر را در قسمت public قرار دهید:

    HintMouseMessage(Control : TControl; var Message : TMessage)


    در قسمت OnMouseMove از TDBGrid نیز فرامین زیر را اضافه نمایید:
    var
    r : TMessage;
    begin

    Application.HintMouseMessage(self, r);
    TWMMouse(r).XPos := X;
    TWMMouse(r).YPos := Y;
    Application.HintMouseMessage(MyDBGrid1, r);
    end;


    همه کارها انجام شد. حالا شما میتوانید نتیجه را مشاهده کنید.

  9. #7
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض نصب ProgressBar روی StatusBar در دلفی

    سلام

    نصب ProgressBar روی StatusBar در دلفی

    StatusBar می باشد. انجام این کار بسیار ساده است. برای این کار کافی است بر روی فرم خود یک StatusBar اضافه نمایید حالا در قسمت تعاریف متغیر های عمومی کد زیر را بنویسید:

    ProgressBar1: TprogressBar;


    در ادامه دستورات زیر را در خاصیت OnCreate فرم خود بنویسید:
    var
    ProgressBarStyle: LongInt;
    begin
    {create a run progress bar in the status bar}
    ProgressBar1 := TProgressBar.Create(StatusBar1);
    ProgressBar1.Parent := StatusBar1;
    {remove progress bar border}
    ProgressBarStyle := GetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE);
    ProgressBarStyle := ProgressBarStyle - WS_EX_STATICEDGE;
    SetWindowLong(ProgressBar1.Handle, GWL_EXSTYLE, ProgressBarStyle);
    {set progress bar position and size - put in Panel[2]}
    ProgressBar1.Left := StatusBar1.Panels.Items[0].Width +
    StatusBar1.Panels.Items[1].Width + 4;
    ProgressBar1.Top := 4;
    ProgressBar1.Height := StatusBar1.Height - 6;
    ProgressBar1.Width := StatusBar1.Panels.Items[2].Width - 6;
    {set range and initial state}
    ProgressBar1.Min := 0;
    ProgressBar1.Max := 100;
    ProgressBar1.Step := 1;
    ProgressBar1.Position := 0;
    end;


    حالا برای آنکه پس از خارج شدن از فرم حافظه اشغال شده آزاد گردد، در قسمت OnDestroy در Event فرمتان دستور زیر را اضافه نمایید:

    ProgressBar1.free

  10. #8
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض نمایش میزان كپی شدن فایل با ProgressBar در دلفی

    سلام

    نمایش میزان كپی شدن فایل با ProgressBar در دلفی

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

    برای انجام این کار ابتدا بر روی یک فرم یک ProgressBar اضافه کنید سپس تابع زیر را تایپ کنید:
    procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
    var
    FromF, ToF: file of byte;
    Buffer: array[0..4096] of char;
    NumRead: integer;
    FileLength: longint;
    begin
    AssignFile(FromF, Source);
    reset(FromF);
    AssignFile(ToF, Destination);
    rewrite(ToF);
    FileLength := FileSize(FromF);
    with Progressbar1 do
    begin
    Min := 0;
    Max := FileLength;
    while FileLength > 0 do
    begin
    BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
    FileLength := FileLength - NumRead;
    BlockWrite(ToF, Buffer[0], NumRead);
    Position := Position + NumRead;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
    end;
    end;


    در این تابع شما در واقع فایل مبدا را خوانده و در مقصد مینویسید. حالا یک دکمه اضافه کرده کد زیر رو اضافه نمایید:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    CopyFileWithProgressBar1('c:\Welcome.exe', 'c:\temp\Welcome.exe');
    end;



    چطور می توان زمان کپی شدن فایل را محاسبه و نمایش داد؟
    برای این کار نیز میتوانید از تابع زیر استفاده کنید:
    procedure TForm1.CopyFileWithProgressBar1(Source, Destination: string);
    var
    FromF, ToF: file of byte;
    Buffer: array[0..4096] of char;
    NumRead: integer;
    FileLength: longint;
    t1, t2: DWORD;
    maxi: integer;
    begin
    AssignFile(FromF, Source);
    reset(FromF);
    AssignFile(ToF, Destination);
    rewrite(ToF);
    FileLength := FileSize(FromF);
    with Progressbar1 do
    begin
    Min := 0;
    Max := FileLength;
    t1 := TimeGetTime;
    maxi := Max div 4096;
    while FileLength > 0 do
    begin
    BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
    FileLength := FileLength - NumRead;
    BlockWrite(ToF, Buffer[0], NumRead);
    t2 := TimeGetTime;
    Min := Min + 1;
    // Show the time in Label1
    label1.Caption := FormatFloat('0.00', ((t2 - t1) / min * maxi - t2 + t1) / 100);
    Application.ProcessMessages;
    Position := Position + NumRead;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
    end;
    end;


    در این تابغ ابتدا زمان اولیه در متغیر t1 ذخیره شده و سپس پس از کپی شدن هر قسمت از فایل، زمان در متغیر t2 ذخیره میشود و توسط فرمول زیر مقدار زمان باقی مانده تا کپی کامل فایل بدست می آید.

    ((t2 - t1) / min * maxi - t2 + t1) / 100

  11. #9
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض استفاده از Dll‌ها در دلفی

    سلام

    استفاده از DLL‌ها در دلفی

    ایجاد یک DLL
    با استفاده از منو فایل گزینه New Items را انتخاب کنید و آیتم DLL Wizard را انتخاب نمایید. حال به فایل ایجاد شده، یک فرم با استفاده از روش بالا اضافه نمایید. دقت نمایید که Application را بجای فرم انتخاب ننمایید. حال اگر فرض کنیم که نام فرم شما Demo باشد و بانام UDemo.pas آنرا ذخیره کرده باشید. باید در فایل DLL بصورت زیر کد نویسی نمایید:
    library demodll;

    { Important note about DLL memory management: ShareMem must be the
    first unit in your library's USES clause AND your project's (select
    Project-View Source) USES clause if your DLL exports any procedures or
    functions that pass strings as parameters or function results. This
    applies to all strings passed to and from your DLL--even those that
    are nested in records and classes. ShareMem is the interface unit to
    the BORLNDMM.DLL shared memory manager, which must be deployed along
    with your DLL. To avoid using BORLNDMM.DLL, pass string information
    using PChar or ShortString parameters. }

    uses
    SysUtils,
    Classes,
    UDemo in 'UDemo.pas' {Demo};

    {$R *.res}
    procedure ShowdemoForm;stdcall;
    begin
    Demo :=Tdemo.Create(nil);
    demo.Show;
    end;

    function ShowdemoFormModal:integer;stdcall;
    begin
    demo :=Tdemo.Create(nil);
    Result := demo.ShowModal;
    end;

    Exports
    ShowDemoForm,
    ShowdemoFormModal;
    begin
    end.


    دقت کنید که نام DLL فوق DemoDll می باشد و با نام DemoDll.dpr ذخیره گردیده است.

    حال بر روی فرم موجود تمام دکمه‌ها و آبجکت‌های مورد نظرتان را اضافه و کد نویسی کنید (اختیاری). در پایان در منو Project گذینه Build DemoDll را انتخاب کرده و اجرا نمایید. فایلی با نام DemoDll.dll ایجاد می گردد که برای استفاده آماده است.


    استفاده از یک DLL بصورت دینامیکی
    برای استفاده از یک DLL ‌بصورت دینامیکی، ابتدا نام توابعی را که در فایل DLL شما موجود است بصورت زیر تعریف نمایید:
    unit UMain;

    interface

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

    type
    TShowdemoFormModal= Function :integer;
    .
    .
    .


    دقت کنید که نام برنامه انتخابی پیش فرض Main و با نام UMain.pas ذخیره گشته است. حال برای لود کردن DLL یادشده، یک دکمه بر روی فرم قرارداده آنرا بصورت زیر کد نویسی کنید:
    var
    hndDLLHandle:THandle;
    ShowdemoFormModal:TShowdemoFormModal;

    procedure TFMain.Button1Click(Sender: TObject);
    begin
    try
    hndDLLHandle:=LoadLibrary('Demodll.dll');

    if hndDLLHandle <> 0 then begin
    @ShowdemoFormModal:=getProcAddress(hndDLLHandle,'S howdemoFormModal');

    if addr(ShowdemoFormModal) <> nil then begin
    ShowdemoFormModal;
    end
    else
    showmessage ('function not exists ...');
    end
    else
    showMessage('Dll Not Found!');
    finally
    freelibrary(hndDLLHandle);
    end;
    end;


    فرم شما آماده اجراست. در پایان متذکر می شوم که استفاده ار روش دینامیکی در لود کردن DLL ها باعث پایین آمدن سرعت نمایش فرم‌ها و در عوض بالارفتن سرعت برنامه خواهد شد.

  12. #10
    اگه نباشه جاش خالی می مونه A_M_IT2005's Avatar
    تاريخ عضويت
    Oct 2005
    محل سكونت
    بین جهنم و بهشت
    پست ها
    331

    پيش فرض آرایه‌ها در دلفی

    سلام

    آرایه‌ها در دلفی

    دلفی به ما امکان می دهد آرایه‌هایی از هر نوع متغییری را ایجاد کنیم. برای تعریف آرایه به صورت زیر عمل میکنیم:
    var
    array[indexType1, ..., indexTypen] of baseType;


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

    نکته: شما می توانید به جای استفاده از کروشه [] از ترکیب پرانتز نقطه استفاده کنید:

    d(.i.):= 3 + i; // Equivalent d[i]:= 3 + i;


    نکته: وقتی که شما یک آرایه را تعریف می کنید احتیاجی ندارید که به آن مقدار کمترین یا بیشترین بدهید:
    var
    A : array [Boolean] of integer;
    begin
    A[True] := 50;
    A[False] := 100;
    end;


    نکته: توابع Low و High کران‌های پایین وبالای یک متغییر آرایه‌ای یا نوعی یا ترتیبی را بر میگردانند:

    for I := 0 to High(X) do S := S + X[I];



    آرایه‌های ثابت:
    آرایه های ثابت می توانند توسط ساختار ثابت نوع دلفی تعریف شود. نوع ثابت که همیشه با عبارت Const تعریف می شود، نه تنها مانع تغییر مقدار پارامتر می شود، بلکه کدهای بهینه بیشتری برای رشته‌ها و رکوردهای رد شده به توابع تولید می کند. ما هنگامی از این نوع استفاده می کنیم که نخواهیم مقدار رد شده به یک تابع تغییر کند.
    type
    TDay = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);

    const
    DayNames : array [TDay] of String[9] = ('Sunday', 'Monday', 'Tuesday',
    'Wednesday', 'Thursday',
    'Friday', 'Saturday');
    var
    Today : TDay;

    begin
    Today := TDay(DayOfWeek(Date) - 1);
    ShowMessage('Today is ' + DayNames[Today] + '!');
    end;



    آرایه‌های دینامیکی:
    آرایه‌های دینامیکی، آرایه‌های تحلیلی پویایی هستند که ابعاد آنها موقع کامپایل شدن شناخته شده نیست. برای اعلان آنها کافی است یک آرایه بدون بعد تعریف کنید:

    var MyFlexibleArray: array of Real;


    قبل از به کار گیری آرایه‌های دینامیکی، ابتدا باید از رویه SetLength برای تخصیص حافظه آرایه استفاده کرد:

    SetLength (MyFlexibleArray, 2; (


    نکته: آرایه‌های دینامیکی همیشه مبتنی بر صفر می باشند.

    نکته: شما می‌توانید آرایه‌های دینامیکی را قبل از رسیدن به ترک قلمرو از حافظه خارج کنید:

    MyFlexibleArray := nil;


    نکته: مقدار حافظه‌ای که در اختیار آرایه قرار میگیرد، به طول آرایه ونوع عناصر آن بستگی دارد. به عنوان مثال اگر آرایه‌ای از نوع صحیح به طول 10 داشته باشیم 4*10 بایت حافظه به آن اختصاص می‌یابد.


    فشرده‌سازی آرایه‌ها:
    در دلفی شما هنگامی که ساختار خود را تعیین کردید می‌توانید با استفاده از کلمه کلیدی packed اطلاعات ذخیره شده خود را متراکم کنید:

    type TNumbers = packed array[1..100] of Real;


    نکته: استفاده از packed سرعت دسترسی به اطلاعات را کند میکند. در مورد آرایه‌ای از کاراکترها این مورد سازگارتر می‌باشد.


    آرایه‌های چند بعدی دینامیکی:
    برای تعریف آرایه‌های چند بعدی دینامیکی، تنها کافی است ...array of را در ساختار خود تکرار کنید. به طور مثال:
    type
    TMessageGrid = array of array of string;

    var
    Msgs: TMessageGrid;


    این تعریف یک آرایه دو بعدی از رشته‌ها می باشد. سپس باید به آرایه خود فضا نسبت داد:

    SetLength(Msgs, I, J);



    شما می‌توانید آرایه‌های چند بعدی دینامیکی خود را به صورت غیر مستطیلی (Not Rectangular) ایجاد کنید. ابتدا رویه SetLength را صدا زده و پارامتر بعد اول را بدهید:
    var
    Ints: array of array of Integer;

    SetLength(Ints, 10);


    ما 10 سطر به آرایه خود اختصاص دادیم. از این پس، شما می توانید ستونهای خود را در هر زمان (با اندازه‌های مختلف) تخصیص دهید:

    SetLength(Ints[2], 5);

صفحه 1 از 2 12 آخرآخر

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •