PDA

View Full Version : ورود کاراکتر / در Edit



Mohajer_Moh
پنج شنبه 05 اردیبهشت 1387, 00:43 صبح
با سلام و خسته نباشید خدمت دوستان عزیز

می خواهم کاربر در Edit علاوه بر عدد بتواند فقط یک بار کاراکتر / را وارد نماید. (بجز عدد و کاراکتر / هیچ کاراکتری وارد نشود.)

در ضمن اگر امکان دارد بعد از بکار بردن کاراکتر / فقط 2 عدد وارد نماید.

با تشکر فراوان.

ali_mande
پنج شنبه 05 اردیبهشت 1387, 01:34 صبح
در event change مربوط به ثیهف می تونی چک کنی همین چیزی رو که میخوای یا در event KeyPress
میتونی چک کنی که این بهتر اگر قبلاً / داشته تو متنت دیگه کد مربوط به / را نگیره یعنی اگه گرفن کد رو صفر کن :افسرده::افسرده::افسرده:

SYNDROME
پنج شنبه 05 اردیبهشت 1387, 07:32 صبح
چنین کدی را در رویداد OnkeyPress بنویسید.


IF Not(Key In ['0'..'9','/']) Then
Key := #0;

موفق باشید

skmkh6056
پنج شنبه 05 اردیبهشت 1387, 08:16 صبح
از MaskEdit میتونی استفاده کنی که خیلی هم خوبه و نیاز به کد نویسی هم نداره. میتونی خودت دست کاری کنی و
ورودیت را با هر فرمتی که می خوای براش تعریف کنی. موفق باشی
البته منظورم از دست کاری تنظیماتش هست که از حالت اولیه درش بیاری

B-Vedadian
پنج شنبه 05 اردیبهشت 1387, 08:43 صبح
برای این کاربرد فقط میشه با رویداد OnKeypress کار کرد:


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char)
var
Valid: set of Char;
Edit: TEdit;
SlashPos: Integer;
begin
Edit := TEdit(Sender);
SlashPos := pos('/', Edit.Text);
if SlashPos > 0 then
begin
if SlashPos < Length(Edit.Text) - 2 then
begin
Key := #0;
Exit;
end;
Valid := ['0'..'9'];
end else
Valid := ['0'..'9','/'];
end;
if not (Key in Valid) then
Key := #0;
end;

SYNDROME
پنج شنبه 05 اردیبهشت 1387, 19:02 عصر
از MaskEdit میتونی استفاده کنی که خیلی هم خوبه و نیاز به کد نویسی هم نداره. میتونی خودت دست کاری کنی و
ورودیت را با هر فرمتی که می خوای براش تعریف کنی. موفق باشی
البته منظورم از دست کاری تنظیماتش هست که از حالت اولیه درش بیاری
در MaskEditباید فرمت ورود را مشخص کنید.
اگر قرار بود فقط عدد وارد شود می توانید استفاده کنید ولی چون "/" هم وجود دارد نمی توانید فرمت مشخص کنید.
موفق باشید

skmkh6056
شنبه 07 اردیبهشت 1387, 08:17 صبح
در MaskEditباید فرمت ورود را مشخص کنید.
اگر قرار بود فقط عدد وارد شود می توانید استفاده کنید ولی چون "/" هم وجود دارد نمی توانید فرمت مشخص کنید.
موفق باشید

من خودم برای ورود تاریخ و ساعت از MaskEdit استفاده کردم. خاصیت EditMask و Maskes آن در EditMask را چک کنید.

B-Vedadian
شنبه 07 اردیبهشت 1387, 08:43 صبح
احتمالا دوستمون این رو برای گرفتن اعداد فارسی با ممیز میخوان که تعداد ارقام اعشار هم محدود باشه. MaskEdit نمیتونه محل / رو چک کنه، گرفتن تاریخ با این موضوع متفاوته. اولا خود / رو وارد نمیکنید، قبلا میذارید و جاشو ثابت می کنید، ثانیا اینکه بعدش یا قبلش تعداد کاراکترها محدود ولی متغیر نیست.

Mohajer_Moh
شنبه 07 اردیبهشت 1387, 17:51 عصر
دوست عزیز B-Vedadian کد شما درست بود و مشکلم حل شد. خیلی از شما ممنونم.فقط هنگامی که عدد وارد می شود دکمه BackSpace جهت پاک نمودن کاراکترهاعمل نمی کند.درصورت امکان کد مربوطه را برایم قراردهید. بازهم از شما متشکرم.

SYNDROME
شنبه 07 اردیبهشت 1387, 21:36 عصر
من خودم برای ورود تاریخ و ساعت از MaskEdit استفاده کردم. خاصیت EditMask و Maskes آن در EditMask را چک کنید.
حرف شما برای ورود تاریخ کاملاً درست است.
ولی دوستمان در جملاتش گفته بود که می خود عددی به همراه "/" وارد کنید و در رابطه با ورود استاندارد چیزی نگفته بود.
موفق باشید

B-Vedadian
شنبه 07 اردیبهشت 1387, 22:06 عصر
اشتباه لپی:بامزه:

متغیر Valid رو بصورت زیر عوض کنید


Valid=[#8,'0'..'9']

و


Valid=[#8,'0'..'9','/']

در واقع رویداد داشت کلید BkSpace رو هم ممنوع می کرد. کد اسکی اون 8ه.

Mohajer_Moh
یک شنبه 08 اردیبهشت 1387, 10:29 صبح
دوست عزیز B-Vedadian کدهای داده شده دارای اشکال می باشد. وقتی بعد از کاراکتر / 3عدد بطور کامل وارد می شود کلید Bkpace کار نمی کند. حتما بطور کامل کدها را بررسی و امتحان کنید. با تشکر فراوان

B-Vedadian
یک شنبه 08 اردیبهشت 1387, 10:59 صبح
بهت بر نخوره ها! ولی یکم ایده بکار بزن دیگه!:لبخند:


وقتی تعداد کاراکترهای بعد / بیش از 2 بشه، میره تو بخش


if SlashPos < Length() - 2 then
Key := #0;
Exit;
end;
اونجا چک نشده که اگه BkSpace بود، کلید رو غیر فعال نکنیم. کافیه همین بررسی رو اضافه کنید.:چشمک:

Mohajer_Moh
یک شنبه 08 اردیبهشت 1387, 11:20 صبح
دوست عزیز ایده هم بکار بردم و کدها را تغییر دادم و کد Bkspace را قراردادم.اول اینکه با کد نوشته شده شما بعد از / 3 کاراکتر وارد می شود نه 2 کاراکتر و بعد هم وقتی 3 تا شد دیگر کلید Bkspace کار نمی کند. بد نیست یک بار کامل امتحان کنید. پی می برید اشکال در کجاست.

B-Vedadian
یک شنبه 08 اردیبهشت 1387, 11:37 صبح
من وقتی پست شما رو دیدم، متوجه شدم.

ببینید، من این کد رو اجرا کردم، درست کار میکنه. ایده های لازم برای اصلاح

1-فقط تو بخش if SlashPos < Length(...)-2 then یک عدد دو دیده میشه. اون رو کافیه 1 کنید تا بجای 3 تا عدد، فقط 2 تا عدد بعد / مجاز بشه.
2-بخشی که بدون بررسی Key := #0 شده بود رو که اشاره کردم این طوری عوض کنید.

if Ke <> #8 then
Key := #0;

MEHRADIS
چهارشنبه 18 اردیبهشت 1387, 14:34 عصر
به نظر من بهترین کار اینه که از یک سویچ استفاده کنیم. این سویچ در ابتدای کار صفر است. در ONKEYPRESS چک می کنیم که اگر کاراکتر "/" وارد شد، در صورتی که سویچ صفر بود اونو به رشته اضافه کنه و مقدارش رو به یک تغییر بده. با این روش در بار دوم دیگه اجازه ورود این کاراکتر رو نمی ده. و هر زمانی هم که کارش با این قسمت تموم شد و از فرم خارج شد ( هر وقت که ادیت باکس رو پاک کرد ) ، سویچ رو دوباره صفر کنه.

SYNDROME
چهارشنبه 18 اردیبهشت 1387, 21:35 عصر
به نظر من بهترین کار اینه که از یک سویچ استفاده کنیم. این سویچ در ابتدای کار صفر است. در ONKEYPRESS چک می کنیم که اگر کاراکتر "/" وارد شد، در صورتی که سویچ صفر بود اونو به رشته اضافه کنه و مقدارش رو به یک تغییر بده. با این روش در بار دوم دیگه اجازه ورود این کاراکتر رو نمی ده. و هر زمانی هم که کارش با این قسمت تموم شد و از فرم خارج شد ( هر وقت که ادیت باکس رو پاک کرد ) ، سویچ رو دوباره صفر کنه.
دست عزیز شما می توانید به وسیله دستور Copy و Post و یا ریختن مقدار در یک رشته و خواندن آخرین کاراکتر ورودی می توانید کنترل فوق را انجام دهید.
اگر تعداد Editهای شما زیاد باشد استفاده از این متغییر خیلی سخت می شود.
موفق باشید