delphi4arab منتديات دلفي للعرب

نسخة كاملة : كيف استعمل Case..Of
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
[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:
بالتوفيق
امامك جبال من العقبات في رحلة الدلفي
انتبة تقع في اول مطب
استخدم الاطلاع والبحث
الدلفي تحتاج ممارسة يومية
انصحك ان تتعلم بهدوء خطوة خطوة
القفز لمستويات متقدمة يجعلك سريع الانهيار
اجعل اساسك قوي تصعد سريعا وبثقة
تحياتي
الصفحات : 1 2