كيف استعمل Case..Of
#1
[COLOR="DarkGreen"]السلام عليكم ورحمة الله وبركاته

أجد صعوبه في استخدام تعليمهCase
ولم اجدها في دورة دلفي للعرب (فيديو)
كيف استخدمها ؟[/COLOR]
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#2
و عليكم السلام ورحمة الله
شاهد دروس الدورة
إن لم تخني الذاكرة الدرس الرابع
الرد
#3
فعلا اخي الفاضل هو الدرس الرابع وكان لايعمل عندي والان يعمل ولكني لم استطيع فهمها

فانا اجد سهوله لتعليمه if لان المعنى واضح (لو _ افعل ) فما معنى التعليمة case ؟
بمعنى اين الشرط ؟
ولو امكن كتابة مثال وتحويله الى جملة عربيه اي شرحه

السلام عليكم
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#4
لاحظ أخي الحبيب المثال التالي :
باستعمال 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.
وفقك الله لكل خير.
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#5
بارك الله فيك اخي الحبيب ولكن المثال يشبه ما بالدوره

هل يمكنك تغير نوع المتغير الى String حتى تصل الفكره اكثر
لاني كلما حاولت التغير في المثال أعطاني Ordinal type required

بارك الله فيك
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#6
Case يستخدم عندما يكون المتغير عدد او حرف او (set of [ asdf..fghjk])
وليس String
الرد
#7
تستطيع تحويل 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
الرد
#8
[COLOR="Purple"]انا قرأت ان Case تستخدم مع كل انواع المتغيرات ما عدا المتغير من النوع الحقيقي Real

فما المشكله مع النوع String

السلام عليكم[/COLOR]
قل إن صلاتي ونسكي ومحياي ومماتي لله رب العالمين
الرد
#9
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:
بالتوفيق
الرد
#10
امامك جبال من العقبات في رحلة الدلفي
انتبة تقع في اول مطب
استخدم الاطلاع والبحث
الدلفي تحتاج ممارسة يومية
انصحك ان تتعلم بهدوء خطوة خطوة
القفز لمستويات متقدمة يجعلك سريع الانهيار
اجعل اساسك قوي تصعد سريعا وبثقة
تحياتي
[-] كل من 1 user says قال شكرا ل cargem على المشاركة المفيدة
  • ELARAPY
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم