اقتباسعموماً إذا تعلمت إحدى اللغتين ستصاب بإحباط شديد بعد سنة أو سنتين
100% right :lol:
العمل كثير و الوقت قليل أعاننا الله
اقتباسعموماً إذا تعلمت إحدى اللغتين ستصاب بإحباط شديد بعد سنة أو سنتين
100% right :lol:
العمل كثير و الوقت قليل أعاننا الله
اقتباسشيئ اخر من خصوصيات السي و لا اظن ان اي لغة تنافسها في هدا
يمكن عمل هذا في دلفي (باسكال) :
[color= #000000; font-weight: bold;]procedure ErrorMsgBox[color= #000066;](Text[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;]; Title[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]stdcall[color= #000066;]; [color= #000000; font-weight: bold;]begin MessageBox[color= #000066;]([color= #0000ff;]0[color= #000066;], Text[color= #000066;], Title[color= #000066;], MB_ICONERROR[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]end[color= #000066;]; [color= #000000; font-weight: bold;]procedure InfoMsgBox[color= #000066;](Text[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;]; Title[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]stdcall[color= #000066;]; [color= #000000; font-weight: bold;]begin MessageBox[color= #000066;]([color= #0000ff;]0[color= #000066;], Text[color= #000066;], Title[color= #000066;], MB_ICONINFORMATION[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]end[color= #000066;]; [color= #000000; font-weight: bold;]procedure TForm1[color= #000066;].[color= #006600;]Button1Click[color= #000066;](Sender[color= #000066;]: [color= #000066; font-weight: bold;]TObject[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]var MsgBox[color= #000066;]: [color= #000000; font-weight: bold;]procedure[color= #000066;](Text[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;]; Title[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]stdcall[color= #000066;]; [color= #000000; font-weight: bold;]begin MsgBox [color= #000066;]:[color= #000066;]= ErrorMsgBox[color= #000066;]; MsgBox[color= #000066;]([color= #ff0000;]'Function pointer sample'[color= #000066;], [color= #ff0000;]'TEST'[color= #000066;])[color= #000066;]; MsgBox [color= #000066;]:[color= #000066;]= InfoMsgBox[color= #000066;]; MsgBox[color= #000066;]([color= #ff0000;]'Function pointer sample'[color= #000066;], [color= #ff0000;]'TEST'[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]end[color= #000066;];
لكني اعشق الـC .. القلب وما يهوى :P
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
اقتباسشيئ اخر من خصوصيات السي و لا اظن ان اي لغة تنافسها في هدا
يمكن عمل هذا في فيجول بيزيك (VB6) :
لكني اعشق الـC .. القلب وما يهوى :P
تم تعديل هذه المشاركة بواسطة ASPHP في 15 يناير 2009 في 05:16
راقب أفكارك ... لأنها تصبح كلمات
راقب كلماتك ... لأنها تصبح أفعالاً
راقب أفعالك ... لأنها تصبح عادات
راقب عاداتك ... لأنها تصبح شخصيتك
راقب شخصيتك ... لأنها تصبح مصيرك
جزاكم الله خيراً، وفعلاً هذه الطريقة ممكنة بالVisual Basic كما ذكر الأخ.
بالنسبة للإحباط فقد أصبت به :) ، أنا أقرأ كتاب الأستاذ سلطان ثبيتي، وكلما وصلت لفصل جديد، أقول لنفسي الآن سنودع الكونسول وننتقل إلى gui ، ولكن لا أمل :(
على كل حال صامدون :)
بالنسبة للأخ engineer22 كاتب الموضوع، يبدو أنه نسي موضوعه هنا، والله أعلم.
لكن يا (بروفيسور) خالد :) ، لم تجبني عن سؤالي، وهو: هل هناك شيء موجود في C ومفقود في c++ ؟
جزاكم الله خيراً
هذه الجملة خاطئة :wacko:
اقتباسهل هناك شيء موجود في C ومفقود في C++ ؟
بعض الليونة فقط !
لكن لا يوجد شئ مفقود منها عملياً .
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
انا اعشق printf و sprintf وفى برامج ++C استخدمهم بدلا من cout
راقب أفكارك ... لأنها تصبح كلمات
راقب كلماتك ... لأنها تصبح أفعالاً
راقب أفعالك ... لأنها تصبح عادات
راقب عاداتك ... لأنها تصبح شخصيتك
راقب شخصيتك ... لأنها تصبح مصيرك
السلام عليكم ,,
هل من الممكن أن يقوم أحد الأخوة بكتابة الكود التالي بلغته المفضلة لنرى الفرق بين اللغات في هذه الكود :
int string = 0; char* ptrString = reinterpret_cast<char*>( &string ); ptrString[0] = 'P'; ptrString[1] = 'T'; ptrString[2] = 'R'; std::cout << ptrString;
بسيط جداً مؤشر من نوع char يستلم عنوان int و يقوم بملئ الـ int بـ "PTR" ثم يتم طباعة الـ int على أنه string :)
يمنع استخدام الأسمبلي :P
اقتباسبعض الليونة فقط !لكن لا يوجد شئ مفقود منها عملياً .
جميل أتفق معك, و لكن هذه الليونة لا تؤثر على "سرعة البرنامج". يمكنني أن أريك مثالاً تصبح فيه C أبطأ من ++C بكتابة نفس الكود كل لغة على طريقتها :)
هناك ميزة تتميز بها ++C عن C, ألا و هي كتابة الـ reuseable code, دون فقدان السرعة, على عكس C في بعض الحالات :)
هذا من أفضل المقالات التي يمكن أن تقرأ حول الموضوع ::
http://theory.stanford.edu/~amitp/rants/c++-vs-c/
تحياتي ,,
_string[color= #000066;]: [color= #000066; font-weight: bold;]Cardinal[color= #000066;]; ptrString[color= #000066;]: [color= #000066; font-weight: bold;]PCHAR[color= #000066;]; [color= #000000; font-weight: bold;]begin ptrString [color= #000066;]:[color= #000066;]= [color= #000066; font-weight: bold;]PCHAR[color= #000066;]([color= #000066;]@_string[color= #000066;])[color= #000066;]; ptrString[color= #000066;][[color= #0000ff;]0[color= #000066;]] [color= #000066;]:[color= #000066;]= [color= #ff0000;]'P'[color= #000066;]; ptrString[color= #000066;][[color= #0000ff;]1[color= #000066;]] [color= #000066;]:[color= #000066;]= [color= #ff0000;]'T'[color= #000066;]; ptrString[color= #000066;][[color= #0000ff;]2[color= #000066;]] [color= #000066;]:[color= #000066;]= [color= #ff0000;]'R'[color= #000066;]; ptrString[color= #000066;][[color= #0000ff;]3[color= #000066;]] [color= #000066;]:[color= #000066;]= [color= #ff0000;]#[color= #0000ff;]0[color= #000066;]; ShowMessage[color= #000066;](ptrString[color= #000066;])[color= #000066;]; [color= #000000; font-weight: bold;]end[color= #000066;];
اقتباسجميل أتفق معك, و لكن هذه الليونة لا تؤثر على "سرعة البرنامج".
بالطبع لا تؤثر على السرعة لأن الـbin الناتج هو نفسه, انا اتكلم عن الليونة في كتابة الكود نفسه .
لا يوجد ادنى شك بأن ++C تتفوق على الـC :)
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
راقب أفكارك ... لأنها تصبح كلمات
راقب كلماتك ... لأنها تصبح أفعالاً
راقب أفعالك ... لأنها تصبح عادات
راقب عاداتك ... لأنها تصبح شخصيتك
راقب شخصيتك ... لأنها تصبح مصيرك
اعلم انه ليس بالضبط هو المطلوب :)
ولكن هذه الطريقه تسمح بالوصول المباشر لعناصر مصفوفه - كما يمكن الحصول على عنون المتغير بالداله ObjPtr
تم تعديل هذه المشاركة بواسطة ASPHP في 15 يناير 2009 في 20:30
راقب أفكارك ... لأنها تصبح كلمات
راقب كلماتك ... لأنها تصبح أفعالاً
راقب أفعالك ... لأنها تصبح عادات
راقب عاداتك ... لأنها تصبح شخصيتك
راقب شخصيتك ... لأنها تصبح مصيرك
في هدا انا اوافق الاخوة خاصة بعد ان حاولت ان اقارن برنامج كتبته ب سي مع تحويله الى سي++ و الله اصبت بالحزن
وقت كبير يضيع في جمل ال malloc و ال type casting في حين ان سي++ تتعامل ببساطة مع هده الامور :(
حول المؤشرات و عملها قمت بخربشة مثال صغير لانشاء جدول ديناميكي من ثلاث ابعاد :evil:
اعرف ان الكثيرين لن يفيدهم هدا المثال لكن ارجو ان ينفع احد الاخوة هنا
شكر خاص ل xacker و لاخي الصغير hitmanBM
اظن ان التكنيك محفوظ لنا الثلاثة :lol:
#include <stdio.h>
#include <stdlib.h>
void test(int***,int,int,int);
void fill(int ***, int , int , int );
void allocateMemory(int***, int , int, int);
int ***tab;
int nx,ny,nz;
int main()
{
nx = ny = nz = 3;
allocateMemory(tab,nx,ny,nz);
fill(tab,nx,ny,nz);
test(tab,nx,ny,nz);
printf(" \n\n\n\n\n\ntab = %d",_msize(tab));
//free(tab);
return 0;
}
void allocateMemory(int ***pArray, int nx, int ny, int nz){
int y,z;
//int *** pArray; // an array of Pointers to an array of Integers
int ***space;
space = malloc(nx * ny * nz * sizeof(int));
pArray = malloc(nz * sizeof(int **));
for(z = 0; z < nz; z++)
{
pArray[z] = malloc(ny * sizeof(int *));
for(y = 0; y < ny; y++)
{
pArray[z][y] = ((int *)space + (z*(nx * ny) + y*nx));
}
}
// dumping out the contents
for (int i=0; i < nx; i++)
{
printf ("Array[%d]
= ", i);
for (int j=0; j < ny; j++)
for (int k=0; k < nz; k++)
printf ("%d ", pArray[j][k]);
printf ("\n");
}
printf("\n\n pA = %d",_msize(pArray));
printf("\n\n space = %d",_msize(space));
tab = pArray;
//free(pArray);
free(space);
}
void test (int ***tab, int x, int y, int z)
{
printf("\n\n\n");
for (int i = 0; i < z; i++)
for (int j = 0; j < y; j++)
for (int k = 0; k < x; k++){
printf("%d\n", tab[j][k]);
}
}
void fill(int ***tab, int x, int y, int z)
{
for (int i = 0; i < z; i++)
for (int j = 0; j < y; j++)
for (int k = 0; k < x; k++){
tab[j][k]=i;
}
}اظن ان هده المناقشة سوف تتحول الى نواة كتاب برمجي مثير للاهتمام
على فكرة البرنامج اكيد انه يحتوي على اخطاء لان الكثير من التغييرات لم تحفظ بسبب انقطاع الكهرباء :(
من يحوله الى سي++ لعمل المقارنة :lol: :angry:
اظن انه حان الوقت لاحاول ان اتكيف مع سي++ -_-
على فكرة لم اجرب البرنامج على GCC لانني افضل ان اعمل على PellesC
تم تعديل هذه المشاركة بواسطة fkugd2003 في 16 يناير 2009 في 16:32
العمل كثير و الوقت قليل أعاننا الله
للأسف أنا ما زلت مبتدئاً ولم أفهم الكود كثيراً لأحوله.
لكن أحب أن أضيف سؤالين:
1- من المعلوم أن c++ تدعم البرمجة غرضية التوجه، فهل تدعمه C ؟
2- هل تعطي c++.net ميزات على c++ ، وما هي؟
جزاكم الله خيراً
هذه الجملة خاطئة :wacko:
اقتباس1- من المعلوم أن C++ تدعم البرمجة غرضية التوجه، فهل تدعمه C ؟
لا للاسف حسبما اعرف -_-
اقتباس- هل تعطي c++.net ميزات على C++ ، وما هي؟
تعطيك القدرة على استعمال الدوت نت :lol:
العمل كثير و الوقت قليل أعاننا الله
السلام عليكم ,,
أخ fkugd2003 :)
هذا على طريقة ++C, و لكنه أرجو أن لا يكون هناك تسرب للذاكرة :lol: لأني كتبت الكود بسرعة,,
#include <iostream>
int main(){
const int L = 3;
int*** numCube = new int**[ L ];
for( int x = 0; x < L; x++ )
numCube[x] = new int*[ L ];
for( int x = 0; x < L; x++ )
for( int y = 0; y < L; y++ )
numCube[x][y] = new int[ L ];
for( int x = 0; x < L; x++ )
for( int y = 0; y < L; y++ )
for( int z = 0; z < L; z++ )
std::cout << (numCube[x][y][z] = z + y*L + x*L*L) << std::endl;
for( int x = 0; x < L; x++ )
for( int y = 0; y < L; y++ )
delete[] numCube[x][y];
for( int x = 0; x < L; x++ )
delete[] numCube[x];
delete[] numCube;
return 0;
}في الحقيقة أن ما تراه في الأعلى هو كود ++C على طريقة مبرمجي C :lol: سوف أحاول كتابة المكعب باستخدام STL بعد قليل و أضع الكود بإذن الله :)
========================
اقتباس1- من المعلوم أن c++ تدعم البرمجة غرضية التوجه، فهل تدعمه C ؟
لغة C لا تعرف معنى كلمة "الحدود", هي في قلبها لا توفر طريقة للبرمجة الكائنية, و لكن هناك العديد من المقالات التي تريك كيف تنفذ oop باستخدام pure C :lol:
ضع في google التالي : polymorphism in C أو inheritance in C
++C توفر لك تلك الطرق مع فعالة و مرونة أكبر بكثير طبعاً, أعتقد أن هناك بعض الأمور في oop لا يمكن فعلها بالـ C و لا بد للمترجم أن يكون على وعي ببعض تلك الأمور, لست متأكداً :)
اقتباس2- هل تعطي c++.net ميزات على c++ ، وما هي؟
أعتقد أنها أفشل لغة عرفتها البشرية :lol:
لا تسألني لماذا و لكن إن كنت سأبرمج للـ NET. فأرى أن أستخدم #C أو VB.NET,
الحقيقة تعلمت القليل و لكن تلك البداية لم تكن مبشرة أبداً فهي خليط من ++C و بعض الخزعبلات من ميكو :lol:
عموماً فكرة ترجمة ++C للغة الآلة الافتراضية لم تنجح و لن تنجح برأيي, و بالمناسبة حاول البعض فعل نفس الشيء مع C و ترجمة الكود إلى Java Virtual Machine فشلو لأسباب تقنية تتعلق بالتعامل الحر مع الذاكرة في C :lol:
لا أعارض الـ NET. بل على العكس أشجع على البرمجة على منصة محترمة كهذه توفر كل ما يريده المبرمج و أكثر و لكن ليس بـ ++C :)
السلام عليكم
حوار جميل وراق جدا
ارجو من
fkugd2003
ان يوضح لنا الظاهر الجديدة
c--
*/عاشت الاسماء/*
المهم نريد رابط او كود بسيط
وشكرا
اللهم صلي علي المصطفي محمد
صلي الله عليه وسلم
اقتباسلغة C لا تعرف معنى كلمة "الحدود", هي في قلبها لا توفر طريقة للبرمجة الكائنية, و لكن هناك العديد من المقالات التي تريك كيف تنفذ oop باستخدام pure C
صحيح, هذا ما يعتمده كثير من مطوري الدرايفرز حيث تتم الكتابة بلغة C لكن الفكرة العامة تعتمد على مفهوم OOP .
حتى نواة الـNT مكتوبة بهذا المفهوم مع انها بلغة C .
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
السلام عليكم ,,
هذه هي طريقتي في كتابة الكود الذي ذكر باستخدام STL vector :
#include <iostream>
#include <vector>
int main(){
const int L = 3;
std::vector<int> x( L, 0 );
std::vector< std::vector<int> > y( L, x );
std::vector< std::vector< std::vector<int>>> z( L, y );
for( int i = 0; i < L; i++ )
for( int n = 0; n < L; n++ )
for( int m = 0; m < L; m++ )
std::cout << (z[n][m] = m + n*L + i*L*L) << std::endl;
return 0;
}هل رأيت البساطة :P
vector سوف يقوم بحجز و تنظيف الذاكرة بدلاً عن المبرمج :)
العيب الوحيد و الذي أكرهه في الـ templates هو الـ syntax المزعج جداً,
بالمناسبة L يمكن أن تحددها وقت تشغيل البرنامج :) و ليس شرطاً أن تكون ثابتاً,,
اقتباسصحيح, هذا ما يعتمده كثير من مطوري الدرايفرز حيث تتم الكتابة بلغة C لكن الفكرة العامة تعتمد على مفهوم OOP .حتى نواة الـNT مكتوبة بهذا المفهوم مع انها بلغة C .
GM
قرأت الذي كتبته حول الـ Native Applications :wink: رائع يا ماستر :)
تحياتي ,,
اقتباسالسلام عليكمحوار جميل وراق جدا
ارجو من
fkugd2003
ان يوضح لنا الظاهر الجديدة
c--
*/عاشت الاسماء/*
المهم نريد رابط او كود بسيط
وشكرا
ادا كان بالامكان اصبر علي حوالي الساعة سوف اكتب لك بعض الشرح :lol:
اخي خالد مممم سي++ لديدة كما قلت
العمل كثير و الوقت قليل أعاننا الله
أنا ما عاد لحقت :eek:
أنا بانتظار الـc-- ، بس خايف منها.
إن شاء الله سوف أبحث عن هذا في google .
فقط سؤال صغير إضافي، ما مميزات C و c++ مع قواعد البيانات؟ وهل توفر مرونة في التعامل معها؟
هذه الجملة خاطئة :wacko:
اظن ان اخي عزيز اصبح مهتما بهده اللغة
الحقيقة سي-- ليست لغة جديدة الا ان المبرمجين لم يسمعوا بها من قبل حتى انا و لم اكن اعرفها من قبل (الشكر لاحد الاصدقاء المصابين بجنون الهاردوير)...
سي-- عبارة عن لغة برمجية تحتوي على دمج للغة سي و اسمبلي.. لديدة
في استطاعتك ان تكتب الكود البرمجي بسي مباشرو و ادخال التعليمات الخاصة بالاسمبلي مباشرة داخل الكود
اظن ان الدعم اصبح كاملا لجميع التعليمات
كما ان الملف التنفيدي الناتج صغير نسبيا و قريب من الاسمبلي في الحجم
حاليا حسب ما اعرف فانها موجودة لدوس و ويندوز و هناك نسخة طورت من اجل منويت اوس و الدي يبقى الداعم الوحيد لها
لنجرب ان نكتب برنامج غبي جدا كعادة امثلتي :lol:
لنبدا بالتعاريف البسيطة :
#pragma option w32 //لانتاج برنامج ويندوز دو واجهة رسومية #pragma option dbg //لاجبار المترجم ان ينتج معلومات التنقيح #pragma option w //تفعيل الاعلام بالتحديرات #pragma option 3 //هده سهلة معالج 386 #include "windef.h--" #include "winbase.h--" //kernel32.dll #include "wingdi.h--" //gdi32.dll #include "winuser.h--" //user32.dll #include "commctrl.h--" //comctl32.dll #include "commdlg.h--" //comdlg32.dll #include "shellapi.h--" //shell32.dll #pragma option ia // حينما نريد ادخال الاسمبلي الى البرنامج "asm" "$" لاعلام المترجم اننا لن نحتاج الى
لم احضر شيئ جديد لانني فقط قمت باعادة نقل احد الدروس لبرمجة الواجهات و نقلته الى سي—
لمزيد من المعلومات يمكن ان تراجع دروس
و الان لنعرف بعض المتغيرات
ساحاول ان ارفق الموافق بلغة سي لكل عبارة
dword hinst=0; // HINSTANCE hinst
dword hwnd=0; // HWND hwnd
struct WNDCLASS wndclass; // WNDCLASS wc;
struct MSG msg; // MSG msg;
char szTitleName="a stupid program";
char szClassName="fkugd2003"; // char szClassName[] = " fkugd2003";
main()
{
GetModuleHandle(NULL); //hinst=GetModuleHandle(NULL);
mov hinst,eax
// initialize the WndClass structure...
mov wndclass.style,CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS //wndclass.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;
mov wndclass.lpfnWndProc,#WNDproc //wndclass.lpfnWndProc=&WNDproc;
mov wndclass.cbClsExtra,0 //wndclass.cbClsExtra=wndclass.cbWndExtra=0;
mov wndclass.cbWndExtra,0
mov eax,hinst //wndclass.hInstance=hinst;
mov wndclass.hInstance,eax
LoadIcon(hinst,IDI_APPLICATION);
mov wndclass.hIcon,eax
LoadCursor(NULL,IDC_ARROW);
mov wndclass.hCursor, eax
GetStockObject(BLACK_BRUSH);
mov hblackbrush,eax
mov wndclass.hbrBackground,eax
mov wndclass.lpszMenuName,#szClassName
mov wndclass.lpszClassName,#szClassName
RegisterClass(#wndclass); //if(!RegisterClassEx(&wndclass))
test eax,eax
jnz NOT_END
jmp exit
NOT_END:
CreateWindowEx(0,#szClassName,#szTitleName,WS_OVERLAPPEDWINDOW,5,5,300,200,0,0,hinst,0);
test eax,eax
jz exit //exit if eax=0.
mov hwnd,eax
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
msg_loop:
GetMessage(#msg,0,0,0);
or eax,eax //cmp eax,0
je exit
TranslateMessage(#msg);
DispatchMessage(#msg);
jmp msg_loop
exit:
ExitProcess(msg.wParam);
}
dword WNDproc(dword hwnd,wmsg,wparam,lparam)
{
struct PAINTSTRUCT s3;
dword hdc;
dword hbrushsaved;
switch(wmsg)
{
case WM_CLOSE:
DestroyWindow(#hwnd);
case WM_DESTROY:
PostQuitMessage(0);
//...main() will get this and call ExitProcess() (see above).
break;
default:
DefWindowProc(hwnd,wmsg,wparam,lparam);
jmp short getout
}
xor eax,eax
getout:
}البرنامج يظهر انه مرعب الشكل و غريب لكن ادا راجعتم دروس iczelion سوف تتوضح الصورة
ما رأيكم??
http://sourceforge.net/projects/c--/
موقع الكمبايلر المفتوح
http://c--sphinx.narod.ru/compil_e.htm
نسيت المرفقات :lol:
تم تعديل هذه المشاركة بواسطة fkugd2003 في 17 يناير 2009 في 01:32
العمل كثير و الوقت قليل أعاننا الله
fkugd2003
رائع جدا بارك الله فيك
من الملاحظة الاولي انها مثل
msam32
مزيج من التعليمات بالاسمبلي ودوال
api
المربك هو الكود يعني لولا وجود التعليقات لكن شيئ اخر
والامر يمكن حله طبعا بمعرفة قواعد اللغة وبعض الممارسة ويزول الغموض
ان شاء الله لما انهي كتاب الهندسة العكسية ل
at4re
ساطلع اكثر علي هده اللغة لاني من المهتمين بالاسمبلي والسي
وهداللغه جات ولمتهم مع بعض
يعني يسعد من لم راسين في الحلال
طبعا لك جزيل الشكر
fkugd2003
اللهم صلي علي المصطفي محمد
صلي الله عليه وسلم
بارك الله فيك اخي عزيز
لا تنس ان تضع ملاحظاتك في المنتدى عندما تبدأ بالتعلم لعلك تنفع بها احد الاخوة :lol:
ممممم صرنا اثنين من يريد ان يجرب و يكون الثالث :lol:
العمل كثير و الوقت قليل أعاننا الله
مشكورين اخوان
الحقيقة كفيتوا ووفيتوا ...