1- "لم افهمك انا استعمل دالفى 2007 دائما شرط UNICODE...."
أ تكلم على إصدار 2009 و ما يليه
2- كل الفكرة هي معرفة بنية الـ Data Type , كما أشرت سابقا طول السلسة المحرفية يخزن في
الخانة 0 قبل بداية السلسلة , لاحظ مثال الأخ :
هنا
3- "لماذا طرحت 2 من المؤشر pl " , نفس الفكرة 2
المؤشر عوض التأشير على بداية المحارف نرجع مرتين أو 4 (Ascii or unicode) لقراءة محتوى الخانة 0
4- "كيف ذالك حسب الحاجة الدالة مخصصة للاتيان ب طول السلسة النصية ...."
لن أستخدم هده الدالة لحساب طول من فئة 10 و 20 فكر

أهم شئ في كتابة الكود هي كيفية
إستعماله بطريقة مثلا .
5- " مثلا طول سلسلة نصية 130000 محرف هل الدالة تعيد النتيجة صحيحة . " هنا نحتاج
قالب للقيمة
و ليس
إعادة كتابة فكرة أخرى , Dword / Big Int .... ect
الفكرة بسيطة

.
[url=http://www.delphi4arab.net/forum/showpost.php?p=33021&postcount=10][/url]
الاخ louay محاولتك صحيحة لاكن مع ShortString
Maximum length = 255 characters
و بالتالى يمكن تخزين طول هذه السلسلة فى 1 بايت فقط و موقع هذا الاخير قبل بداية السلسة الحرفية تماما .
عكس String المطلوب فى التمرين .
------------------------
كود :
- كل الفكرة هي معرفة بنية الـ Data Type , كما أشرت سابقا طول السلسة المحرفية يخزن في
الخانة 0 قبل بداية السلسلة , لاحظ مثال الأخ : هنا
صحيح مع ShortString
PHP كود :
SizeOf(ShortString) = 256 Byte
255 Byte for ShortString (characters string[255])
001 Byte for (save length )
كود :
- "كيف ذالك حسب الحاجة الدالة مخصصة للاتيان ب طول السلسة النصية ...."
لن أستخدم هده الدالة لحساب طول من فئة 10 و 20 فكر [COLOR="Red"]أهم شئ في كتابة الكود هي كيفية
إستعماله بطريقة مثلا .[/COLOR]
انا فى الحقيقة اخطاءت فى صياغة التمرين
كان قصدى بعدم استعمال اى دالة بل بالاعتماد على المؤشرات
الطريقة موجودة فى هذا
الموضوع ...
وهى التى اردت استعمالها فى الحل 
... .
وعليكم السلام ورحمة الله وبركاته
هده محاولتي ...بعيدا عن المؤشرات و الأسمبلي
PHP كود :
function LengthOfSTR(S: string): Byte;
var
i: Byte;
begin
i := 1;
while S[i] <> #0 do
inc(i);
Dec(i);
Result := i;
end;
procedure TForm1.FormCreate(Sender: TObject);
var s: string;
begin
s := 'Delphi4Arab';
ShowMessage(IntToStr(LengthOfSTR(s)));
end;
me&delphi و phpbb3
كلا المحاولتين صحيحة و تعتمد على (حتمية انتهاء السلسلة النصية ب بايت صفرى #0) + و كلاهما ايضا يعتمد على حلقة و بالتالى كلما طالت السلسلة النصية ازداد عدد الحلقات
(يوجد طريقة احسن)
شكرا لكم .
إقتباس :كلما طالت السلسلة النصية ازداد عدد الحلقات
كما تعلم أخي hanipino طول محارف string لا يتعدى 255 لهدا فالحلقة لن تكون طويلة
...أحسن من دلك ...السرعة انها asm ...هدا مثال
PHP كود :
function LenOfStr(s: string): Byte;
asm
TEST EAX, EAX
JZ @Fin
SUB EAX, 4
MOV EAX, [EAX]
@Fin:
RET
end;
كود :
كما تعلم أخي hanipino طول محارف string لا يتعدى 255 لهدا فالحلقة لن تكون طويلة
1 -
لست معك طول سلسلة نصية
string يتعدى بكثير
255 محرف بل يصل الى
(High(Integer اى ما يعادل
2GB
حوالى 2 مليار بايت (حرف .. دون UNICODE) اما
255 محرف فهى تخص
ShortString وليس
string
2 -
فيما يخص الدالة بالاسمبلى ... جيدة ... وهذه احسن منها لانها اصغير منها ب 4 بايت .
PHP كود :
function GetStrLen(S: string): Integer;
asm
TEST EAX, EAX
JZ @Ret
mov eax , [eax-$04]
@Ret:
end;
شكرا لك اخى me&delphi
إقتباس :يتعدى بكثير 255
هل نستطيع أن نعلن عن متغير
هكدا
إقتباس :هل نستطيع أن نعلن عن متغير
var S:String[256];
لا نستطيع (لها اسبابها لا ادرى)
... لاكن هذا لا يعنى انه String لا يستطيع حمل اكثر من 255 محرف ... قم بتجربة صغيرة على String ... .
عندما نقول
var S: String
هذا لا يساوى
إقتباس :var S:String[256];
----------------------
لو كان String لا يتعدى 255 محرف اى طول السلسلة لا يخزن فى اكثر من واحد بايت ... لاكن عندما ننقح الدالة length نرى انه تمت قراءت 4 بايت للاتيان بطول السلسلة و ليس قراءت 1 بايت ... .
إقتباس : SUB EAX, 4
MOV [COLOR="Red"]EAX, [EAX][/COLOR]
@Fin: