المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
السلام عليكم ورحمة الله تعالى وبركاته
انا بصدد عمل تطبيق موبيل انصدمت بعدم توفر دالة 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
و إذا كانت فيه طريقة اخرى بإستخدام الدالة OnKeyDown فلا تبخلو عنا و جزاكم الله خيرا
المشاركات : 975
المواضيع 50
:
: 218
الإنتساب : Feb 2008
السلام عليكم جرب هذا الكود ربما يساعدك
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;
و لرب نازلة يضيق لها الفتى ذرعا و عند الله منها المخرج
ضاقت فلما استحكمت حلقاتها فرجت و كنت اضنها لا تفرج
المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
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;
و عليكم السلام
قمت بتجريبه لكن لا يشتغل للأسف
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
توجد هده الخاصية في الإصدارات الأخيرة
PHP كود :
Edit1.NumbersOnly := True;
تغني عن الحدث keypress
سبحان الله وبحمده سبحان الله العظيم
المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
ghost-dz كتب :توجد هده الخاصية في الإصدارات الأخيرة
PHP كود :
Edit1.NumbersOnly := True;
تغني عن الحدث keypress 
مرحبا اخي لم أجد هذه الخاصية و لما كتبت الكود نتج عنه خطأ
ال Edit لا يعرف هذه الدالة NumbersOnly
صورة
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
عموما في XE6 موجودة ولا اعرف الإصدارات السابقة
دعم الإصدارات السابقة
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;
سبحان الله وبحمده سبحان الله العظيم
المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
جزاك الله حيرا اخي على المتابعة
انا اعمل على آخر اصدار delphi xe6 لكني لم اجد تلك الحاصية :confused:
المهم جربت الإجراء الذي كتبه ممكن المكتبات التي اضيفها في uses حتى يعمل لأنو لم يتعرف على
تلك الدوال
صورة
المشاركات : 654
المواضيع 34
:
: 106
الإنتساب : Aug 2010
كل الدي وضعته هو على VCL Forms
اما خارجه شيء آخر
سبحان الله وبحمده سبحان الله العظيم
المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
عرف لمذا لم اجد تلك الخاصية في Edit انا اعمل على firemonkey و ليس vcl
المشاركات : 75
المواضيع 26
:
: 0
الإنتساب : Dec 2011
وجدت الحل و هو باستخدام المكون NumberBox الجاهز للأعداد فقط على منصة firemonkey
شكرا للجميع و اتمنى لكم الاستفادة