ورود

نسخه کامل مشاهده نسخه کامل : فقط وارد کردن عدد



m_maj
26-11-2006, 09:45
با سلام به همه سروران عزیز
یه مشکل دیگه دارم البته تو کد نویسی
من می خوام توی یه edit کاربر فقط بتونه عدد وارد کنه.
اینو می دونم که باید کلید های ورودی رو فیلتر کنم، ولی روش اونو یعنی کد نویسی شو بلد نیستم.
ضمناً کامپوننت دارم واسه این کار ولی از شکل ظاهری شون خوشم نمی یاد.
تازه کار کردن باهاشون هم یکم مشکله.
با تشکر فراوان برای جواب های شما.
به امید دیدار

blacksun
26-11-2006, 10:14
دوست عزيز در رويداد KeyPress اديت كد زير رو وارد كنيد
if Not(key in ['0'..'9',chr(vk_back)])then key := #0;

m_maj
26-11-2006, 18:37
با سلام به همه و blacksun عزیز که جواب منو داد
با این کد کار می کنم و جواب میدم. اگه مشکلی بود مطرح می کنم.
به امید دیدار

m_maj
27-11-2006, 08:31
با سلام خدمت blacksun عزیز
این کدی که دادی رو با کمی تغییر تونستنم ازش استفاده کنم.
ازت خیلی تشکر می کنم.
به امید دیدار.

sp1000
30-11-2006, 06:51
:cool: با سلام
blacksun جان ، این کدی که شما دادید برای KeyPress است آیا کدی هست که مخصوص OnChange باشه
واضح تر بگویم من یک Edit دارم که به طور خودکار سریال هارد را می گیرد این سریال مخلوطی از عدد و حروف است حالا من
می خواهم که Edit من فقط مقدار های عددی را دریافت کند وبه من نشان دهد
خوشحال می شم اگه کمکم کنی باتشکر خداحافظ
:cool: :cool: :cool:

sp1000
01-12-2006, 08:14
blacksun جان سلام
چی شد تونستی برایم کدش پیدا کنی
اگه پیدا کردی حتما بذار ممنون
:happy: :biggrin:

Nesta_old_User2005
02-12-2006, 04:07
سلام.
راه بهتر این کار این هست که شما شرط بگذاری که if اگه (غیر از اعداد ) وارد شد پیغامی مبنی بر وارد کردن عدد بده که مثلا یا showmessage or ... و اگه درست بود که هیچ .
اینطوری کاربر متوجه میشه که چه کار کنه .
البته واسه راحتی و زیبا شدن بیشتر هست.

sp1000
02-12-2006, 08:57
Nesta_old_User2005عزیز سلام :rolleye:
انگار یا شما منظور مرا نفهمیدی یا من منظور شمارا ؟؟؟ به هر حال واضحتر می گویم
من یک Editدارم که در حالت Disableقرار دارد این Editسریال هارد دیسک را به طور خودکار میگیرد واینطوری به من نشان میدهدمثلا C4E037D6 حالا من می خواهم این Edit فقط مقدار های عددی به من نشان دهد یعنی اینطوری 40376 و حروف را نشان ندهدفکر کنم منطورم را واضح گفتم
از راهنمایی هات ممنون منتطر جواب هستم فعلا خداحافظ
:cool:

blacksun
02-12-2006, 15:51
:cool: با سلام
blacksun جان ، این کدی که شما دادید برای KeyPress است آیا کدی هست که مخصوص OnChange باشه
واضح تر بگویم من یک Edit دارم که به طور خودکار سریال هارد را می گیرد این سریال مخلوطی از عدد و حروف است حالا من
می خواهم که Edit من فقط مقدار های عددی را دریافت کند وبه من نشان دهد
خوشحال می شم اگه کمکم کنی باتشکر خداحافظ
:cool: :cool: :cool:
دوست عزيز شما مي تونيد از كد زير براي اين كار استفاده كنيد
فقط ببخشيد كه كمي دير شد آخه سرم خيلي شلوغ بود

procedure TForm1.Edit1Change(Sender: TObject);
var
a,temp:string;
i :integer;
begin
a:=Edit1.Text;
for i:=0 to Length(a) do
if (a[i] in ['0'..'9']) then
temp:=temp+a[i];
edit1.Text := temp;
end;

sp1000
03-12-2006, 11:40
blacksun عزیز سلام ;)
منطور من همین بود
خدا خیرت بده خیلی خوشحال شدم امتحان می کنم مطما هستم که جواب میده به هرحال متشکرم :rolleye:
بازم خیلی خیلی ممنون فعلا خداحافظ
:cool: :cool: :cool:

MasterData
04-12-2006, 18:35
ببخشيد ميشه بگين چرا از MaskEdit استفاده نمي كنين؟

mahdi bg
05-12-2006, 05:55
سلام


تابع زیر رو توی Change برای هر Edit ی که خواستی فراخوانی کن

تابع ای که استفاده کردم برگشتی(احتمالا در موردش شنیده باشی)
باز هم اگه جایش نامفهوم بود در خدمتم

function TForm1.Check (MyEditText: PChar): string;
begin
if StrLen(MyEditText)=0 then
begin
Check:=MyEditText;
end
else
begin
if not(MyEditText[0] in ['0'..'9']) then
Check:= Check (PChar(copy(MyEditText,2,strlen(MyEditText))))
else
Check:=MyEditText[0]+ Check (PChar(copy(MyEditText,2,strlen(MyEditText))))
end;
end;

نحوه فراخوانی

procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Text:=CheckNumber(PChar(Edit1.text))
end;

استفاده از توابع بازگشتی حجم کد رو خیلی کم می کنه
بدون Begin و End ها که فقط برای خوانای برنامه گذاشتم تعداد خطوط
برنامه 7 خطه