![]() |
|
Bug in Ord Function - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3) +--- قسم : دلفي للعرب - القسم العام (https://delphi4arab.net/forum/forumdisplay.php?fid=10) +--- الموضوع : Bug in Ord Function (/showthread.php?tid=5083) |
Bug in Ord Function - SMP3 - 30-03-2013 السلام عليكم ورحمة الله و بركاته
اليوم و أنا أحاول كتابة دوال جديدة لمشروعي .. صدف و أن وجدت Bug في الدالة Ord الدالة Ord لا تدعم ال Unicode !! في جميع نسخ دلفي الحديثة .. المشكل هو أن حجم ال Char في اليونيكود = word , لكن في الدالة ord ال Result من نوع Byte لقد قمت بالتبليغ عن هذه المشكلة في ال QC الحل : الحل بسيط جدا PHP كود : function FastORD (c:Char):{$IFDEF UNICODE} WORD {$ELSE} Byte {$ENDIF};كما تلاحظ تستطيع استخدام الدالة FastOrd لدعم اليونيكود PHP كود : Edit1.Text := IntToHex(Ord('ج'), 4); // Return 00CCBug in Ord Function - ALmuhhnad - 02-04-2013 جزاك الله خير ... فعلاً واجهتني هذه المشكلة ولم اعرف ماذا افعل لحلها حيث اني لم استطع ان اقوم حتى بقراءة الدالة وطريقة عملها Bug in Ord Function - ALmuhhnad - 02-04-2013 لدي سؤال إن كان الموضوع مفتوحاً لنقاش ... في Delphi7 عندما استعمل Ord مع Unicode ويكون هكذا مثلاً : PHP كود : Ord('ه')وفي Delphi Xe3 عندما استعمل Ord مع Unicode ويكون هكذا مثلاً : PHP كود : Ord('ه')كيف اجعل Delphi XE3 يقوم بإرجاع قيمة Delphi7 ؟ Bug in Ord Function - ALmuhhnad - 02-04-2013 تصحيح : في Delphi XE3 احصل على نفس النتائج في Delphi7 : Delphi XE3 : PHP كود : Ord('ه')لكن عندما اطبق هذه السطور : PHP كود : varPHP كود : 0647 0647 0647 0647 0647 0647 ![]() الآن اسئل السؤال السابق ... كيف اجعل Delphi XE3 يقوم بإرجاع قيمة Delphi7 ؟ اي E5 Bug in Ord Function - ALmuhhnad - 02-04-2013 حصلت على اجابة من احد الردود التي وجدتها في الانترنت ... وهي كانت بتغيير نوع المتغير او الثابت إلى : shortString بعد ذلك ساحصل على النتيجة E5 ... واضن ان هذه المشكلة التي واجهتني ترجع إلى نوع المتغير ... لكن لا اعلم بالضبط هل هي خطاء برمجي ام ... شيء وضعته شركة بورلاند عمدا ام ماذا ... يكون الكود هكذا : PHP كود : varلم اتخيل اني ساجد الحل بهذه السرعة رغم اني بحث على النترنت ولم اجد الاجابة إلا بعد ان طرحت المشكلة والسلام عليكم ورحمة الله وبركاتة Bug in Ord Function - SMP3 - 02-04-2013 إقتباس :لكن لا اعلم بالضبط هل هي خطاء برمجي ام ... شيء وضعته شركة بورلاند عمدا ام ماذا ...ليست من بورلاند ... بل من emb فهي التي قامت بدعم اليونيكود ... وحقية أخطاء مثل هذه ممكن تسبب الكثير من المشاكل خصوصا لمبرمج لم يبرمج بدلفي 7 من قبل !! Bug in Ord Function - SMP3 - 02-04-2013 تعديل بسيط على الدالة لدعم 64 بت !! PHP كود : function FastORD (c:Char):{$IFDEF UNICODE} WORD {$ELSE} Byte {$ENDIF};Bug in Ord Function - ALmuhhnad - 02-04-2013 إقتباس :ليست من بورلاند ... بل من emb فهي التي قامت بدعم اليونيكود ... وحقية أخطاء مثل هذه ممكن تسبب الكثير من المشاكلفعلاً فأنا انطلقت الانطلاقة الفعلية مع Delphi XE3 بالنسبة لطريقة بنائك لدالة لم افهم شيء سوا انها اوامر اسمبلي ايضاً .. التعليمات التي تكون داخل {} كيف افهمهاً ... هل يوجد مرجع عربي لها .. ولا مشكلة بالانجليزي Bug in Ord Function - SMP3 - 03-04-2013 ALmuhhnad كتب :فعلاً فأنا انطلقت الانطلاقة الفعلية مع Delphi XE3 هل تقصد {$IFDEF CPUX64} ؟ هذه عبارة عن Compiler Directives ...تستعمل للتخاطب مع الكومبايلر الخاص يدلفي كأن نتحقق من اصدار دلفي أو منصة العمل 32 بت أو 64 .. الخ و بالطبع هناك مرجع لها كود : http://docwiki.embarcadero.com/RADStudio/XE3/en/Delphi_Compiler_Directives_(List)_IndexBug in Ord Function - shagrouni - 19-04-2013 السلام عليكم لم أجد هذه المشكلة. إلا عند تمرير الحرف نفسه بدل من متغير يحمله. وهي هنا مشكلة المحرر. الذي برغم دعمه حرف اليونيكود، فإنه عند استخدام الحروف العربية يختار لها قيمة أسكي. كود : var
C: Char;
s: string;
begin
// 204
Label1.Caption := IntToStr(Ord('ج'));
c := 'ج';
Label2.Caption := IntToStr(Ord(c)); // 1580
s := 'جنان';
Label3.Caption := IntToStr(Ord(s[1])); // 1580
Label4.Caption := IntToStr(Ord('ⵄ')); // 11588 |