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

نام تاپیک: چک کردن ایجاد فرم

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

    چک کردن ایجاد فرم

    سلام
    می خواستم بدوننم چه طور در زمان اجرا میتونیم متوجه بشیم یک فرم قبلا در برنامه Create شده یا نه.

  2. #2
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    فرض کنید متغیری که از نوع فرم مورد نظر تعریف شده، Form2 باشد:
    var Form2:TForm2;

    در اینصورت میتوانید با بررسی مقدار متغیر فوق چک کنید که این فرم ایجاد شده یا نه:
    if Form2=Nil then showmesseage('Form2 is not created')
    else showmesseage('Form2 is created');

  3. #3
    البته با اجازه بزرگترها مخصوصا جناب Delphi assistant, بد نیست یک کلام هم از مادر عروس !بشنویم:
    این شرطی که شما گذاشتید یعنی مقایسه با nil برای بار اول درست کار میکنه. اما اگه فرض کنیم فرم یکبار ایجاد شده و بعد کاربر از اون خارج شده و ما حتی در واقعه OnClose اون نوشته باشیم: action:= cafree که فرم از حافظه خارج بشه باز هم شرط فوق برای ما درست جواب نمیده (True برمیگردونه در صورتی که متغیر فرم الان قابل استفاده نیست و باید create بشه).
    در این مورد من 2 تا راه پیشنهاد میکنم. تا نطر بزرگان چی باشه !! :
    یکی اینکه واقعه OnClose اینطوری نوشته بشه:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action:= caFree;
    Form1:= nil;
    end;

    راه دوم:
    function IsFormCreated (const FormName: string): Boolean;
    var
    i: integer;
    begin
    Result:= False;
    for i:= 0 to Screen.FormCount-1 do
    begin
    if Screen.Forms[i].Name= FormName then
    begin
    Result:= True;
    break;
    end
    end;
    end;

  4. #4
    البته با اجازه بزرگترها مخصوصا جناب Delphi assistant, بد نیست یک کلام هم از مادر عروس !بشنویم:
    این شرطی که شما گذاشتید یعنی مقایسه با nil برای بار اول درست کار میکنه. اما اگه فرض کنیم فرم یکبار ایجاد شده و بعد کاربر از اون خارج شده و ما حتی در واقعه OnClose اون نوشته باشیم: action:= cafree که فرم از حافظه خارج بشه باز هم شرط فوق برای ما درست جواب نمیده (True برمیگردونه در صورتی که متغیر فرم الان قابل استفاده نیست و باید create بشه).
    در این مورد من 2 تا راه پیشنهاد میکنم. تا نطر بزرگان چی باشه !! :
    یکی اینکه واقعه OnClose اینطوری نوشته بشه:
    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    Action:= caFree;
    Form1:= nil;
    end;

    راه دوم:
    function IsFormCreated (const FormName: string): Boolean;
    var
    i: integer;
    begin
    Result:= False;
    for i:= 0 to Screen.FormCount-1 do
    begin
    if Screen.Forms[i].Name= FormName then
    begin
    Result:= True;
    break;
    end
    end;
    end;

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

    البته من با این فرض اون کد رو نوشتم که از روش اول بیان شده توسط شما استفاده شده باشه.

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

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