[COLOR="DarkGreen"]السلام عليكم ورحمة الله وبركاته
أجد صعوبه في استخدام تعليمهCase
ولم اجدها في دورة دلفي للعرب (فيديو)
كيف استخدمها ؟[/COLOR]
و عليكم السلام ورحمة الله
شاهد دروس الدورة
إن لم تخني الذاكرة الدرس الرابع
فعلا اخي الفاضل هو الدرس الرابع وكان لايعمل عندي والان يعمل ولكني لم استطيع فهمها
فانا اجد سهوله لتعليمه if لان المعنى واضح (لو _ افعل ) فما معنى التعليمة case ؟
بمعنى اين الشرط ؟
ولو امكن كتابة مثال وتحويله الى جملة عربيه اي شرحه
السلام عليكم
لاحظ أخي الحبيب المثال التالي :
باستعمال IF :
كود :
if MyAction = ACTION1 then
// code
else if MyAction = ACTION2 then
// code
...
else if MyAction = ACTIONn then
// code;
نفس المثال باستعمال case :
كود :
case MyAction of
ACTION1: {code};
ACTION2: {code};
...
ACTIONn: {code};
end;
مثال آخر :
كود :
var i : Integer
if i = 0 then
showmessage ('i = 0')
else
if i = 1 showmessage ('i = 1')
else
if i = 2 showmessage ('i = 2')
تفس المثال باستعمال case :
كود :
Case i of
0 : showmessage ('i = 0') ;
1 : showmessage ('i = 0') ;
2 : showmessage ('i = 0') ;
end
ربما تسال و ما الفرق الجوهري بينهما ؟
نظريا Case أسرع في التطبيق من If.
وفقك الله لكل خير.
بارك الله فيك اخي الحبيب ولكن المثال يشبه ما بالدوره
هل يمكنك تغير نوع المتغير الى String حتى تصل الفكره اكثر
لاني كلما حاولت التغير في المثال أعطاني Ordinal type required
بارك الله فيك
Case يستخدم عندما يكون المتغير عدد او حرف او (set of [ asdf..fghjk])
وليس String
تستطيع تحويل String الى set of
وبعدها تستعمل في Case
كود :
case Integer of
0: (Lo, Hi: Cardinal);
1: (Cardinals: array [0..1] of Cardinal);
2: (Words: array [0..3] of Word);
3: (Bytes: array [0..7] of Byte);
كود :
function HexChar(c: Char): Byte;
begin
case c of
'0'..'9': Result := Byte(c) - Byte('0');
'a'..'f': Result := (Byte(c) - Byte('a')) + 10;
'A'..'F': Result := (Byte(c) - Byte('A')) + 10;
else
InvalidGUID;
Result := 0;
end;
end;
كود :
function ConvertEraString(const Count: Integer) : string;
var
FormatStr: string;
SystemTime: TSystemTime;
Buffer: array[Byte] of Char;
P: PChar;
begin
Result := '';
with SystemTime do
begin
wYear := Year;
wMonth := Month;
wDay := Day;
end;
FormatStr := 'gg';
if GetDateFormat(GetThreadLocale, DATE_USE_ALT_CALENDAR, @SystemTime,
PChar(FormatStr), Buffer, SizeOf(Buffer)) <> 0 then
begin
Result := Buffer;
if Count = 1 then
begin
case SysLocale.PriLangID of
LANG_JAPANESE:
Result := Copy(Result, 1, CharToBytelen(Result, 1));
LANG_CHINESE:
if (SysLocale.SubLangID = SUBLANG_CHINESE_TRADITIONAL)
and (ByteToCharLen(Result, Length(Result)) = 4) then
begin
P := Buffer + CharToByteIndex(Result, 3) - 1;
SetString(Result, P, CharToByteLen(P, 2));
end;
end;
end;
end;
end;
كود :
if not ScanNumber(S, Pos, N3, L3) then Exit;
case DateOrder of
doMDY: begin Y := N3; YearLen := L3; M := N1; D := N2; end;
doDMY: begin Y := N3; YearLen := L3; M := N2; D := N1; end;
doYMD: begin Y := N1; YearLen := L1; M := N2; D := N3; end;
end;
كود :
case LocaleType of
LOCALE_SHORTDATE:
LFormat := GetDateTimeFormat(Locale, kCFDateFormatterShortStyle, kCFDateFormatterNoStyle);
LOCALE_LONGDATE:
LFormat := GetDateTimeFormat(Locale, kCFDateFormatterFullStyle, kCFDateFormatterNoStyle);
LOCALE_SHORTTIME:
LFormat := GetDateTimeFormat(Locale, kCFDateFormatterNoStyle, kCFDateFormatterShortStyle);
LOCALE_LONGTIME:
LFormat := GetDateTimeFormat(Locale, kCFDateFormatterNoStyle, kCFDateFormatterMediumStyle);
else
LFormat := '';
end;
كود :
function MapFault(Context: Psigcontext_t): TRuntimeError;
begin
case Context^.trapno of
TRAP_OVERFLOW:
Result := System.reIntOverflow;
TRAP_BOUND:
Result := System.reRangeError;
TRAP_INVINSTR:
Result := System.rePrivInstruction; // This doesn't seem right, but we don't
// have an external exception to match!
TRAP_STACKFAULT:
Result := System.reStackOverflow;
TRAP_SEGMENTNP,
TRAP_GPFAULT:
Result := System.reAccessViolation;
TRAP_PAGEFAULT:
Result := System.reAccessViolation;
else
Result := System.reAccessViolation;
end;
end;
وهناك الكثير في SysUtils.pas
[COLOR="Purple"]انا قرأت ان Case تستخدم مع كل انواع المتغيرات ما عدا المتغير من النوع الحقيقي Real
فما المشكله مع النوع String
السلام عليكم[/COLOR]
Case تتعامل فقط مع الاعداد والاحرف لانها ثمتل مجموعة عددية لها بداية ونهاية
[A..Z]
[0..255]
اما String ليس لها بداية ولا نهاية معروفة
لكن تستطيع ان تفعل كالتالي
كود :
type
Txword=(word1,word2,word3,word4,word5,word6);
..
..
..
var
xword:=Txword;
begin
case xword of
word1:
word2:
word3:
word4:
word5:
بالتوفيق
امامك جبال من العقبات في رحلة الدلفي
انتبة تقع في اول مطب
استخدم الاطلاع والبحث
الدلفي تحتاج ممارسة يومية
انصحك ان تتعلم بهدوء خطوة خطوة
القفز لمستويات متقدمة يجعلك سريع الانهيار
اجعل اساسك قوي تصعد سريعا وبثقة
تحياتي