المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : خطأ في الكود if key = a..z then ؟


AL-MOB4RM3G
08-01-2009, 10:31 AM
السلام عليكم ورحمة الله
اخواني الكرام...

اليوم وانا احاول ان اعمل برنامح يظهر مسج عند الضغط على اي حرف في الكيبورد...
ولكن لا ادري ما المشكلة حقيقاّ...

الكود الذي احاول استخدامه هو

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key = a..z then
begin
showmessage('it is a : letter!');8
end;

end;

ولكن الخطأ يظهر في الكود التالي...

if key = a..z then

وأعتقد ان الخطأ من a..z والله اعلم..

ولكن لا ادري في الحقيقة بظبط ما الخطأ...
بارك الله فيكم والسلام عليكم ورحمة الله و بركاته..

kachwahed
08-01-2009, 10:42 AM
إليك الكود الصحيح:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key in ['a'..'z'] then
begin
showmessage('it is a : letter!');
end;
end;

AL-MOB4RM3G
08-01-2009, 10:44 AM
نعم اخي بارك الله فيكم...
شكرا كثيرا...

الكود صحيح..
وجربته الآن...

شكرا مرة ثانية..
وبارك الله فيكم والسلام عليكم

touhami
08-01-2009, 10:47 AM
السلام عليكم
و لكن لا تنس أخي
if( key in ['a'..'z'] ) and ( key in ['A'..'Z'] )

B.M.AbdelAziZ
08-01-2009, 12:03 PM
يمكن اختصارها

if key in ['a'..'z','A'..'Z'] then ...

أو

if UpCase(key) in ['A'..'Z'] then...

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

musvc
08-01-2009, 12:13 PM
DeltaAziz الضاهر انت خبير بجد !!
شكرا ً لك اخي الكريم وكثر الله من امثالكم

في الحقيقة المنتدى جميل جدا ً و اول منتدى عربي اراه يعمل دروس دلفي بالفيديو لأفادة الناس
بارك الله فيكم

AL-MOB4RM3G
08-01-2009, 05:18 PM
نعم اخواني بارك الله فيكم...
بخصوص... اخي touhami فملاحظتك مهمة للغاية ... وبارك الله فيك على تذكيرك لي بها...

اما هنا سؤال...

اذا اردت انا انه مثلا عند الضغط على اي زر في الكيبورد يكون حرفا فسيتم اظهار
showmessage الى المستخدم...

هل يعتبر هذا الكود الذي وشعته صحيح اخي ؟

if( key in ['a'..'z'] ) and ( key in ['A'..'Z'] )

ألا يجب استخدام الكلمة or بدل من استخدام كلمة and ؟

لأن عند استخدام ال and يجب ان يتحقق كلا الشرطين...
اليس كذلك؟:eek:
اعتقد انني شاهدت هذا في الدورة ان لك اكن مخطئا ؟

نعم... هذا اولا...

ثانيا...

اخي ديلتها عزيز

الأولى واضحة بنسبة لي...
اما الثانية فشوي معقدة :eek:

يعني ماذا يفعل UpCase(key)

هو للأحرف الكبار ؟

طيب ما هو العكس ؟

ثانيا ما فائدة الكود UpCase(key)

ان كان هناك يوجد in ['A'..'Z']

التي تشير الى احرف كبار؟

بارك الله لك

medreg
09-01-2009, 09:48 AM
يعني ماذا يفعل UpCase(key)
هو للأحرف الكبار ؟

هذا ما فهمته من ما أشار إليه الأخ DeltaAziz
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if UpCase(key) in ['a'..'z','A'..'Z'] then
begin
showmessage(''+UpCase(key));
end;

medreg
09-01-2009, 10:50 AM
هذا ما فهمته من ما أشار إليه الأخ deltaaziz
procedure tform1.edit1keypress(sender: Tobject; var key: Char);
begin
if upcase(key) in ['a'..'z','a'..'z'] then
begin
showmessage(''+upcase(key));
end;

وحسب إجتهادي من ما فهمت منكم الميساج يظهر حسب حالة الحرف

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if UpCase(key)in ['a'..'z','A'..'Z'] then
begin
showmessage(key);
end else
if UpCase(key) in['ي'..'أ','ا']then
begin
showmessage(key);
end;
end;

kachwahed
10-01-2009, 10:18 AM
هل يعتبر هذا الكود الذي وشعته صحيح اخي ؟

if( key in ['a'..'z'] ) and ( key in ['A'..'Z'] )

ألا يجب استخدام الكلمة or بدل من استخدام كلمة and ؟

لأن عند استخدام ال and يجب ان يتحقق كلا الشرطين...



أولا: معك حق أخي هذا الكود هو لشرط يتحقق إذا تم الضغط على أحد الأحرف الصغيرة وفي نفس الوقت أحد الأحرف الكبيرة وهذا لا يمكن أن يتحقق؟؟؟

والصواب أن يكتب:
if( key in ['a'..'z'] ) or ( key in ['A'..'Z'] ) then

ثانيا: لقد قدم الأخ المشرف الكود المختصر وهو الذي أراه مناسبا:
if UpCase(key) in ['A'..'Z'] then
ShowMessage('it is a : '+key);



اما الثانية فشوي معقدة :eek:
يعني ماذا يفعل UpCase(key)
هو للأحرف الكبار ؟
طيب ما هو العكس ؟



تستعمل UpCase لتحويل الحرف (Char) إلى حرف كبير، وهناك دوال كثيرة مشابهة لها.
والعكس هو LowerCase لكنها تستعمل مع العبارات النصية (String) وبالتالي يكون استعمالها كما يلي:
if pchar(LowerCase(key))^ in ['a'..'z'] then
ShowMessage('it is a : '+key);
والنتيجة هي نفسها.


ثانيا ما فائدة الكود UpCase(key)
ان كان هناك يوجد in ['A'..'Z']
التي تشير الى احرف كبار؟


طبعا لا فائدة منها، فإذا استعملت UpCase يمكنك الاستغناء عن الشرط الثاني.
.
نعم اخواني بارك الله فيكم...

اذا اردت انا انه مثلا عند الضغط على اي زر في الكيبورد يكون حرفا فسيتم اظهار
showmessage الى المستخدم...



وإذا أردت إدراج الرموز (مثل: ~#/*-+$^ù*...)، إليك هذا الكود:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9']) then
ShowMessage('it is a : '+key);
end;
وإذا أردت كل الحالات السابقة، استعمل هذا الكود:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
case UpCase(key) of
'A'..'Z': ShowMessage(key + ' is a letter');
'0'..'9': ShowMessage(key+' is a Number');
else ShowMessage(key+' is a Symbole');
end;
end;

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

AL-MOB4RM3G
10-01-2009, 10:45 AM
نعم بارك الله فيكم اخواني الكرام
في الحقيقة كان لي في هذا الموضوع كثيرا من الفئدة..

اشكركم كثيرا..
والآن واضح الآمر ولله الحمد..

بارك الله فيكم مرة اخرى.