نمایش نتایج 1 تا 10 از 10

نام تاپیک: متغیر global

  1. #1
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    123

    متغیر global

    در دلفی چگونه می توان متغیر global تعریف کرد.

  2. #2
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    با سلام

    دوست عزیز راههای مختلفی برای این منظور وجود دارد که میتوانید یکی از انها را استفاده کنید ولی اخری از همه بهتر میباشد:
    1- متغییر مربوطه را در بالای implementation یکی از یونیتها که در تمامی یونیتها صدا شده است تعریف شود. من در تمامی پروژه ها معمولا یک یونیت با نام common دارم که تمامی متغییرها و کلاسهای مشترک در ان تعریف شده است و این یونیت را در تمامی یونیتهای برنامه به اصطلاح use میکنم.
    2- راه دوم استفاده از یک کلاس میباشد، به این صورت که تمامی متغییرها را در کلاس تعریف کرده و این کلاس نیز باید به شکل Singlton پیاده سازی شود و متغییرهای خود را با استفاده از پراپرتیهایی که در کلاس تعریف مینمایم مقداردهی و فراخوانی(خواندن) مینمایید. اگر قرار است در یک تیم کارکنید و برنامه شما هم به زبان عامیانه پدر مادر دار است از این روش استفاده کنید


    موفق باشید.
    ... چه بگویم که غم از دل برود چون تو بیایی

  3. #3
    برنامه شما هم به زبان عامیانه پدر مادر دار است
    اصطلاح باحالی بود

  4. #4
    با سلام
    راه دوم استفاده از یک کلاس میباشد، به این صورت که تمامی متغییرها را در کلاس تعریف کرده و این کلاس نیز باید به شکل Singlton پیاده سازی شود و متغییرهای خود را با استفاده از پراپرتیهایی که در کلاس تعریف مینمایم مقداردهی و فراخوانی(خواندن) مینمایید.
    امکان داره یه ذره بیشتر در این مورد توضیح بدهید؟
    با تشکر

  5. #5
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    منم علاقه‌مندم ببینم روش پیاده سازی کلاس بصورت Singleton چگونه است. اگر ممکن است بیشتر توضیح دهید.

    ساده ترین راه ممکن قرار دادن متغیر در بدنه کلاس یکی از فرمهایی که همیشه وجود دارد (مثلا فرم اصلی برنامه) است و در مراجعات بعدی میتوان به آن بعنوان یک فیلد کلاس مراجعه کرد. مثال:
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    sGlobalUsername:String; // این متغیر چون در اینجا تعریف شده حکم فیلد کلاس فرم را دارد
    end;

    و بعدا میتواند به اینصورت به آن مراجعه کرد:
     Form1.sGlobalUsername

    مثلا:
     Form1.sGlobalUsername := 'Reza';

    و یا:
     SomeVariable := Form1.sGlobalUsername

    برای در دسترس بودن Form1 در یونیت‌های دیگر باید یونیت حاوی Form1 را در آنها Use کنید.

  6. #6
    سلام

    یه روش خوب برای تعریف متغیر های گلوبال اینه که یه یونیت جدید به نام GlobalVars.pas به پروژت اضفه کنی و هر چیزی که میخوای گلوبال باشه ( Type ، Procedure ، Function ، Class ، Var .. ) اون تو تعریف کنی و هر جا لازمه Use کنی.
    اینطوری برنامه خیلی خوانا تره و حتی چند سال بعد هم میشه با یه نگاه به برنامه متغیرهای گلوبال رو پیدا کرد.
    ساختارش میتونه شبیه زیر باشه.

    unit GlobalVars;

    interface

    uses
    // needed units;

    type
    TGlobalType1 = (gtFirst, gtSecond);
    ...

    TGlobalClass1 = Class
    ...
    private
    ...
    { Private declarations }
    public
    ...
    { Public declarations }
    end;
    ...

    var
    MyVar1: integer;
    MyVar2: string;
    ....

    function MyGlobalProcedure1;
    ...

    implementation

    //********************************

    Constructor TGlobalClass1.create;
    begin
    ...
    end;

    procedure MyGlobalProcedure;
    begin
    ...
    end;

    end.

  7. #7
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    اینم یک روش خوبه که اتفاقا منم تو کارهام ازش استفاده میکنم.

  8. #8
    سوال خوب.

    جواب ها عالی و کلاسیک :)

    دوستان متشکرم.

  9. #9
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    با سلام
    با روش singlton فکر کنم خیلی از برنامه نویسها اشنا باشند، من به این صورت تعریف میکنم:
    نوعی از پیاده سازی کلاسهای میباشد که شما در هنگام استفاده از متدها نیازی به object(که همان instance ایی از کلاس میباشد) ندارید ، متدی که شما به این صورت استفاده میکنید از نوع متدهای class میباشد.

    الان بیش از این وقت ندارم انشاء الله بعد از نهار و نماز اگر زنده ماندم یک مثال برای درک بهتر آن خدمتتان خواهم نوشت که هم روش singlton در ان باشد و هم متغییرهای نوع Global


    ..... گلوبال اینه که یه یونیت جدید به نام GlobalVars.pas...
    این روش را که بنده هم یک توضیح مختصری داده بودم

    به امید دیدار
    ... چه بگویم که غم از دل برود چون تو بیایی

  10. #10
    VIP آواتار hr110
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    ایران - تهران
    پست
    1,460
    با سلام؛

    برای آنکه مطلب واقعاً کاربردی باشد، در ذیل یکی از کلاسهایی که در تمامی پروژه ها از ان استفاده میکنم را خدمتتان معرفی مینمایم، کلاس مربوطه به Accounting پروژه:

    unit Users;

    interface

    uses
    Classes, Forms, Controls;

    type

    TUser = class(TComponent)
    private
    procedure SavePassword(s:string);
    function GetPassword:string;
    public
    FID : string;
    FPassword : string;
    class function getUser : TUser;
    property Password:string read GetPassword Write SavePassword;
    end;

    var
    User : TUser;

    implementation
    uses
    Dialogs,Sysutils;

    {TUser}

    function TUser.GetPassword: string;
    begin
    Result:=FPassword;
    end;

    procedure TUser.SavePassword(s: string);
    begin
    FPassword:=S;
    // Format('update users set password=%S where ID=%s',[QuotedStr(FPassword),QuotedStr (FID)]);
    end;

    class function TUser.getUser: TUser;
    begin
    if User=nil then
    begin
    if MessageDlg('Please type Username & Password : ',mtConfirmation,mbOKCancel,0)<>mrOK then
    begin
    Application.Terminate;
    end
    else
    begin
    User:=TUser.Create(nil);
    //ID:='hr';
    User.Password:='110';
    end;
    end;
    Result:=User;
    end;

    end.


    یک مثال از روش استفاده از این کلاس، توجه کنید که تنها خط زیر کافی است و نیازی به create و..... ندارد:

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Caption:=TUser.GetUser.Password;
    end;


    مسئله اصلی روش نوشتن کد متد getUser میباشد(چون singlton ابتدا در جاوا مطرح شده است بنابراین نام این متد را به روش جاوایی نوشتم :idea: ) در پروژه شما در اولین فراخوانی این متد ابجکت ایجاد شده و در دفعات بعد تنها اینستن آن برگردنده میشود، بنابراین کافی است که در اولین فرمی که یکی از اجزاء کلاس user (در این مثال تنها جزء password پیاده سازی شده است و مابقی فیلدها را نیز خودتان گسترش دهید) صدا شود ، فرم مربوط به لاگین نیز به کاربر نمایش داده شده و کاربر باید به سیستم وارد شود و در غیر اینصورت از برنامه خارج خواهد شد، بنابراین کافی است مثال بالا را در oncreateform فرم اصلی قرار دهید( :?: )



    در این مثال من سعی کرده ام که کلمه عبور کاربر را که میتواند در یک پروژه متغییر global باشد را با استفاده از یک کلاس پیاده سازی کنم، این روش همانطور که گفتم یک روش پدر و مادر دار است. توجه شما را به نحوه تعریف این متغییر در کلاس هم جلب میکنم. همانطور که مشاهده میشود از property و دو متد با نامهای getpassword و setpassword استفاده شده است.
    روش تعریف یک متغییر در کلاس به این روش، یک روش مطمئن یا safe میباشد چرا که اگر متدهای read و write آن پراپرتی صحیح و جامع پیاده سازی شود، در هنگام استفاده از متغییر (چه خواندن مقدار و چه تغییر مقدار آن) از اشتباهات و خطاها جلوگیری شده و میتوان مطمئن از متغییرهای global در هرکجای سیستم استفاده نمود و اعضای دیگر تیم برنامه نویسی هم بدون اینکه وارد جزئیات شوند و یا بخواهند که تمام کنترلها و ... را در هنگام استفاده از آن داشته باشند میتوانند از سورسهای شما استفاده کنند. برای درک مسئله شما فرض کنید که قرار است در پروژه شما کلمه عبور کاربران حداقل 3 کاراکتر باشد و اگر طول کلمه عبور کمتر از 3 کاراکتر بود سریعاً از کاربر خواسته شود که کلمه عبور صحیح را وارد کند؛ پر واضح است که شرط اول را باید در متد write و شرط دوم را در متد read پراپرتی کلمه عبور چک کرده و سورس کد مروطه را بنویسیم. حال با این کار هر کدامیک از برنامه نویسان تیم(از جمله خودتان) بدون واهمه میتوانید از این کلاس استفاده نماید و مطمئن باشید که خواسته کارفرمایتان در مورد کلمه عبور اجرا شده است.




    امیدوارم که این مطلب خوانا و موثر واقع شده باشد.
    ... چه بگویم که غم از دل برود چون تو بیایی

تاپیک های مشابه

  1. کارباglobal.asx
    نوشته شده توسط h.alizadeh در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: پنج شنبه 08 شهریور 1386, 15:53 عصر
  2. خطای فایل global
    نوشته شده توسط brida_kh در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: شنبه 23 تیر 1386, 13:07 عصر
  3. متغیر Global
    نوشته شده توسط emad4000 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: دوشنبه 09 مرداد 1385, 15:16 عصر
  4. متغیر Global و انتخاب چاپگر
    نوشته شده توسط only_crystal_reports در بخش گزارش سازی با Crystal Report
    پاسخ: 5
    آخرین پست: چهارشنبه 10 اسفند 1384, 00:27 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •