اذهب إلى المحتوى

Mohamd Imran

الأعضاء
  • المساهمات

    1070
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    15

آخر يوم ربح فيه Mohamd Imran هو يونيو 25 2020

Mohamd Imran حاصل على أكثر محتوى إعجابًا!

المعلومات الشخصية

  • النبذة الشخصية
    مبرمج ومطور مواقع بمختلف لغات البرمجة أملك خبرة بحمد الله تزيد عن ٧ سنين ,وأيضا مبرمج تطبيقات سواء ناتيف أو هايبرد ,ومبرمج تطبيقات سطح المكتب بجميع لغاتها ,خبير في إختبار الإختراق,من فلسطين - بيت لحم

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات Mohamd Imran

عضو نشيط

عضو نشيط (3/3)

455

السمعة بالموقع

47

إجابات الأسئلة

  1. بالتأكيد , هو فقط سيكون تحديث للتطبيق , أي ليس تطبيق جديد , لن يؤثر على عدد التنزيلات أو ما شابه
  2. مرحباً بك @مروان مروان3 جوجل بلاي وأبل ستور تقريباً نفس السياسة من ناحية تغيير إسم التطبيق بعد نشره أي يصبح Live , بالنسبة لجوجل بلاي إن قمت بنشر التطبيق أي بعد ما تنتهي فترة مراجعته من جوجل ويصبح متاح للتحميل من الجوجل بلاي ,أي تعديل ستقوم به سواء تحديث إسم التطبيق أو سياسة الخصوصية أو تقريباً أي شيء مشابه لذلك , سيتطلب مراجعة أخرى من جوجل بلاي وبعد أن تتم الموافقة يتم تطبيق التغييرات التي قمت بها ,أما من ناحية أبل الأبل ستور إن أردت تغيير إسم التطبيق ستحتاج إلى عمل نسخة أخرى من التطبيق أي من ال Xcode بإصدار أعلى أو أحدث من النسخة السابقة التي مرفوعة مسبقاً على المتجر ,وهذه النسخة الأخرى التي قمت بعملها ستكون كتحديث للتطبيق في المتجر وهنا يمكنك تغيير إسم التطبيق فقط , أو يمكنك تغيير إسم التطبيق في حالة أن التطبيق ليس Live أو لم تتم الموافقة عليه من أبل - أي تم رفضه - ,هذه السياسة المتبعة لكل من جوجل بلاي وأبل ستور .
  3. مرحباً @مصطفى اوريك سأوضح لك سبب ذلك ثم كيفية إصلاحه , عند إستخدام الخاصية max-width فأنها تقوم بمنع العنصر أو حاوية العنصر من زيادة حجمها عن القيمة المخصصة من خلال الخاصية width أي عندما تقوم بذلك فانك تقول إذا قيمة width زادت عن قيمة max-width قم بخفضها إلى قيمة ال max-width وإذا ال width أقل من ال max-width فقم بجعله متناسب مع قيمة width , الأن المشكلة لديك ,هي لديك العنصر الذي يحمل الكلاس search-section في سطر رقم 7 في ملف ال css في العنصر section سطر رقم 1 في ملف ال html وهو الحاوية الرئيسية لجميع العناصر التي تريدها أو التي تقع تحتها الكلاس input-content يحوي الخاصية display: flex قم بإزالتها display: flex; لأن flex تقوم بعرض العناصر كأعمدة أو صفوف ,حتى يتغير حجم ال input أو العنصر ذو الكلاس المرغوبة قم بإزالتها .الشكل النهائي يصبح هكذا .search-section { height: 100vh; align-items: center; justify-content: center; background-color: #B6D6D6; } بعد ذلك ستصبح العناصر متناسبة مع الأحجام الأخرى .
  4. مرحباً @Osamah Alghamid الطريقة العامة لربط وسيلة دفع بلغة برمجية معينة تتم من خلال أولاً الحصول على ال Api الخاص بمزود وسيلة الدفع التي ترغب بإضافتها و بعد ذلك يتم إستخدام أو إستهلاك ذلك ال Api من أجل معالجة أمور الدفع برمجياً من خلال القيام بذلك باللغة البرمجية المتناسبة مع موقعك , الأن في حالتك تستخدم ووردبريس , لإضافة وسيلة دفع في ووردبريس ستحتاج إلى عمل إضافة - Plugin وتقوم بربطها مع مزود وسيلة الدفع التي تريدها ,لكن لحسن الحظ يوجد العديد من إضافات ووردبريس المجانية أو المدفوعة المٌعدة مسبقاً أي لا حاجة لكتابة أي كود سوى تثبيت الإضافة في الموقع الخاص بك , هذه إضافة ووردبريس لوسائل الدفع التالية Mada, Visa, MasterCard,  Apple Pay يمكنك تثبيتها على موقعك بشكل مجاني هنا
  5. وعليكم السلام @Nameer نمير يمكنك تنزيل الحزمة من المتجر الخاص ب Visual Studio ثم تثبيت الحزمة على جهازك وبعدها أعد تشغيل ال Visual Studio لتنزيل الحزمة على جهازك نزلها من هنا CircularProgressBar
  6. وعليكم السلام ورحمة الله @عبدالرحمن العنزي4 ما وصفته هو ليس خاصية بمعنى الكلمة بل هي أمور يتم عملها برمجياً من قِبل أصحاب التطبيق ,ويمكن عملها بعدة طرق من خلال إستخدام ال OnClick ميثود حيث نقوم بعمل متغير من نوع int وظيفته سيقوم بجمع كم عدد المرات يلي ضغط المستخدم في على ال itemView بناء على النتيجة نقوم بإظهار نوع الإعلان الذي نريده في حالتك هوinterstitial ,والأن لإظهار الإعلان نقوم بالتالي مع إستبدال الوحدة الإعلانية بالوحدة الخاصة بك interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); الأن لنقوم بالأمر كاملاً أولاً نقوم بعمل متغير من نوع int سيحوي عدد المرات التي ضغط فيها المستخدم ال itemView فلنضع إسم المتغير clickCount وقيمته الإفتراضية 0 int clickCount = 0; والأن في ال OnClickListener نقوم بزيادة هذا المتغير مرة واحدة عند الضغط أي هكذا itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; } }); وبعدها نقوم بوضع شرط عند وصول clickCount إلى 3 نقوم بإظهار نوع الإعلان الذي نريد هكذا itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; if(clickCount == 3){ interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); } } }); وأخيراً نقوم بتغيير قيمة المتغير clickCount إلى 0 عند حصول الشرط الخاص بنا وهو وصول عدد الضغطات إلى 3 ,لكن لماذا !؟ , الجواب هو لأن المتغيير سيبقى يزداد مع كل ضغطة في ال itemView أي سيتعدى العدد 3 وهذا ما لا نريد لذلك لحل المشكلة نقوم بجعله صفر عند حصول الشرط أي هكذا الشكل النهائي (لاحظ clickCount = 0;) itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { clickCount += 1; if(clickCount == 3){ clickCount = 0; interstitial = new InterstitialAd(mContext); interstitial.setAdUnitId("ca-app-pub-*********************"); AdRequest adRequest = new AdRequest.Builder().build(); interstitial.loadAd(adRequest); interstitial.setAdListener(new AdListener() { public void onAdLoaded() { if (interstitial.isLoaded()) { interstitial.show(); } } }); } } });
  7. آه معلش أعتذر لم إنتبه إلى إنك تستخدم react native قم بإزالة الفنكشن والكود الذي ذكرته لك في تعليقي الأول وإتبع التالي لرياكت , بالنسبة للكود المرفق الخاص بك هو Objective-c ,الأن في رياكت للIOS لجعل الفيو من اليمين لليسار , قم بإضافة سطر الإستيراد التالي في أعلى الكود قبل #import "AppDelegate.h" أي هكذا #import <React/RCTI18nUtil.h> #import "AppDelegate.h" ثم بعد ذلك قم بحذف الكاش من خلال الذهاب إلى المشروع في ال Xcode ثم ضغط Command + Shift + K وبعد ذلك , قم بإضافة الأسطر التالية في الميثود didFinishLaunchingWithOptions [[RCTI18nUtil sharedInstance] allowRTL:YES]; [[RCTI18nUtil sharedInstance] forceRTL:YES]; لإجبار الفيو أن يٌعرض من اليمين لليسار didFinishLaunchingWithOptions قبل أن يتم إرجاع Yes أي هكذا في الكود الخاص بك أي هنا - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [FIRApp configure]; قبل return YES; بعد ذلك المفترض أن يعمل معك الفيو من اليمين لليسار .
  8. وعليكم السلام @أحمد ابراهيم عبد الله يعتمد ذلك على اللغة التي تستخدمها في بناء تطبيقك هل هي Swift أم Objective-c ,لكن سأفترض إنك تستخدم Swift , يمكننا جعل الView يٌعرض من اليمين لليسار أو العكس من خلال إستخدام الخاصية semanticContentAttribute يمكنك الإطلاع على مزيد من طرق الإستخدام من خلال موقع أبل الرسمي من هنا semanticContentAttribute , الأن لجعل ال view من اليمين لليسار أو العكس سنقوم بعمل فنكشن تأخذ قيمة true أو false للجعل الview من اليمين لليسار أو العكس من خلال إستخدام الخاصية semanticContentAttribute , private func setKeyWindowFromAppDelegate(makeRTL: Bool) { UIView.appearance().semanticContentAttribute = makeRTL ? .forceRightToLeft : .forceLeftToRight let appDelegate = UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate let homeController = UIViewController() appDelegate?.window?.rootViewController = homeController } ما ستقوم به الفنكشن أعلاه , هو تحويل الفيو من اليمين لليسار في حالة مررنا true أو العكس في حالة مررنا false لها ,بعدها يمكننا إستدعائها هكذا مع تمرير القيمة true , false لها setKeyWindowFromAppDelegate(makeRTL: true) طبعاً هذا بشكل مبسط لتغيير إتجاه ال View فقط , يوجد عدة أمور يجب القيام بها في حالة تريد التطبيق يدعم اللغة العربية مثل ترجمة النصوص وإستدعاءها
  9. وعليكم السلام ورحمة الله @عثمان العلي يوجد آلية واحدة بشكل عام للتحكم أو التواصل مع تطبيق أو روبوت من خلال جهاز آخر تتكون بالعادة من عميل - وسيط - عميل مستقبل , فيما يتعلق بما ذكرته أن تجعل لعبة معينة او تطبيق معين يعمل عن طريق سيرفر ,فلنفرض مثلاً تطبيق توصيل (أوبر,وغيره) عند ارسال طلب من العميل للبحث عن مركبات بجواره يصل طلبه أولاً السيرفر ومن ثم السيرفر يقوم بمعالجته بناء على برمجية معينة وفي حالتنا سيقوم بتفقد المركبات المتواجدة في الوقت الحالي والقريبة من العميل الذي أرسل الطلب وبعدها يتم إظهار تلك المركبات مثلاً ,وكذلك الأمر بالنسبة لروبوت أو لعبة عميل - سيرفر (وسيط) socket - عميل ويتم تبادل البيانات من العميل 1 إلى السيرفر ومن ثم إلى العميل 2 أو العكس ,هذا الشكل العام لهكذا نوع من التطبيقات , وبالنسبة لروبوت يختلف الأمر قليلاً لأنه يعتمد على نوع القطع المستخدمة لكن فلنفرض أن القطعة أردوينو , يوجد wifi module لإرسال وإستقبال إشارات الوايرليس وريموت تحكم سواء كانت تطبيق أو لوحة مبرمجة ,فنفس الفكرة هنا بيتم إرسال البيانات من الريموت أو جهاز الكمبيوتر (يعتمد على ما قمت بعمله ) إلى الوسيط وهو السيرفر ومن ثم السيرفر يقوم بتنفيذ تعليمات معينة بناء على ما تمت برمجته لفعله وبعدها يرسلها إلى الطرف المستقبل وهو الروبوت وبيستقبلها من خلال ال Wifi module وبينفذ التعليمات الواردة إليه سواء المشي أو إضاءة الأضواء أو التحدث إلخ..
  10. مرحباً @Amir Aoucha يختلف المسبب الرئيسي لذلك , في بعض الأحيان يكون السبب من البيانات التي يرسلها تطبيقك ربما تحتوي رموز غير مقبولة أو تتجاوز قيود معينة أو إرسال عدد معين من الطلبات يتجاوز الحد المسموح به في ثواني معينة للمزيد تعرف على ذلك من هنا الحدود القياسية , وسبب آخر يكون ربما أنك تستخدم الباكيج المجاني ويوجد حدود لذلك الإستخدام بشكل يومي أو شهري وممكن أن يكون أنك تجوزت ذلك الحد في يوم معين ومضى يمكنك التعرف الحدود الخاصة بالإستخدام للباكيج أو الحصة المجانية من هنا الحصة المجانية
  11. مرحباً @Kakao Adado نقوم أولاً بإنشاء 3 مصفوفات واحدة من نوع رقم والباقي نص , الأولى ستكون لتخزين ال id أو الرقم الذاتي والأخرى للإسم والتالية للراتب ونضع حجمها فليكن 10 عناصر , وأخيراً نقوم أيضاً بإنشاء مصفوفة ستحمل جميع بيانات المصفوفات الأخرى فلنسمها userinfo أي هكذا int[] number = new int[10]; string[] name = new string[10]; string[] salary = new string[10]; ArrayList userinfo = new ArrayList(); والأن لإضافة عامل للسجل نقوم بطباعة القيمة التي نريدها من المستخدم إدخالها متل الإسم والراتب والمعرف الذاتي وبعد ذلك نقوم بتمرير تلك البيانات بعد تخزين كل منها في مصفوفته إلى المصفوفة الرئيسية وهي userinfo أي برمجياً هكذا for (int i = 0; i < name.Length;) { Console.Write("name : "); name[i] = Console.ReadLine(); Console.Write("number : "); number[i] = Convert.ToInt32(Console.ReadLine()); Console.Write("salary : "); salary[i] = Console.ReadLine(); //هنا نقوم بإرسال البيانات أعلاه إلى المصفوفة الرئيسية userinfo.Insert(i, name[i]); userinfo.Insert(i, Convert.ToString(number[i])); userinfo.Insert(i, salary[i]); i++; //هنا قمنا بعمل ميثود ستقوم بعرض عناصر المصفوفة userinfo بعد تخزينها ShowuserData(userinfo); break; } والأن لحذف عامل أو سجل عامل من خلال المعرف الذاتي الخاص به نقوم بأخذ مدخل المستخدم وسيكون رقم وهو عبارة عن ترتيب المصفوفة على حسب البيانات الدخلة من دالة الإدخال ومن ثم نمرره للدالة RemoveAt على المصفوفة userinfo وبالتالي سنحذف بيانات ذلك المستخدم من خلال المعرف الخاص به أي هكذا Console.Write("enter the id: "); int item = Convert.ToInt32(Console.ReadLine()); itsTrue = false; userinfo.RemoveAt(item); Console.WriteLine("deleted: {0}", item); ShowuserData(userinfo); وأيضاً أضفت قائمة لإختيار ماذا تريد أن تفعل من خلال إختيار رقم الوظيفة متل بحث,حذف,إدخال ,وبعض الأمور الأخرى البسيطة اتركك تتطلع عليه ويمكن إضافة ما تريد بالتمعن في الأكواد التي كتبتها لك ,وأيضاً تجربة البرنامج using System; using System.Collections; public class Program { public static void Main(string[] args) { int[] number = new int[10]; string[] name = new string[10]; string[] salary = new string[10]; ArrayList userinfo = new ArrayList(); bool itsTrue; string help = @" #enter 1 to add Employee. #enter 2 to exit.0 #enter 3 to delete Employee #enter 4 to search"; Console.WriteLine(help); while (true) { Console.Write("==================================Employees Managment=============="); int input = Convert.ToInt32(Console.ReadLine()); if (input == 1) { for (int i = 0; i < name.Length;) { Console.Write("name : "); name[i] = Console.ReadLine(); Console.Write("number : "); number[i] = Convert.ToInt32(Console.ReadLine()); Console.Write("salary : "); salary[i] = Console.ReadLine(); userinfo.Insert(i, name[i]); userinfo.Insert(i, Convert.ToString(number[i])); userinfo.Insert(i, salary[i]); i++; ShowuserData(userinfo); break; } } else if (input == 2) { Console.Write("Hit y to Exit and n to cancel: "); string exit = Console.ReadLine().ToUpper(); if (exit == "Y") { break; } else if (exit == "N") { continue; } } else if (input == 3) { Console.Write("enter the id: "); int item = Convert.ToInt32(Console.ReadLine()); itsTrue = false; userinfo.RemoveAt(item); Console.WriteLine("deleted: {0}", item); ShowuserData(userinfo); itsTrue = true; break; } else if (input == 4) { Console.Write("enter the id: "); int search = Convert.ToInt32(Console.ReadLine()); itsTrue = false; for (int j = 0; j < name.Length; j++) { if (search == number[j]) { Console.WriteLine("name: {0}", name[j]); Console.WriteLine("number:{0}", number[j]); Console.WriteLine("salary:{0}", salary[j]); itsTrue = true; break; } } } else if (input == 5) { itsTrue = false; ShowuserData(userinfo); itsTrue = true; break; } else { Console.WriteLine("content not found."); } } } private static void ShowuserData(ArrayList users) { foreach (string item in users) { Console.WriteLine(item); } } }
  12. وعليكم السلام @Marwa Ali4 أندرويد ستديو يحوي آداة تقوم بذلك بشكل آلي أي لا حاجة لإستبدال المكتبة بما يقابلها في AndroidX بشكل يدوي لأنه أيضاً ستحتاجين إلى إستبدال بعض ال Views إلى Androidx, الأن لتحويل كامل المشروع الخاص بك إلى AndroidX الواجهات والمكتبات وأيضاً إستخداماتها في الأكواد ,ببساطة إذهبي إلى قائمة Refactor ثم إضغطي على Migrate to AndroidX في آخر القائمة , ثم ستظهر لك نافذة تفيد بأن أندرويد ستديو سيقوم بأخذ نسخة إحتياطية للمشروع قبل تحويله إلى Androidx حتى في حالة حدوث مشاكل تستطيعين الحصول على المشروع القديم , من النافذة التي ظهرت إضغطي Migrate وإتركيه لينتهي .
  13. مرحباً @ابراهيم حمدى يبدو إنك لم تقم بتنفيذ الأوامر بالشكل الصحيح حتى يتم توليد ملفات ال Production الجاهزة للرفع على السيرفر النهائي , الملفات تكون في مجلد dist هي الجاهزة للرفع إلى السيرفر مباشرة يعتمد على ما لديك من كود ,بعد تنفيذ الأمر webpack -p أو npm run build -- -p مع تغيير build إلى إسم الملف الذي لديك في ملف package.json , أو حل آخر يمكنك إضافة القيمة devServer: { writeToDisk: true, } في ملف ال config لديك , بعد ذلك الملفات الجاهزة يتم توليدها في مجلد dist
  14. @Pp مجهول سبب المشكلة الأساسي يكون هاردوير بالتحديد من كرت الشاشة الموجود في جهازك تكون تعريفاته منتهية أو قديمة أو غير مدعومة من ناحية إصدار OpenGL ,يوجد آداة تم عملها لإصلاح تلك المشكلة لبعض الأنواع من الأجهزة قم بتنزيل الكود من Save Legacy Intel OpenGL بصيغة .zip ثم بعد التنزيل قم بإستخراج الملفات وقم بتشغيل الملف python.cmd في حال كنت تستخدم python بعد ذلك قم بتنفيذ الأمر python -m pip install --ignore-installed kivy.deps.sdl2 kivy.deps.glew لتثبيت المكتبات ,أخيراً قبل كود python الخاص بك ضع الكود التالي قبله أول شيء فوق from kivy import Config Config.set('graphics', 'multisamples', '0') ما سيقوم به هو سيخبر kivy بمعلومات ال Open Gl الصحيحة لديك وبالتالي سيعمل البرنامج بدون مشاكل ,في حالة واجهت صعوبة في تطبيق الخطوات أعلاه يوجد طرق أسهل لكن النتيجة غير مضمونة 100% وهي يمكنك إستخدام Virtualbox 6.0 أو محاكي إفتراضي , أو الحل الأخر هو إستخدام إصدار أقدم من ويندوز متل Windows 8.1 أو Windows 7 أو جرب إستخدام نظام آخر مثل Linux أو mac
  15. @دانا دلول بدايتاً تطبيقات الأندرويد التي تقوم على بناء التذكيرات أو التنبيهات بخصوص أمر معين فليكن مثلاً تنبيه بخصوص موعد الدواء تعتمد برمجياً على المنبه و الإشعارات هذا بشكل ملخص ولا يوجد كود واحد لجميع تطبيق الأندرويد التي تعتمد على التنبيهات بل يمكن بناءها بعدة طرق لكن برمجياً بشكل عام يتم إستخدام AlarmManager و BroadcastReceiver لأن التنبيهات بالتأكيد ستكون عندما التطبيق يكون في الخلفية , الأن برمجياً سأضع مثال بسيط لما ذكرته في الأعلى لكن عدلي عليه بما يتناسب مع ما تحتاجين ,أولاً نقوم بعمل أوبجيكت من ال AlarmManager وأيضاً نقوم بعمل أوبجيكت من PendingIntent طبعاً بشكل ملخص AlarmManager reminder; PendingIntent reminderIntent; reminder = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmReceiver.class); reminderIntent = PendingIntent.getBroadcast(context, 0, intent, 0); reminder.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 60 * 1000, reminderIntent); //التنبيه للدقيقة القادمة ثم في ال AlarmReceiver كلاس التي قمنا بتمريرها في ال intent في الأعلى ,ما سنقوم به في الميثود onReceive الموجودة داخل كلاس AlarmReceiver نقوم بإرسال إشعار للمستخدم أو ما ترغبين به على حسب التطبيق الخاص بك public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //نقوم بإرسال إشعار من هنا أو نقوم بعمل ما نريد على حسب ما ترغبين } }
×
×
  • أضف...