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

نام تاپیک: create کردن آرایه از جنس button

  1. #1
    کاربر دائمی آواتار mohammady2
    تاریخ عضویت
    مهر 1386
    محل زندگی
    VS
    پست
    154

    Tick create کردن آرایه از جنس button

    create کردن آرایه از جنس دکمه ==> لطفا اگر اطلاعی در مورد نحوه create کردن یک آرایه از جنس button دارید من رو راهنمایی کنید .ممنون

  2. #2
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    برای تعریف آرایه از دکمه به شکل زیر عمل کنید.

    var
    a :Array[1..2] OF TButton;

    و سپس به شکل زیر Create کنید.

    a[1] := TButton.Create(Owner);

    موفق باشید

  3. #3
    آرایه رو Create نمی کنند، هر یک از اعضای آن را Create می کنند:

    var
    i : integer;
    A : array [1..5] of TButton;
    begin
    for i:= 1 to 5 do
    A[i] := TButton.Create(Form1);
    end;

    البته برای نگه داشتن لیستی از Object ها روش های بهتری هست مثل TComponentList یا TObjectList در یونیت Contnrs.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  4. #4
    کاربر دائمی آواتار MNosouhi
    تاریخ عضویت
    مرداد 1384
    محل زندگی
    اصفهان
    پست
    883
    برنامه مورد نظر شما رو در تاپیک قبلی شما گزاشته ام. به لینک زیر مراجعه کنید :
    https://barnamenevis.org/showthread.php?t=89227

  5. #5
    کاربر دائمی
    تاریخ عضویت
    آذر 1383
    محل زندگی
    تهران
    پست
    113
    اینجور اجزا برا کاری ساخت به یک مالک(Owner) نیاز دارند که عمر آنها وابسته به عمر مالک میشود.
    و علاوه بر مالک به یک زمینه برای نمایش به نام Parent احتیاج دارند. بهتره هر کدوم از درایه ها رو ینجوری بسازی
    a:=TButton.Create(Form1);
    a.Parent:=Form1;

  6. #6
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط robochoo مشاهده تاپیک
    اینجور اجزا برا کاری ساخت به یک مالک(Owner) نیاز دارند که عمر آنها وابسته به عمر مالک میشود.
    و علاوه بر مالک به یک زمینه برای نمایش به نام Parent احتیاج دارند. بهتره هر کدوم از درایه ها رو ینجوری بسازی
    a:=TButton.Create(Form1);
    a.Parent:=Form1;
    دوست عزیز
    فکر نمی کنید نگه داشتن این نوع Button از نگه داستن آرایه خیلی سختر است و همچینین برای نامگذاری آن دچار مشکل می شوید.
    موفق باشید

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آذر 1383
    محل زندگی
    تهران
    پست
    113
    فکر نمی کنم parent با اسم جزء تداخل داشته باشه.
    تا جایی که میدونم Parent برای معرفی جد و مادر اجزا استفاد همیشه.
    اجزایی که قابلیت نمایش را دارند باید برای نمایش تعلق آن ها به جزء دیگه معرفی بشه. اگه Parent معرفی نشه برای نمایش دادن دچاره مشکل میشی.
    فکر کنم اجزایی که توسط windows به برنامه داده میشه مثه کلید، Parent داشته باشند.

  8. #8
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    دوست عزیز منظور من این بود که نگه داشتن لیست Button ها در یک آرایه راحت است و اگر بخواهی برای تعریف هر Button از یک متغییر استفاده کنی خیلی با مشکل برخود می کنی.
    حتی اگر بخواهی لیست Button هایی که در آرایه تعریف کرده ای را نمایش بدهی باید Parent مشخص شود.
    موفق باشید

  9. #9

    با سلام

    من مشکلی مشابه همین دارم اما با راه حلهای شما مشکل حل نشد.
    فرض کنید تعداد 40 عدد panel وجود دارد برای آنکه بخشی از این پنلها نمایش داده شود باید چه کار کرد .
    مثلا: از پنل 15 تا 38 را می خواهیم نمایش دهیم.مصداق آن در ایجاد یک تقویم است .اول هر ماه مشخص نیست چه روزی است و برای هر ماه یک پنل ممکن است visible شود.
    لطفا اگر میتوانید به من کمک کنید.

  10. #10
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط h.tehrani مشاهده تاپیک
    من مشکلی مشابه همین دارم اما با راه حلهای شما مشکل حل نشد.
    فرض کنید تعداد 40 عدد panel وجود دارد برای آنکه بخشی از این پنلها نمایش داده شود باید چه کار کرد .
    مثلا: از پنل 15 تا 38 را می خواهیم نمایش دهیم.مصداق آن در ایجاد یک تقویم است .اول هر ماه مشخص نیست چه روزی است و برای هر ماه یک پنل ممکن است visible شود.
    لطفا اگر میتوانید به من کمک کنید.
    دوست عزیز شما باید در یک صفحه 6*6 از Label ها درست کنید و سپس با توجه به شروع هر ماه این Labelها را مقدار دهی کنید و نیازی به Create کردن فکر نمی کنم باشد.
    موفق باشید

  11. #11

    با تشکر

    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    دوست عزیز شما باید در یک صفحه 6*6 از Label ها درست کنید و سپس با توجه به شروع هر ماه این Labelها را مقدار دهی کنید و نیازی به Create کردن فکر نمی کنم باشد.
    موفق باشید
    ببینید شاکله ی نرم افزار ساخته شده .40 پنل موجود است که در هر پنل تعدادی comboboxوeditو... وجود دارد این برای آن است که اطلاعات مربوط به همان روز وارد شود.
    اما مشکل اینجاست که من نمیتوانم همین createکه شما برنامه آنرا نوشتید تبدیل به خواصیت visibleکنم واین عمل را برای پنل هایی که در آرایه ذخیره کرده ام اعمال کنم. با تشکر.

  12. #12
    اینجا رو ببینید:
    https://barnamenevis.org/showpo...6&postcount=11


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  13. #13

    با تشکر

    اما هیچکدام از این جوابها مربوط به مشکل من نیست.مشکل نه تقویم شمسی است نه ...** مشکل خیلی واضحه همین کاری که برای create کردن انجام می دهیم(هر تعداد پنل که می خواهیم نمایش میدهیم) چطور میشود برای دستور visible انجام داد . پنلها از قبل ساخته شده اند و وجود دارند من فقط می خوام نشان دادن یا نشان ندادن آنها را کنترل کنم .


    از راهنمایی های شما متشکرم اما اگر امکان دارد در این زمینه به من کمک کنید .

  14. #14
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    اگر می خواهی Object هایی را که Create کرده ای نمایش دهید باید اینجوری عمل کنی.

    a[1].Parent := Form1;
    a[1].Visible := True;

    موفق باشید

  15. #15
    کاربر دائمی آواتار Rambod
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    سن
    45
    پست
    404
    یعنی هیچ جوره نمیشه تو دلفی در هنگام Design آرایه‌ای از کنترل‌ها ساخت؟ تو VB این کار خیلی راحته و با مقداردهی خصوصیت Index میشه این کار رو کرد.

  16. #16

    با تشکر

    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    اگر می خواهی Object هایی را که Create کرده ای نمایش دهید باید اینجوری عمل کنی.

    موفق باشید
    باز هم میگم قرار نیست چیزی create بشه که ما نمایش بدیم یا نه. همه چیز از قبل طراحی شده .در نظر بگیرید 48 پنل به صورت 6*7 طراحی شده که داخل هر پنل تعدادی object وجود دارد . حالا: ما میخواهیم ،مثلا از پنل4 تا پنل40 نمایش داده شود.
    فکر میکنم از این واضحتر دیگه نمیشه.

  17. #17
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    لینک زیر را نگاه کنید.
    کل Editهای صفحه را به ترتیب می خواند.از روی نام کامپونتها می توانی تشخیص دهی کدام را نمایش دهی.مثلا نام کامپونتها را Edit_01 تا Edit_40 بگذارید و با دستور Copy قسمت عددی را جدا کرده و اگر داخل رنج بود نمایش دهید.
    https://barnamenevis.org/showth...ComponentCount
    موفق باشید

  18. #18

    احسنت

    اما چطور میشه با دستور copy مقدار عددی را جدا کرد؟در ضمن کد زیر رو هم نوشتم ولی نمیتونم کاملش کنم .
    For i := 0 To ComponentCount Do
    IF Components[i] Is Tpanel Then
    Begin
    if (Components[i] as Tpanel).visible= then
    End

  19. #19
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط h.tehrani مشاهده تاپیک
    اما چطور میشه با دستور copy مقدار عددی را جدا کرد؟در ضمن کد زیر رو هم نوشتم ولی نمیتونم کاملش کنم
    خوب مثلا نام کامپونت را با Edit_شروع کن و سپس کاراکتر 6 و7 را عدد بگذار.ماننده

    Edit_01

    سپس به شکل زیر عمل کن.

    Copy('Edit_01',6,2);

    موفق باشید

  20. #20

    با سلام

    مشکل پروژه حل نشد و در نهایت قالب پروژه را عوض کردم.
    در طول این پروژه من با ناتوانی های دلفی در ضمینه های مختلف خیلی در گیر بودم.
    وتوصیه میکنم قبل از نوشتن هر برنامه ابتدا از توانایی های برنامه ای که با آن کار میکنید خوب مطمئن شوید.در غیر این صورت مثل من چند هفته تلاشتونو باید پاک کنید.
    تشکر میکنم از تمامی دوستان .

  21. #21
    در طول این پروژه من با ناتوانی های دلفی در ضمینه های مختلف خیلی در گیر بودم.
    وتوصیه میکنم قبل از نوشتن هر برنامه ابتدا از توانایی های برنامه ای که با آن کار میکنید خوب مطمئن شوید.
    مشکل از دلفی نبود، از شما بود. من پیشنهاد میکنم قبل از شروع یک پروژه:
    1- با زبان و محیط برنامه نویسی مورد نظر خودتون کاملا آشنا بشید.
    2- قبل از پیاده سازی یک امکان جدید، توانایی های خود در پیاده سازی آن را کاملا بررسی کنید.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  22. #22
    1- با زبان و محیط برنامه نویسی مورد نظر خودتون کاملا آشنا بشید.
    2- قبل از پیاده سازی یک امکان جدید، توانایی های خود در پیاده سازی آن را کاملا بررسی کنید.
    شما درست میگید اما این در صورتیه که مشکل پس از 2 هفته پیگیری و جستجو حل بشه .اما همین طور که میبینید نه شما و دوستان تونستید این مشکل رو حل کنید،و نه تمام کسانی که در اطراف من متخصص برنامه نویسی بودند تونستند این مشکل رو حل کنن وعلاوه بر اینها استاد راهنمای من در این پروژه برای این که مشکله من رو حل کنه پیشنهاد عوض کردن قالب پروژه رو داد و از حل مشکل ابراز بی اطلاعی کرد .که البته راهش با سلیقه من اصلا جور در نمیاد! به دلایلی که ذکر شد به این نتیجه رسیدم که اینجا دیگه دلفی کم آورده!
    شایدم حرف شما به احتمال ضعیفی درست باشه برای همین، صفحه پروژه خودم رو برای دانلود در زیر گذاشتم .لطفا نگید که چرا از این راه برای رسیدن به هدفت میری چون با راه دیگه ای موافق نیستم.توجه کنید که میخوام تاریخی مه از کاربر گرفته میشه تقویم زیر نمایش داده بشه و اطلاعات مورد نیاز از کاربر گرفته بشه.ودر نهایت حقوق کارمند محاسبه بشه.
    https://barnamenevis.org/attach...1&d=1204757323
    فایل های ضمیمه فایل های ضمیمه

  23. #23
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط h.tehrani مشاهده تاپیک
    شما درست میگید اما این در صورتیه که مشکل پس از 2 هفته پیگیری و جستجو حل بشه .اما همین طور که میبینید نه شما و دوستان تونستید این مشکل رو حل کنید،و نه تمام کسانی که در اطراف من متخصص برنامه نویسی بودند تونستند این مشکل رو حل کنن وعلاوه بر اینها استاد راهنمای من در این پروژه برای این که مشکله من رو حل کنه پیشنهاد عوض کردن قالب پروژه رو داد و از حل مشکل ابراز بی اطلاعی کرد .
    ولی باز هم این دلیل به کم توانی و با ناتوانی دلفی نیست که در بالا علی کشاورز هم یاد کرد.
    عوض کردن صورت مسئله کاری است که اکثر اساتید ما می کند تا از سوالاتی که جوابهای آن را باد نیستند فرار کنند.
    اگر دوستان هم نتوانستد کمک کنند شاید روش حل مسئله روش درستی نبوده و باید از روش دیگری استفاده کرد.
    موفق باشید

  24. #24
    اما همین طور که میبینید نه شما و دوستان تونستید این مشکل رو حل کنید،و نه تمام کسانی که در اطراف من متخصص برنامه نویسی بودند تونستند این مشکل رو حل کنن وعلاوه بر اینها استاد راهنمای من در این پروژه برای این که مشکله من رو حل کنه پیشنهاد عوض کردن قالب پروژه رو داد و از حل مشکل ابراز بی اطلاعی کرد .
    وقتی شما نمی تونید مشکلی که دارید درست توضیح بدید، انتظار دارید دیگران چیکار کنند؟!
    از نظر دلفی برای کار شما باید امکان تعریف لیستی از اشیا فراهم باشه، که هست. از طرفی امکان تغییر خصوصیات این اشیاء هم وجود داشته باشه، که داره. اینجا مشکل اینه که شما بلد نیستید که چطور این کار رو انجام بدید و فقط هم میگید این راه حل نیست، آن راه حل نیست. مثلا به پست های خودتون در این تاپیک نگاه کنید:

    فرض کنید تعداد 40 عدد panel وجود دارد برای آنکه بخشی از این پنلها نمایش داده شود باید چه کار کرد .
    مثلا: از پنل 15 تا 38 را می خواهیم نمایش دهیم.مصداق آن در ایجاد یک تقویم است .اول هر ماه مشخص نیست چه روزی است و برای هر ماه یک پنل ممکن است visible شود.
    اما مشکل اینجاست که من نمیتوانم همین createکه شما برنامه آنرا نوشتید تبدیل به خواصیت visibleکنم واین عمل را برای پنل هایی که در آرایه ذخیره کرده ام اعمال کنم.
    خب، تا اینجا کی میتونه کمک کنه؟! فقط مشخص شده که شما نتونستید مقدار خصوصیت Visible چند کنترل را تنظیم کنید. چرا نتونستید مشخص نیست، چون کاربران باید حدس بزنند شما از چه راهی رفتید. اکثرا هم به اندازه کافی گرفتار هستند که فرصت حدس زدن مشکل شما را نداشته باشند. وقتی مشکل مشخص نشده، جواب کلی میشه اونی که در پست شماره 14 گرفتید. در پست بعد از آن شما باز هم توضیحی به توضیحات قبلی اضافه نمی کنید، فقط همان توضیح را تکرار می کنید، Syndrome این بار راه حل دیگه ایی ارائه میکنه که شما هم قبول می کنید. اما در پست 18 کلا مسیر سوال را عوض می کنید و درباره کار کردن با تابع Copy می پرسید. در پست 19 درباره تابع Copy برای شما یک مثال زده میشه. در پست 20 انگار که اصلا مثالی برای Copy زده نشده و قبل از آن در پست 18 خودتان به راه حل ارائه شده "احسنت" نگفتید(!) مجددا ار حل نشدن مشکلتان گله مند هستید در حالی که باز هم اطلاعات جدیدی ارائه نمی کنید.

    واقعا فکر می کنید چه کمکی باید به شما صورت می گرفت؟! کل سوالات شما این بود:
    1- چطور مقدار Visible تعدادی Panel را تغییر بدیم.
    2- چطور از تابع Copy استفاده کنیم.

    جواب هر دو سوال هم در تاپیک داده شد. اگر جوابها به کار شما نیامد، علتش عدم توانایی شما در بیان مشکل بود.

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


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  25. #25

    unit vhozoor;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ExtCtrls, StdCtrls, Grids, DBGrids, DB, ADODB, Contnrs;

    type
    Thozoor = class(TForm)
    {Components list is omitted for simplicity}
    ...
    procedure Button4Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    private
    MyPanels : TComponentList;

    function IsMyPanel(control : TControl): Boolean;
    procedure AddPanels;
    procedure SetPanelVisibility(Index : integer; Visible: Boolean);
    public
    { Public declarations }
    end;

    var
    hozoor: Thozoor;

    implementation

    uses Unit1;

    {$R *.dfm}

    procedure Thozoor.FormCreate(Sender: TObject);
    begin
    MyPanels := TComponentList.Create(False);
    AddPanels;
    end;

    procedure Thozoor.FormDestroy(Sender: TObject);
    begin
    MyPanels.Free;
    end;

    //Check Name property for the given control to see if it is MyPanel.
    function Thozoor.IsMyPanel(control: TControl): Boolean;
    begin
    //A panle is MyPanle if its name follows this pattern: pX
    //X is a number from 1 to 35.
    Result := (Length(Control.Name) < 4) and (Copy(Control.Name,1,1) = 'p');
    end;

    //Sort the list according to panel names
    function SortMyPanels(Item1, Item2: Pointer): Integer;
    begin
    Result := CompareText(TComponent(Item1).Name, TComponent(Item2).Name);
    end;

    //Adds panels to MyPanels list
    procedure Thozoor.AddPanels;
    var
    j : integer;
    begin
    for j := 0 to ControlCount-1 do
    if (Controls[j] is TPanel) and (IsMyPanel(Controls[j])) then
    MyPanels.Add(Controls[j]);
    MyPanels.Sort(@SortMyPanels);
    end;

    //Sets visibility of a given panel in MyPanels list
    procedure Thozoor.SetPanelVisibility(Index: integer; Visible: Boolean);
    begin
    (MyPanels[Index] as TPanel).Visible := Visible;
    end;
    مثال:

    procedure Thozoor.Button1Click(Sender: TObject);
    var
    i : integer;
    begin
    for i := 1 to 7 do
    SetPanelVisibility(i,False);
    end;
    توضیحی بیشتر از اونی که توی خود کد نوشتم، نمیدم!


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  26. #26

    با تشکر

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

  27. #27
    چرا در برنامه پنلهای 1تا35 در نظر گرفته شده؟ وقتی برنامه اجرا میشه پنل های p1 تا p9 کار نمیکنه شاید مشکل از سُرت برنامه باشه .لطفا اگر کسی میتونه کمک کنه.

  28. #28
    چرا در برنامه پنلهای 1تا35 در نظر گرفته شده؟
    چون من اول یه آرایه 35 تایی برای نگه داری Object ها تعریف کرده بودم که بعدش منصرف شدم. برای بدست آوردن تعداد اشیای موجود در لیست:
    MyPanels.Count

    پنل های p1 تا p9 کار نمیکنه شاید مشکل از سُرت برنامه باشه
    چون سورت حرف به حرف مقایسه میکنه در نتیجه مقادیری مثل 11 یا 12 که با 1 شروع میشند قبل از مقادیر 2و 3 و... قرار میگیرند که با مقادیری بزرگتر از یک شروع میشند. باید نام کنترلهایی که عددشون تک رقمی هست را بجای 1و2 و3 و 4 و... با 01و02و03و04 و...جایگزین کنید تا سورت ترتیب آنها را درست نمایش بده.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  29. #29
    مشکلات کار با پنل ها حل شد ولی در پیمایش روی edit comdobox label مشکل دارم در کدی که شما نوشتید نمیتواند کامپوننت های بالا را پیدا کند و ذخیره کند.چه باید کرد؟

  30. #30
    نمیتواند کامپوننت های بالا را پیدا کند و ذخیره کند.
    یعنی چی؟!!


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  31. #31
    ببینید من در هر پنل یک edit یکcomboboxویکlabel قرار دادم اما نمیتوانم کاری که شما برای پنل ها انجام دادید برای آنها هم انجام دهم مثلا در کد زیر
    var
    j : integer;
    begin
    for j := 0 to ControlCount-1 do
    if (Controls[j] is TPanel) and (IsMyPanel(Controls[j])) then
    MyPanels.Add(Controls[j]);
    MyPanels.Sort(@SortMyPanels);
    میخواهم لیبل ها تاریخ آن روز را نمایش دهند اما در کد بالا اصلا لیبلی پیدا نمیکنه که وارد حلقه بشه .ببینید پنل ها parent لیبل و... هستند میخواهم بدانم چطور میشود اطلاعاتی که کاربر در ادیتها وارد میکند را بخوانم یا چطور caption لیبل ها را مقدار دهی کنم.

  32. #32
    همونطور که داریم:
    Controls[j] is TPanel

    همونطور هم می تونیم داشته باشیم TEdit یا TLabel.
    همونطور هم می تونیم داشته باشیم:
    TLabel(Controls[j]).Caption := 'Test';


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  33. #33
    در طول اجرای، برنامه اصلا وارد شرط زیر نمیشود.باز هم میگم لیبل ها زیر مجموعه ی پنلها هستند این مشکلی ایجاد نمیکنه ؟
    for q := 0 to ControlCount-1 do
    begin
    if (Controls[q] is Tlabel) and (IsMyll(Controls[q])) then
    Myll.Add(Controls[q]);
    end;

  34. #34
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    Trace کن ببین وارد حلقه می شودیا نه؟
    ComponentCount-1 امتحان کن ببین درست می شود یا نه؟
    اگر نشود برنامه را اینجا قرار بده تا تست شود.
    موفق باشید

  35. #35
    trace کردم وارد شرط نمیشه.
    فایل های ضمیمه فایل های ضمیمه

  36. #36
    سلام .
    یه برنامه خیلی وقت پیشا نوشته بودم که نرسیدم تکمیلش کنم .
    شاید خیلی جاهاشو بد کد نویسی کرده باشم و خیلی جاها کدای زائدی باشه و شاید اصلا بدرد نخوره .
    اما میذارم چون نسبت به چیزایی که اینجا یاد گرفتم تعهداتی دارم .


    procedure TMainForm.butclick(sender : TObject );
    var
    btname : string ;
    begin
    btname := TButton(sender).Name;
    ReminderForm.Edit_RemindeDate.Text := inttostr(CurrentYear) + '/' + copy(btname,3,2) + '/' + copy(btname,6,2);
    ReminderForm.ShowModal ;
    end;

    Procedure TMainForm.CreateButton ; // ÑæÓå ÓÇÎÊ Ï˜ãå åÇ
    var
    counter : integer ;
    //mybtn : TfcImageBtn ;
    ButtonDate,ButtonAllYearDate : string ;
    Begin
    try
    counter := 0 ;
    for I := 1 to 5 do
    Begin
    for L := 7 downto 1 do
    Begin
    mybtn[strtoint(ReturnValidMountNumber(PageCount))][ReturnVildLPosistion(I*L)] := TfcImageBtn.Create(MountPage.Pages[pagecount]);
    //-----------
    with mybtn[strtoint(ReturnValidMountNumber(PageCount))][ReturnVildLPosistion(I*L)] do
    Begin

    Parent := MountPage.Pages[pagecount] ;
    OnClick := butclick;
    Caption := IntToStr(counter + 1) ;
    Height := 32 ;
    Width := 32 ;
    Font.Size := 10 ;
    BiDiMode := bdRightToLeft ;
    Font.Name := 'Tahoma' ;
    Font.Style := [fsBold] ;
    Font.Color := clBlack ; // ÑæÒåÇí ÛíÑ ÊÚØíá
    // Effects
    TextOptions.Style := fclsOutline ;
    TextOptions.OutlineColor := clWhite ;
    //==
    Image.LoadFromFile('C:\button\testn.bmp');
    ImageDown.LoadFromFile('C:\button\testn2.bmp');
    // ÌãÚå åÇ
    IF LeftCounter = 30 Then
    Begin
    Font.Color := clRed ;
    Image.LoadFromFile('C:\button\testtatiil.bmp');
    End ;
    //---
    Left := SetLeftPos ;
    Top := TopCounter * 28 ;
    ButtonPosition[PageCount][ReturnVildLPosistion(i*L)] := Left ;
    //==============
    Name := 'b_' + ReturnValidMountNumber(PageCount) + '_' + ReturnValidDayNumber(counter + 1) ;

    //====== ÑÝÊä ÊÇÑíÎ ÇãÑæÒ æ ãÔÎÕ ÓÇÒí ========
    ButtonDate := SetTrueDate(PageCount, counter + 1) ; // ÊÇÑíÎ Çíä Ϙãå
    ButtonAllYearDate := 'Year/' + copy(ButtonDate,6,5); // ÊÇÑíÎ Çíä Ϙãå ÏÑ ÝíáÏåÇí åãå ÓÇáå
    //---
    WhatsThisButtonImage(ButtonDate) ; // ÊÚííä Ô˜á˜åÇ
    //====== ÇíÇä ========
    // ÑÝÊä ÑæíÏÇÏ ÑæÒ
    DTM.DBQuery.SQL.Clear ;
    DTM.DBQuery.SQL.Add('select * from eventtable where date = ' + QuotedStr(ButtonDate));
    DTM.DBQuery.ExecSQL ;
    //-------------

    IF DTM.DBQuery.RecordCount > 0 Then Hint := DTM.DBQuery.FieldValues['eventtitle'] ;

    IF ButtonDate = CalenderForm.FarsiCalendar1.Today Then
    Begin
    //Flat := False ;
    Font.Color := clBlue ; // ãÔÎÕ ÓÇÒí Ϙãå ÇãÑæÒ
    MountPage.ActivePageIndex := PageCount ;
    IF DTM.DBQuery.RecordCount > 0 Then
    Begin
    with EventForm do
    Begin
    Labl_Today.Caption := 'ÇãÑæÒ : ' + (ReturnPersianDate(LeftCounter,counter+1));
    Labl_TodayEvent.Caption := DTM.DBQuery.FieldValues['eventtitle'] ;
    Show;
    End ;
    End;
    End ;
    //====== ÇíÇä ========
    //****************************
    counter:= counter + 1 ;
    //Top := TopCounter * 28 ;
    SplashForm.ProgressBar_Loading.Position := SplashForm.ProgressBar_Loading.Position + 1 ;
    IF counter = NumberOfMountDays Then Break ;
    End ;
    End;
    End ;
    except
    end ; // end try
    End;

    Function TMainForm.WhatsThisButtonImage(Date:String):String ;
    var
    AllYear : String ;
    HintEventTypeTemp,HintRemindeMessageTemp,HintCompo sed : String ;
    Day,Mount : integer ;
    Begin
    AllYear := 'Year/' + copy(Date,6,5); // ÊÇÑíÎ Çíä Ϙãå ÏÑ ÝíáÏåÇí åãå ÓÇáå
    day := strtoint(copy(Date,6,2));
    Mount := strtoint(copy(Date,9,2)) ;
    // ÊÚííä Ô˜á˜åÇí Ϙãå åÇí
    with DTM.Query_Reminder do
    begin
    SQL.Clear ;
    SQL.Add('Select * from remindertable where EventDate = ' + QuotedStr(Date) + 'OR EventDate = ' + QuotedStr(AllYear));
    ExecSQL ;
    end ;
    //===
    IF DTM.Query_Reminder.RecordCount = 1 Then // ÇÑ ÝÞØ í˜ ÚäæÇä ãæÌæÏ ÈæÏ
    Begin
    SmallIcon[day][Mount] := TfcImageBtn.Create(self);
    with SmallIcon[day][Mount] do
    Begin
    Parent := MyBtn[day][Mount].Parent ;
    Height := 16 ;
    Width := 16 ;
    SmallIcon[day][Mount].Top := MainForm.MyBtn[day][Mount].Top ;
    SmallIcon[day][Mount].Left := MainForm.MyBtn[day][Mount].Left ;
    HintEventTypeTemp := DTM.Query_Reminder.FieldValues['RemindeType'] ;
    HintRemindeMessageTemp := DTM.Query_Reminder.FieldValues['RemindeMessage'] ;
    HintComposed := HintEventTypeTemp + ' : ' + HintRemindeMessageTemp ;
    Case DTM.Query_Reminder.FieldValues['RemindeIntType'] OF
    0 : Begin
    Image.LoadFromFile('C:\button\IcAp.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    1 : Begin
    Image.LoadFromFile('C:\button\IcBirthday.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    2 : Begin
    Image.LoadFromFile('C:\button\IcCheck.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    3 : Begin
    Image.LoadFromFile('C:\button\IcQuiz.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    4 : Begin
    Image.LoadFromFile('C:\button\IcMarry.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    5 : Begin
    Image.LoadFromFile('C:\button\IcDead.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    6 : Begin
    Image.LoadFromFile('C:\button\IcImportant.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    7 : Begin
    Image.LoadFromFile('C:\button\IcUnknow.bmp');
    ImageDown := Image ;
    Hint := HintComposed ;
    End ;
    end;
    SmallIcon[day][Mount].Repaint ;
    End ;
    End ;
    //--
    IF DTM.Query_Reminder.RecordCount > 1 Then
    Begin
    SmallIcon[day][Mount] := TfcImageBtn.Create(self);
    with SmallIcon[day][Mount] do
    Begin
    Parent := MyBtn[day][Mount].Parent ;
    Height := 16 ;
    Width := 16 ;
    SmallIcon[day][Mount].Top := MainForm.MyBtn[day][Mount].Top ;
    SmallIcon[day][Mount].Left := MainForm.MyBtn[day][Mount].Left ;
    Image.LoadFromFile('C:\button\many.bmp');
    ImageDown := Image ;
    With DTM.Query_Reminder Do
    Begin
    First ;
    Hint := DTM.Query_Reminder.FieldValues['RemindeType']+ ' : ' + DTM.Query_Reminder.FieldValues['RemindeMessage'] + #13 ;
    Next ;
    While Not Eof Do
    Begin
    Hint := Hint + DTM.Query_Reminder.FieldValues['RemindeType']+' : ' + DTM.Query_Reminder.FieldValues['RemindeMessage'] + #13 ;
    Next;
    End ;
    End ;
    SmallIcon[day][Mount].Repaint ;
    End ;
    End;
    End ;


  37. #37
    اگر فایلش بود شاید میشد یه چیزایی فهمید ولی الان این کد هیچ کمکی نمیکنه!

  38. #38
    یک طور دیگه سئوالمو مطرح میکنم .در کد زیر تمامی لیبل ها ی از پیش تعریف شده پاک میشود .حال اگر یک لیبل داخل یک پنل باشد دستور زیر هیچ تاثیری روی آن ندارد چرا؟
    var
    i:integer;
    begin
    For i := 0 To ControlCount-1 Do
    IF Controls[i] Is Tlabel Then
    Begin
    (Controls[i] as tlabel).visible:=false;
    End ;

  39. #39
    یک طور دیگه سئوالمو مطرح میکنم .در کد زیر تمامی لیبل ها ی از پیش تعریف شده پاک میشود .حال اگر یک لیبل داخل یک پنل باشد دستور زیر هیچ تاثیری روی آن ندارد چرا؟
    چون اگه به Help دلفی مراجعه کنید، متوجه میشید که Controls لیستی از کنترلهایی که Child کنترل مورد نظر هستند را در اختیار شما قرار میده. پس کنترل هایی مثل Label ایی که توی یک Panel هستند با خصوصیت Controls فرم قابل دسترس نیستند، چون Parent شان Panel هست، نه فرم.
    از طرفی اگر در همان Help سری به لینک See Also می زدید، متوجه می شدید که خصوصیت دیگه ایی وجود داره به نام Components که اگر به توضیحاتش توجه کنید، نوشته لیست کامپوننت هایی که توسط کامپوننت موردنظر (در اینجا فرم) Owned هستند را بر میگردونه، یعنی هر کامپوننتی که Owner اش فرم مربوطه باشه با TForm.Components برگشت داده میشه. پس باید بجای Controls از Components و بجای ComponentsCount از ControlCounts استفاده بکنید تا جواب درست بگیرید.
    همین مورد در پست 34# هم به شما گفته شد، ازش تشکر هم کردید، ولی همون سوال رو دوباره ادامه دادید!
    این Help دلفی برای همه کاربرانش هست، مخصوص عده خاصی نیست. با یک F1 ساده روی نام کامپوننت، یا متد مربوطه در ادیتور هم فعال میشه و شما رو یکراست میبره به صفحه مربوط به اون متد، خصوصیت، رویداد، کلاس، یا تابع خاص.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  40. #40
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    با سلام

    نقل قول نوشته شده توسط h.tehrani مشاهده تاپیک
    var
    i:integer;
    begin
    For i := 0 To ControlCount-1 Do
    IF Controls[i] Is Tlabel Then
    Begin
    (Controls[i] as tlabel).visible:=false;
    End ;
    کد را به شکل زیر تغییر بده.

    For i := 0 To componentCount-1 Do
    IF Components[i] Is Tpanel Then
    Begin
    TPanel(Components[i]).Visible:=False;
    End ;

    موفق باشید

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

  1. چگونه می توان Create بودن یک فرم را چک کرد؟
    نوشته شده توسط aras12000 در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: شنبه 23 اردیبهشت 1385, 17:44 عصر
  2. فرم ساز با استفاده از create کردن تو فایل و ارث بری
    نوشته شده توسط مرتضی کاردرست در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: سه شنبه 01 آذر 1384, 13:41 عصر
  3. Create VCD --> K3B
    نوشته شده توسط saeed9009 در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 3
    آخرین پست: شنبه 09 مهر 1384, 00:19 صبح
  4. رویداد Button.click برای button های ایجاد شده در زمان load
    نوشته شده توسط Masuod در بخش ASP.NET Web Forms
    پاسخ: 5
    آخرین پست: جمعه 06 خرداد 1384, 21:09 عصر

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

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