View Full Version : نحوه کار MaskEdit؟
mbshareat
جمعه 03 مهر 1388, 00:36 صبح
چطور می تونم یه MaskEdit داشته باشم که تنها اعداد بین 0 و 255 بگیره؟:متفکر:
AbiriAmir
جمعه 03 مهر 1388, 14:17 عصر
چطور می تونم یه MaskEdit داشته باشم که تنها اعداد بین 0 و 255 بگیره؟:متفکر:
برای AlphaBlendValue میخواین؟
به هر حال
ببینید
من اول الگوریتم کار رو میگم خودتون برنامشو بنویسید
اگه هم نتونستید بگین تا خودم بنویسم و بهتون بدم
خب
شما اول باید چک کنید که فقط عدد وارد edit بشه
بعد باید خاصیت حداکثر تعداد کاراکتر مربوط به edit رو روی 3 قرار بدین
بعد باید توی رویداد onKeyPress اون چک کنید که مقدار داخل edit به علاوه مقدار وارد شده از 255 بیشتر میشه یا کمتر
اگه کمتر یا مساوی میشه که کاراکتر حق ورود به edit رو داره وگرنه نداره
موفق باشید:قلب:
AbiriAmir
جمعه 03 مهر 1388, 14:19 عصر
راستی یادم رفت
کاری که من گفتم رو باید با edit انجام بدین نه maskedit
AbiriAmir
جمعه 03 مهر 1388, 14:26 عصر
اینم کدش
البته اول سعی کنید کدش رو خودتون بنویسید
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var count : integer; found :boolean;
begin
Found := False;
for count := 48 to 57 do
begin
if key = chr(count) then
begin
found := true;
break;
end;
end;
if (found = false) and (key<>#8) then key := #0;
if (edit1.Text <> '') and (key <> #8) then if StrToInt(edit1.Text + key) > 255 then key := #0;
end;
mbshareat
شنبه 04 مهر 1388, 11:36 صبح
آقای AmirBeginner (http://barnamenevis.org/forum/member.php?u=113758) ببخشید من برنامتون رو اجرا نکردم ولی فکر کنم اشکال داره چون هیچ جای برنامه وجود کارکتر خارج از محدوده عدد بررسی نشده و اینکه یه کارکتر عددی توی رشته باشه و حلقه تموم بشه رو متوجه نمی شم!:گیج:
اما شاید بشه رو پیغام خطای تبدیل رشته به عدد تکیه کرد!:بامزه:
به نظر من لازم به کش دادن نیست و می شه به سادگی Key را با این شرط صفر(خالی) کرد::متفکر:
If not (Key In [#48..#57] +[#8..#9]+[#13]+[#27] ) then
Key:=#0;
If StrToInt(Edit1.Text+Key)>255 then
Key:=#0;
اما من فکر می کردم شاید بشه علاوه بر بررسی عدد بودن بررسی بالای 255 بودن رو هم به MaskEdit سپرد.:لبخند:
mbshareat
شنبه 04 مهر 1388, 16:57 عصر
آقا کُُدَم رو فی البداهه نوشتم وقتی تست کردم اشکالاتی داشت.:خجالت:
ولی حالا این هم از یه روش سر راست و قشنگ در جواب به خودم!(اینو تو KeyPress جاسازی کنین!)::کف:
If not(Key in [#48..#57]+[#8]+[#13]+[#27]) then
Key:=#0
Else
Begin
iF ((Edit1.Text+Key)='') THEN
Exit;
If not(Key In[#8]+[#13]+[#27]) then
If (StrtoInt(Edit1.Text+Key)>255) Or (Length(Edit1.Text)=3)then
Key:=#0;
end;
کس نخوار پشت من جز ناخن انگشت من!:لبخند:
AbiriAmir
شنبه 04 مهر 1388, 17:14 عصر
بله
من قبل از این که key in رو یاد بگیرم کد بالا رو نوشتم
البته اون قسمتیش که چک میکنه که کاراکتر ورودی عدد باشه
فقط کدهای اسکی اعداد رو چک کردم
اگه داخل اونا بود حلقه متوقف میشه و متغیر found رو مقداردهی کردم به معنای این که کاراکتر وارد شده جزء اعداد هست
اگر هم مقدار found برابر با false بود یعنی جزء اعداد نیست و مقدار اون به #0 تغییر پیدا میکنه
بعدشم که دیگه خودتون میدونید که چکار کردم...
babakmomeni
شنبه 04 مهر 1388, 17:18 عصر
دوست عزیز آقا/خانم mbshareat. من از شرایط برنامه شما اطلاع ندارم ولی اگر شرایط امکانپذیر باشه استفاده از spinedit همه شرایط شما اعم از فقط عدد بودن و Max و Min رو برآورده می کنه.
موفق باشید
mbshareat
شنبه 04 مهر 1388, 18:18 عصر
راستش فکر می کردم همه تو این سایت آقا هستند!!:بامزه:
به نظرم شما تاپیکم رو نخوندین که تقاضای Spin.Dcu برای دلفی 6 کرده بودم!:لبخند:
babakmomeni
شنبه 04 مهر 1388, 18:24 عصر
راستش فکر می کردم همه تو این سایت آقا هستند!!:بامزه:
به نظرم شما تاپیکم رو نخوندین که تقاضای Spin.Dcu برای دلفی 6 کرده بودم!:لبخند:
سلام. با عرض دو شرمندگی: 1- عدم احراز جنسیت شما برای بنده اگر چه در هر صورت پاسخ شامل بی احترامی نبود 2- بی دقتی در مطالعه تاپیک های قبلی شما
راستش من دلفی 7 دارم و متاسفانه spin.dcu رو واسه دلفی 6 نمی تونم تقدیم کنم ولی اگه پیدا کردم با پی ام اطلاع می دم خدمتتون یا توی همین تاپیک می ذارم.
سربلند باشید
babakmomeni
شنبه 04 مهر 1388, 18:28 عصر
راستی یه سری اینجا (http://www.torry.net/quicksearchd.php?String=spinedit&Title=Yes)بزنین spinedit برای دلفی 6 رایگان هستش و میشه دانلود کرد.
mbshareat
شنبه 04 مهر 1388, 20:02 عصر
آقای babakmomeni (http://barnamenevis.org/forum/member.php?u=48569) ببخشید خواستم شوخی کرده باشم.(گرچه اصلا حواسم نبود که ممکنه خانمها هم تو بحث شرکت کنند!):بامزه:
اسم بنده «محمّد باقر شرعیّات» هستش که اسم مستعارم رو با غلط املایی انتخاب کردم! :شیطان:
من خودم دنبال Spin.Dcu گشته ام ولی لینکتون رو هم نگاه می کنم!:لبخند:
درهر صورت ممنونم!:تشویق:
:قلب:«صد دوست کم و یک دشمن بسیار!»:عصبانی:
AbiriAmir
چهارشنبه 08 مهر 1388, 17:50 عصر
خب حالا میخوام کدی که گفتم رو اصلاح کنم
ببینید دوست عزیز:
وقتی ما عدد درون Edit رو به علاوه کاراکتر وارد شده میکنیم و بعد چکش میکنیم به ظاهر مشکلی پیش نمیاد ولی یه جای کار میلنگه...
فرض کنید شما عدد 255 رو تو edit مورد نظر قرار داده اید
حالا کل محتوای edit را انتخاب کنید و عدد 1 را فشار دهید
در واقع محتوا باید بشه 1 ولی برنامه حساب میکنه که نتیجه میشه 2551...
راه حل
به نظرم راه حلش اینه که توی رویداد onKeyPress فقط چک کنید که داده از نوع عددی باشه و در رویداد onChange چک کنید که اگه عدد از 255 بیشتر شد کاراکتر آخر رو حذف کنید...
Mahmood_M
چهارشنبه 08 مهر 1388, 21:17 عصر
راه حل مشکلتون ( جمع بندی ) :
اول اینکه بهتره از Edit استفاده کنید به جای MaskEdit ...
اون طور که به نظر میاد شما سه تا مشکل دارید :
1. طول رشته باید حداکثر 3 تا باشه ...
2. مقدار عدد نباید از 255 بیشتر باشه ...
3. در Edit باید فقط عدد ثبت بشه ...
راه حل ها :
1. Edit خاصیتی به نام MaxLength داره که همون " حداکثر طول رشته " هست ، اگه اون رو برابر 3 قرار بدید ، حداکثر طول رشته ای که میتونید در Edit وارد کنید میشه سه تا ...
2. در رویداد OnChange مربوط به Edit باید مقدار اون رو چک کنید ، اگه اط 255 بیشتر بود ، در اون صورت مثلا پیغامی نمایش بدید ، مثال :
procedure TForm1.Edit1Change(Sender: TObject);
begin
if StrToInt(Edit1.Text) > 255 then
ShowMessage('Please Enter a Number between [0..255] !');
end;
ویرایش :
یک راه بهتر اینه که مقدار عدد داخل Edit رو در صورت بیشتر بودن از 255 به 255 تغییر بدید ، مثلا :
procedure TForm1.Edit1Change(Sender: TObject);
begin
if StrToInt(Edit1.Text) > 255 then
Edit1.Text := '255';
end;
3. باید در رویداد OnKeyPress مقدار وارد شده رو کنترل کنید که آیا عدد هست یا خیر ، مثال :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key < '0') and (Key > #31)) or (Key > '9') then
Key := #0;
end;
با رعایت موارد بالا مشکلی نخواهید داشت ، اگه مشکلی بود ، بگید تا نمونه ای قرار بدم ...
موفق باشید ...
AbiriAmir
پنج شنبه 09 مهر 1388, 13:47 عصر
راه حل مشکلتون ( جمع بندی ) :
3. باید در رویداد OnKeyPress مقدار وارد شده رو کنترل کنید که آیا عدد هست یا خیر ، مثال :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key < '0') and (Key > #31)) or (Key > '9') then
Key := #0;
end;
موفق باشید ...
خب همه موارد بالا رو بنده اشاره کرده بودم ولی گفتم که چه مشکلی پیش میاد
به خاطر همین گفتم که بهتره از onChange استفاده کنیم
نظر من اینه که تو رویداد onKeyPress فقط چک بشه که کاراکتر عددی باشه
ولی تو onChange چک بشه که عدد چنده و اگه از 255 بیشتر شد کاراکتر آخر رو حذف کنه
مشکل روش قبلی من و روش شما رو هم توی پست قبلیم گفتم...
Mahmood_M
پنج شنبه 09 مهر 1388, 16:12 عصر
ب همه موارد بالا رو بنده اشاره کرده بودم ولی گفتم که چه مشکلی پیش میاد
حق با شماست ... ، اما چون مطالب تاپیک پراکنده بود ، گفتم که یک جمع بندی داشته باشیم و با نمونه توضیح داده بشه ...
مشکل روش قبلی من و روش شما رو هم توی پست قبلیم گفتم...
فرض کنید شما عدد 255 رو تو edit مورد نظر قرار داده اید
حالا کل محتوای edit را انتخاب کنید و عدد 1 را فشار دهید
در واقع محتوا باید بشه 1 ولی برنامه حساب میکنه که نتیجه میشه 2551...
اما این مشکل در نمونه ای که من نوشتم وجود نداره ...
موفق باشید ...
ghasemshami
شنبه 11 مهر 1388, 08:05 صبح
ببینید اینطوری خوبه
اولا یک SpinEdit از سربرگ Samples بزارید وخاصیت MaxLength رو برابر 3 بزارید یعنی بیشتر از 3 کارکتر قبول نکنه بعد خاصیت MaxValue رو برابر 255 بزارید یعنی بیشتر از 255 قبول نکنه و خاصیت MinValue رو برابر 0 بزارید این هم یعنی کمتر از صفر قبول نکنه و دستور زیر رو به کار ببرید
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
If SpinEdit1.Text <> '' Then
Begin
If (StrToInt(SpinEdit1.Text) > 255) then
Begin
SpinEdit1.Text := '255';
End;
End;
end;
اگر مشکلی داشتید بگید
AbiriAmir
شنبه 11 مهر 1388, 16:28 عصر
حق با شماست ... ، اما چون مطالب تاپیک پراکنده بود ، گفتم که یک جمع بندی داشته باشیم و با نمونه توضیح داده بشه ...
اما این مشکل در نمونه ای که من نوشتم وجود نداره ...
موفق باشید ...
خب اصلا شما چک نمیکنید که بیشتر از 255 وارد نکنه
فقط پیغام میدید
جلوشو نمی گیرید
Mahmood_M
شنبه 11 مهر 1388, 19:42 عصر
خب اصلا شما چک نمیکنید که بیشتر از 255 وارد نکنه
فقط پیغام میدید
جلوشو نمی گیرید
اما این موضوع چک میشه ! ، وقتی بیشتر وارد کرد مقدار به 255 تغییر میکنه ...
منظورتون از جلوگیری چیه ؟ یعنی اینکه وقتی عددی رو وارد کرد چک کنیم که این عدد از 255 بیشتره یا نه ؟!
این طوری که نمیشه ، اگه عدد ما یک رقمی بود شاید ولی وقتی سه رقمی هست باید حد اقل چند خط کد براش بنویسیم که مطمئنا به صرفه نیست ، به نظر من اصلا چنین چیزی نیاز نیست ...
اینکه در Edit فقط 3 رقم وارد بشه و فقط عدد وارد بشه و اگر عدد بیشتر از 255 بود مقدار به 255 تغییر پیدا کنه ، فکر کنم مشکل رو حل میکنه ...
اکثر برنامه ها هم همین روش رو انجام میدن ، مثلا برنامه فتوشاپ ( برای گرفتن ورودیهای عددی ) ...
موفق باشید ...
ghasemshami
شنبه 11 مهر 1388, 20:13 عصر
کد من رو امتحان کردید
درست عمل کرد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.