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

نام تاپیک: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

  1. #1

    Wink چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    فرض کنید من 40 تا تایمر توی یک فرم دارم
    حالا می خوام با تایمر 41 ام این 40 تا تایمر رو تو مثلاً بازه های 10 ثانیه ای enable/disable کنم
    و همه تایمر ها هم اسامی ترتیبی دارن
    چطوری میشه این کار رو انجام داد ؟
    منظورم یه همچین چیزی هست
    for i:= 1 to 40 do
    begin
    timer[i] := enable;
    end;


    البته من الان دارم از این روش استفاده می کنم
    for i:= 0 to ComponentCount-1 do
    begin
    if Components[i] is TTimer then
    begin
    if ((Components[i] as TTimer).name = 'Timer'+IntToStr(i)) then
    (Components[i] as TTimer).Enable:= True;
    end;
    end;

    اما چون آبجکت های روی فرمم خیلی زیاد هست این حلقه زیادی برنامه منو کند کرده
    اگه راه بهتری سراغ دارید راهنمایی کنید!

  2. #2

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    این کدی که نوشتم بهینه تره ، ولی در کل کار درستی نیست 40 تا تایمر رو اینطوری فعال و غیر فعال کنی کنی !
    بگو میخوای چی کار کنی ، شاید راه بهتری هم باشه .

    var
    i:Byte;
    begin
    for i:=0 to Form1.ComponentCount-1 do
    if TTimer(Components[i]).Name = 'Timer'+IntToStr(i) then
    TTimer(Components[i]).Enabled:=True
    آخرین ویرایش به وسیله Felony : شنبه 21 آذر 1388 در 06:56 صبح

  3. #3
    کاربر دائمی آواتار مصطفی ساتکی
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    www.7khatcode.com
    پست
    1,193

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    ین کدی که نوشتم بهینه تره ، ولی در کل کار درستی نیست 40 تا تایمر رو اینطوری فعال و غیر فعال کنی  کنی !
    بگو میخوای چی کار کنی ، شاید راه بهتری هم باشه .

    جناب silversoft بین کد شما و کدی که vahid64 نوشته بود چه فرقی وجود داره.
    شما می تونی از SetTimer , KillTimer به طور مستقیم استفاده کنی

  4. #4

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    نقل قول نوشته شده توسط Delphi_CAT مشاهده تاپیک
    ین کدی که نوشتم بهینه تره ، ولی در کل کار درستی نیست 40 تا تایمر رو اینطوری فعال و غیر فعال کنی  کنی !
    بگو میخوای چی کار کنی ، شاید راه بهتری هم باشه .

    جناب silversoft بین کد شما و کدی که vahid64 نوشته بود چه فرقی وجود داره.
    شما می تونی از SetTimer , KillTimer به طور مستقیم استفاده کنی
    یعنی به نظر شما فرقی نداره ؟!
    به نظر شما کدوم کد بهینه تره ؟
    ایشون تو کدشون یک بار چک کردن که شئ تایمر هست ، اگر بود اسمش = اسم مورد نظر هست و اگر بود فعالش کنن .

    به نظرتون بین 2 تا شرط با 1 شرط تفاوتی نیست ؟

  5. #5
    کاربر دائمی آواتار Hamid.Kad
    تاریخ عضویت
    آبان 1385
    محل زندگی
    پُشت هیچستانم...
    پست
    349

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    به نظر شما کدوم کد بهینه تره ؟
    البته لغت "بهینه تر" یک لغت اشتباهه که امروزه خیلی رایج شده! چون بهینه صفت عالی هست

    بگو میخوای چی کار کنی ، شاید راه بهتری هم باشه .
    منم موافقم.
    ولی اگر راه دیگری نداره بنظرم اگه تایمرها رو آرایه در نظر بگبرید و با آرایه کار کنید سرعت بیشتر میشه. مثل کد اولی که خودتون نوشتید.
    آخرین ویرایش به وسیله Hamid.Kad : شنبه 21 آذر 1388 در 13:26 عصر

  6. #6
    کاربر دائمی
    تاریخ عضویت
    فروردین 1388
    محل زندگی
    ایران سرای من است
    پست
    2,655

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    من جای شماها بودم 40 آرایه از نوع bool می ساختم و ture یا false بودن را داخل همه تایمرها بررسی میکردم و با true بودن اجازه عملیات را به پروسه های تایمر میدادم.(و این سریعترین و بهترین کاری هست که میشه کرد)
     
    var
    IsEnable : arrya[1..40] of boolean;

    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    if IsEnable[1] = true then
    begin
    // کدهای برنامه تایمر اول
    end;
    end;
    .
    .
    .
    procedure TForm1.Timer40Timer(Sender: TObject);
    begin
    if IsEnable[40] = true then
    begin
    // کدهای برنامه تایمر چهلم
    end;
    end;


    procedure TForm1.Timer41Timer(Sender: TObject);
    begin
    IsEnable[40] := not IsEnable[40] ; // فعال و غیر فعال سازی
    end;


  7. #7

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    من که گفتم می خوام چی کار کنم!حالا تایمر نه یه آبجکت دیگه!
    در مجموع منظورم اینه که فرضاً توی یه فرم 1000 تا آبجکت باشه 200 تاش مثل هم باشن من می خوام یه پروپرتی اون 200 تا رو تغیر بدم!
    اگه قرار استفاده از این کد باشه میره 1000 تا آبجکت رو هم بررسی می کنه که این زمان می بره و کار منو مختل می کنه!

  8. #8
    کاربر دائمی آواتار zidane
    تاریخ عضویت
    آذر 1385
    محل زندگی
    مشهد - خيابان دلفي - پلاک XE5
    سن
    38
    پست
    141

    نقل قول: چگونگی انجام دادن یک عمل یکسان روی تعداد بالا از یک آبجکت در فرم

    همان طور که دوستان گفتند بايد براي اين تعداد زياد، آرايه بسازيد

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

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