إجبار Edit على كتابة الأرقام فقط من دون دالة OnKeyPress
#1
السلام عليكم ورحمة الله تعالى وبركاته

انا بصدد عمل تطبيق موبيل انصدمت بعدم توفر دالة OnKeyPress في المكون Edit مثل الموجودة في تطبيقات سطح المكتب

يجب علي جعل ال Edit لا يقبل إلا الأرقام من 0 الى 9 وايضا علامة الفاصلة ',' و عند إدخال النقطة '.' تنتج مباشرة فاصلة هذا من أجل الأعداد الحقيقية ( ولو توفرت طريقة أخرى لحل مشكل النقطة فهذا افضل )

هذا الكود الذي كتت استخدمه في تطبيقات سطح المكتب في الاجراء OnKeyPress الخاص بال Edit نضع

كود :
if Key = #46 then // عند إدخال النقطة Key := #44; // يتم تحويل النقطة إلى فاصلة if not (Key in [#8,'0'..'9',',']) then Key := #0;


اضن ان في تطبيقات الموبيل يوجد اجراء بديل للاجراء OnKeyPress لذا قمت بعمل هذه الصورة التي تمثل الإجراءات الممكنة مع ال Edit

[صورة: 9aaa1jH.png]

و إذا كانت فيه طريقة اخرى بإستخدام الدالة OnKeyDown فلا تبخلو عنا و جزاكم الله خيرا
الرد
#2
السلام عليكم جرب هذا الكود ربما يساعدك
PHP كود :
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
  
Shift: TShiftState);
begin
  
if Key = vkPeriod then Key := vkComma else
  if 
not(CharInSet(Key, [#8, '0'..'9', ',']))
   
then Key := 0;
end; 
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
الرد
#3
s.fateh كتب :السلام عليكم جرب هذا الكود ربما يساعدك
PHP كود :
procedure tform1.edit1keydown(sender: Tobject; var key: Word; var keychar: Char;
  
shift: Tshiftstate);
begin
  
if key = vkperiod then key := vkcomma else
  if 
not(charinset(key, [#8, '0'..'9', ',']))
   
then key := 0;
end; 

و عليكم السلام

قمت بتجريبه لكن لا يشتغل للأسف
الرد
#4
توجد هده الخاصية في الإصدارات الأخيرة
PHP كود :
Edit1.NumbersOnly := True; 
تغني عن الحدث keypress Big Grin
سبحان الله وبحمده سبحان الله العظيم
الرد
#5
ghost-dz كتب :توجد هده الخاصية في الإصدارات الأخيرة
PHP كود :
Edit1.NumbersOnly := True; 
تغني عن الحدث keypress Big Grin

مرحبا اخي لم أجد هذه الخاصية و لما كتبت الكود نتج عنه خطأ

ال Edit لا يعرف هذه الدالة NumbersOnly

صورة

[صورة: O6LmgoZ.png]
الرد
#6
عموما في XE6 موجودة ولا اعرف الإصدارات السابقة

دعم الإصدارات السابقة Big Grin
PHP كود :
procedure SetNumbersOnly(Edit: TEdit; Value: Boolean);
begin
  
if Value then
    SetWindowLong
(Edit.Handle, GWL_STYLE, GetWindowLong(Edit.Handle, GWL_STYLE)
      or 
ES_NUMBER)
  else
    
SetWindowLong(Edit.Handle, GWL_STYLE, GetWindowLong(Edit.Handle, GWL_STYLE)
      and 
not ES_NUMBER);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetNumbersOnly
(Edit1, True);
end; 
سبحان الله وبحمده سبحان الله العظيم
الرد
#7
جزاك الله حيرا اخي على المتابعة

انا اعمل على آخر اصدار delphi xe6 لكني لم اجد تلك الحاصية :confused:

المهم جربت الإجراء الذي كتبه ممكن المكتبات التي اضيفها في uses حتى يعمل لأنو لم يتعرف على

تلك الدوال

صورة

[صورة: 5xK1EdB.png]
الرد
#8
كل الدي وضعته هو على VCL Forms
اما خارجه شيء آخر
سبحان الله وبحمده سبحان الله العظيم
الرد
#9
عرف لمذا لم اجد تلك الخاصية في Edit انا اعمل على firemonkey و ليس vcl
الرد
#10
وجدت الحل و هو باستخدام المكون NumberBox الجاهز للأعداد فقط على منصة firemonkey

شكرا للجميع و اتمنى لكم الاستفادة
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم