راسخون

آموزش برنامه نویسی اندروید

hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


پس از فراخوانی موفقیت آمیز کلاس Button در آموزش قسمت چهل و دوم، در این آموزش در ادامه ساخت اپلیکیشن "ذکر شمار مادر بزرگ" قصد داریم تا به معرفی متدهای مرتبط با کلاس Button در اندروید بپردازیم. در حقیقت با استفاده از متدهای مرتبط می بایست به اپلیکیشن خود دستور دهیم تا زمانیکه روی دکمه کلیک شد چه کاری را انجام دهد.

برای شروع کار پروژه ای که تحت عنوان My Prayer Counter ایجاد کردیم را باز کرده و همانگونه که در آموزش گذشته توضیح دادیم فایل MainActivity.java را در محیط برنامه نویسی اکلیپس باز می کنیم:

  1. package com.behzadmoradi.myprayercounter;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.Button;
  5. import android.widget.TextView;
  6. public class MainActivity extends Activity {
  7. /** Called when the activity is first created. */
  8. int counter;
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. counter = 0;
  14. TextView tView = (TextView) findViewById(R.id.txt_textTwo);
  15. Button btn = (Button)findViewById(R.id.btn_buttonOne);
  16. }
  17. }

همانگونه که در کد فوق می بینیم موفق شده ایم تا یک شیئ از روی کلاس Button که در SDK اندروید قرار دارد تحت عنوان btn بسازیم. حال از آنجا که کلاس Button را به اپلیکیشن خود import کرده ایم می توانیم به کلیه متدهای مرتبط با این کلاس دسترسی داشته باشیم. از این رو اول نام شیئ ساخته شده از روی کلاس Button را نوشته سپس یک نقطه قرار داده و همانطور که در تصویر زیر مشخص است به کلیه متدهای مرتبط با کلاس Button دسترسی خواهیم داشت. چنانچه بخواهیم دکمه ای پس از آنکه روی آن کلیک شد کاری انجام دهد به متدی تحت عنوان setOnClickListener نیاز داریم. در واقع اگر بخواهیم این متد را به صورت تحت الفظی ترجمه می کنیم بایستی بگوییم که این متد معادل است با "اگر دکمه فشار داده شد به حرف کاربر گوش بده و یه کاری انجام بده" :

همانگونه که در تصویر فوق مشخص است پس از نوشتن نام شیئی که از روی کلاس Button ایجاد کردیم و قرار دادن یک نقطه و نوشتن ابتدای نام متد مد نظر و فشردن هم زمان کلیدهای Ctrl و Space پنجره ای باز خواهد شد که کلیه متدهای مرتبط با کلاس Button را به ما نشان خواهد داد. اکنون متد مد نظر را از این لیست پیدا نموده و روی آن کلیک می کنیم. حال کد ما به شکل زیر در خواهد آمد:

در حقیقت آنچه که مابین دو پرانتز این متد قرار می گیرد به عنوان پارامتر این متد خواهد بود. به طور کلی می توان گفت که ما در حال حاضر هیچ گونه OnClickListener یی نداریم پس بایستی یکی برای این دکمه بسازیم. از این روی کلید واژه new را نوشته یک فاصله قرار داده سپس عبارت View را نوشته و کلید های Ctrl و Space را به صورت هم زمان فشار می دهیم:

همانطور که در تصویر فوق نشان داده شده است می بایست روی گزینه ای که حاوی View.OnClickListener است کلیک کنیم. در واقع از آنجا که متد OnClickListener بخشی از کلاس View است، می بینیم که ابتدا کلاس View نوشته شده و این متد به آن ضمیمه شده است:

همانطور که در کد فوق با یک فلش قرمز رنگ مشخص شده است، کلاس View به برنامه ما Import شد. جایی که با یک دایره قرمز رنگ نشان داده شده است به منزله نقطه پایانی جایی است که متدهای مرتبط با کلاس Button در آن قرار گرفته و قرار است به محض کلیک شدن روی دکمه کاری انجام دهند. اگر به داخل دایره خوب توجه کنیم می بینیم که دور پرانتز نقطه چین قرار گرفته است و این نقطه چین حاکی از آن است که مشکلی در ارتباط با این متد وجود دارد. با قرار دادن نشانگر موس خود روی نقطه چین با تصویر زیر مواجه خواهیم شد:

عبارتی که در باکس زرد رنگ وجود دارد حاکی از آن است که می بایست یک علامت ; در آن نقطه قرار داده تا دستور ما تکمیل شود. حال با قرار دادن یک علامت ; پس از پرانتز خواهیم دید که مشکل بر طرف خواهد شد:

تا اینجای کار موفق شده ایم تا متدهای لازم برای عملکرد یک دکمه را وارد برنامه کنیم. در واقع اگر به کد فوق نگاهی بیندازیم خواهیم دید که دارای یک کامنت است. محل قرارگیری این کامنت جایی است که می بایست دستورات مد نظر خود را به منظور عملی شدن آنها نوشت. به عبارت دیگر متدی تحت عنوان onClick که از جنس void است به منزله جایگاهی است که قرار است دستورات ما را در مورد دکمه اجرا کند. اکنون از آنجا قرار است هر بار که ذکری گفتیم یکبار روی دکمه کلیک کنیم تا یک واحد به تعداد ذکرها اضافه شود نیاز است تا کد خود را به شکل زیر تکمیل کنیم:

  1. package com.behzadmoradi.myprayercounter;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.TextView;
  7. public class MainActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. int counter;
  10. @Override
  11. public void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.main);
  14. counter = 0;
  15. TextView tView = (TextView) findViewById(R.id.txt_textTwo);
  16. Button btn = (Button) findViewById(R.id.btn_buttonOne);
  17. btn.setOnClickListener(new View.OnClickListener() {
  18.  
  19. @Override
  20. public void onClick(View v) {
  21. counter++;
  22.  
  23. }
  24. });
  25. }
  26. }

در واقع داخل متد onClick نام متغیر خود را نوشته و دو علامت به علاوه پس از آن قرار می دهیم و در نهایت یک علامت ; می نویسیم. این خط از کد یک واحد به مقدار متغیر counter اضافه می کند. به عنوان راه کار جایگزین می توانیم از دستور counter = couner +1; نیز استفاده کنیم (به منظور آشنایی با اعمال Operator ها به سری آموزش های برنامه نویسی جاوا در سایت نردبان آموزش هشتم مراجعه نمایید). در واقع پس از وارد کردن کلاس TextView به اپلیکیشن خود به کلیه متدهای این کلاس دسترسی خواهیم داشت. یکی از متدهایی که در این اپلیکیشن استفاده خواهیم کرد متد setText است که این وظیفه را دارا است تا متنی را به یک TextView اختصاص دهد. حال کد خود را به صورت زیر تکمیل می کنیم:

همانطور که در تصویر فوق می بینیم ابتدا نام TextView خود را نوشته سپس یک نقطه قرار داده و متد setText را می نویسیم. اگر در تصویر فوق دقت کنیم می بینیم که دوره tView نقطه چین قرار گرفته است. برای اینکه ببینیم اکلیپس با چه مشکلی رو به رو شده است، نشانگر موس خود را روی tView قرار می دهیم:

همانطور که در باکس زرد رنگ مشخص است، از آنجا که ما کلاس TextView خود را داخل کلاس تعریف نکرده بلکه داخل متد onCreate تعریف کرده ایم قابل دسترسی نیست. راه کاری که اکلیپس به ما پیشنهاد می دهد این است که tView را به final تبدیل کنیم. برای این منظور با نشانگر موس خود روی خط آبی رنگ کلیک کرده تا دستور final را عملی سازیم:

همانطور که در تصویر فوق مشخص است کلید واژه final به کلاس TextView اضافه شده است. به طور خلاصه کاری که این کلید واژه final انجام می دهد این است که کلاس TextView را محدود کرده و از این پس امکان وارثت از این کلاس از بین خواهد رفت (به منظور آشنایی بیشتر با مفهوم final به سری آموزش های زبان برنامه نویسی جاوا در سایت نردبان آموزش چهل و نهم مراجعه نمایید). به عبارت دیگر با این کار این تضمین را به اندروید خواهیم داد که هیچ کلاسی را از روی این کلاس ایجاد نخواهیم کرد. چنانچه تمایل داشته باشیم که از کلید واژه final استفاده نکنیم می توانیم کلاس TextView خود را از داخل متد onCreate به داخل کلاس MainActivity انتقال دهیم که در این صورت دیگر نیازی به نوشتن کلید واژه final نیست:

  1. package com.behzadmoradi.myprayercounter;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.widget.Button;
  6. import android.widget.TextView;
  7. public class MainActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. int counter;
  10. TextView tView;
  11. @Override
  12. public void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.main);
  15. counter = 0;
  16. tView = (TextView) findViewById(R.id.txt_textTwo);
  17. Button btn = (Button) findViewById(R.id.btn_buttonOne);
  18. btn.setOnClickListener(new View.OnClickListener() {
  19. @Override
  20. public void onClick(View v) {
  21. counter++;
  22. tView.setText("" + counter);
  23. }
  24. });
  25. }
  26. }

همانطور که در تصویر فوق مشخص است کلاس TextView در کنار متغیر counter داخل کلاس MainActivity تعریف شده است سپس داخل متد onCreate مقداری را به آن اختصاص داده ایم. اگر به تصویر فوق خوب دقت کنیم می بینیم که متد setText نیز دارای مشکلی است و دور آن نقطه چین قرار گرفته است. در واقع علت آن است که داخل آن هیچ پارامتری قرار نداده ایم و به محض اینکه پارامتری برای آن در نظر بگیریم این مشکل برطرف خواهد شد. به طور خلاصه tView شیئی است که از روی کلاس TextView ساخته شده است. این کلاس نیز به یک TextView دیگر که در فایل XML تحت عنوان txt_textTwo ایجاد کردیم لینک شده است. متدی هم تحت عنوان setText که به tView ضمیمه شده است این وظیفه را دارا است تا هرآنچه که داخل پرانتز مقابل آن قرار گیرد را به txt_textTwo اختصاص دهد. حال از آنجا که می خواهیم با هر بار کلیک شدن روی دکمه یک واحد به متغیر counter اضافه شود پس می توانیم نتیجه بگیریم که با قرار دادن متغیر counter داخل پرانتز مرتبط با متد setText می توانیم به نتیجه مد نظر دست پیدا کنیم. اکنون کد خود را به صورت زیر تکیمل می کنیم:

  1. @Override
  2. public void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.main);
  5. counter = 0;
  6. final TextView tView = (TextView) findViewById(R.id.txt_textTwo);
  7. Button btn = (Button) findViewById(R.id.btn_buttonOne);
  8. btn.setOnClickListener(new View.OnClickListener() {
  9. @Override
  10. public void onClick(View v) {
  11. counter++;
  12. tView.setText(counter);
  13. }
  14. });
  15. }

حال برنامه خود را اجرا می کنیم:

با کلیک کردن روی دکمه به علاوه قصد داریم تا یک ذکر گفته شده را به شمارنده اضافه کنیم:

به محض کلیک کردن می بینیم که اپلیکیشن اصطلاحاً Crash می کند. مسلماً مشکلی وجود دارد که از آن بی خبریم. در حقیقت بنده از یک نکته غفلت کرده و آن هم اینکه پارامتر مرتبط با متد setText حتماً می بایست چیزی از جنس یک string یا نوشته باشد که در غیر اینصورت عملکرد این متد با مشکل مواجه خواهد شد. برای رفع این مشکل می توانیم یا متنی را همچون "ذکر شمار" به پارامتر داخل پرانتز اضافه نموده و یا صرفاً یک علامت " " به متغیر counter اضافه کنیم که در این آموزش راه کار دوم را مد نظر قرار خواهیم داد:

  1. @Override
  2. public void onClick(View v) {
  3. counter++;
  4. tView.setText(""+counter);
  5. }

به عنوان یک قانون کلی همواره بایستی این نکته را مد نظر داشته باشیم که هرگاه چیزی از جنس یک string یا متن را به دیگر متغیرها مثلا یک int یا به عبارتی یک عدد صحیح اضافه کنیم جمع هر دوی آنها یک string یا متن خواهد بود. اکنون با دانستن این نکته که پارامتر مرتبط با متد setText می بایست یک string باشد به سادگی می توانیم دو علامت " " داخل پرانتز نوشته و یک علامت به علاوه پس آنها قرار داده و در نهایت نام متغیر خود را بنویسیم که با اینکار متد setText فکر خواهد کرد که داخل گیومه ها متنی وجود دارد که این مسئله هم می تواند درست باشد و هم نادرست. از دید اندروید درست است چرا که وجود این دو علامت را به عنوان یک متن تلقی خواهد کرد اما از دید ما نادرست است چرا که چیزی داخل گیومه ها نوشته نشده است. به هر حال این راه کاری است که از آن طریق می توان مشکل خود را حل کنیم. اکنون مجدد اپلیکیشن خود را اجرا می کنیم:

همانطور که در تصویر فوق مشاهده می کنیم، با هفت بار ذکر گفتن هفت واحد به شمارنده اضافه شده است.

a_sadri کاربر طلایی3
|
تعداد پست ها : 2189
|
تاریخ عضویت : آذر 1391 

با سلام و تشکر بابت قرار دادن آموزش ها

آیا امکانش هست که این آموزش ها را با زبان ++C هم قرار بدید ؟

در ضمن اگر منابعی را در مورد آموزش برنامه نویسی اندروید با زبان ++C ذکر کنید ؛ ممنون می شوم .

با تشکر

j_m2011 کاربر تازه وارد
|
تعداد پست ها : 1
|
تاریخ عضویت : دی 1389 

سلام آقای hosseinb68 و تشکر از زحمات شما. امکانش هست فایل pdf این آموزشها رو برای دانلود بذارید؟

hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


سلام آقای hosseinb68 و تشکر از زحمات شما. امکانش هست فایل pdf این آموزشها رو برای دانلود بذارید؟


با سلام و احترام خدمت شما.

تلاش می کنم در هفته جاری (13اردیبهشت به بعد) یک لینک حاوی تمامی قسمت های آموزش این تاپیک به صورت pdf بارگذاری نمایم.

موفق باشید

aftabb کاربر تازه وارد
|
تعداد پست ها : 1
|
تاریخ عضویت : تیر 1390 

با سلام
من توی برنامه ام از یک کلاس preferece استفاده کردم که یک فایل xml رو می خونه وقتی این کلاس رو اجرا می کنم همه چیز خوب پیش میره و تمام اطلاعات ثبت می شه و در دفعات دیگه اجرا هم این تغییرات قابل مشاهده است مشکل اینکه من نمی تونم این اطلاعات رو توی اکتیویتی های دیگم بازیابی کنم

 

کد فایل xml

 

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  >

      <EditTextPreference

      android:key="@string/fontname"

     android:title="Font"

     android:summary="Pleas Enter Font"

      android:enabled="true"/>

 </PreferenceScreen>

 

 

کد فایل prefs.java

 

public class Prefs extends PreferenceActivity {

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              // TODO Auto-generated method stub

              super.onCreate(savedInstanceState);

              addPreferencesFromResource(R.xml.pref);

             

       }

}

 

کد متد onCreate در متد بازیابی کننده

 

protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_main);

              SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);

              SharedPreferences.Editor editor = shared.edit();

              String string_from_sp = shared.getString(getString(R.string.fontname), "");

             

}

hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


با سلام
من توی برنامه ام از یک کلاس preferece استفاده کردم که یک فایل xml رو می خونه وقتی این کلاس رو اجرا می کنم همه چیز خوب پیش میره و تمام اطلاعات ثبت می شه و در دفعات دیگه اجرا هم این تغییرات قابل مشاهده است مشکل اینکه من نمی تونم این اطلاعات رو توی اکتیویتی های دیگم بازیابی کنم

 

کد فایل xml

 

<?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"  >

      <EditTextPreference

      android:key="@string/fontname"

     android:title="Font"

     android:summary="Pleas Enter Font"

      android:enabled="true"/>

 </PreferenceScreen>

 

 

کد فایل prefs.java

 

public class Prefs extends PreferenceActivity {

       @Override

       protected void onCreate(Bundle savedInstanceState) {

              // TODO Auto-generated method stub

              super.onCreate(savedInstanceState);

              addPreferencesFromResource(R.xml.pref);

             

       }

}

 

کد متد onCreate در متد بازیابی کننده

 

protected void onCreate(Bundle savedInstanceState) {

              super.onCreate(savedInstanceState);

              setContentView(R.layout.activity_main);

              SharedPreferences shared = getSharedPreferences("Prefs", MODE_PRIVATE);

              SharedPreferences.Editor editor = shared.edit();

              String string_from_sp = shared.getString(getString(R.string.fontname), "");

             

}


با سلام و احترام خدمت شما کاربر گرامی

در صورت امکان ، فایل سورس برنامه رو برام ایمیل کنید تا به طور کامل بررسی کنم .

email : hosseinb68_rasekhoon@yahoo.com
 

mmf5243 کاربر نقره ای
|
تعداد پست ها : 1189
|
تاریخ عضویت : فروردین 1393 

سلام

اگر امکان دارد این آموزش ها در طی چند ساعت آموزش ویدویوئی از فروشگاه عرضه شود.

ria1365 کاربر طلایی1
|
تعداد پست ها : 7868
|
تاریخ عضویت : مرداد 1389 


سلام

اگر امکان دارد این آموزش ها در طی چند ساعت آموزش ویدویوئی از فروشگاه عرضه شود.


سلام و عرض ادب

برای  تهیه اموزش های ویدیویی برنامه نویسی اندروید به ادرس زیر مراجعه و درخاست خود را به مدیر محترم  فروشگاه راسخون ارایه دهید

باتشکر

فروشگاه 

 


hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


سلام

اگر امکان دارد این آموزش ها در طی چند ساعت آموزش ویدویوئی از فروشگاه عرضه شود.


با سلام و احترام خدمت شما کاربر گرامی

با برنامه ریزی ای که صورت گرفته است . ان شاالله بعد از تعطیلات نوروز ، دوره ی آموزشی برنامه نویسی سی شارپ به صورت ویدیویی شروع خواهد شد . بعد از این دوره امیدوارم که امکان برگزاری دوره آموزشی اندروید نیز فراهم شود .

 

منتظر ارایه نظرات و پیشنهادات سازنده ی شما هستیم .

موفق باشید

nodigeh کاربر تازه وارد
|
تعداد پست ها : 20
|
تاریخ عضویت : بهمن 1389 

ممنون از پست زیباتون

yhsmiee2 کاربر تازه وارد
|
تعداد پست ها : 3
|
تاریخ عضویت : آبان 1394 

یک سوال شما نرم افزار نمونه ایی دارید یعنی از ساخت شما

 

hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


یک سوال شما نرم افزار نمونه ایی دارید یعنی از ساخت شما

 


با سلام و احترام خدمت شما

این یک نمونه برنامه ای که در بازار موجود هست

https://cafebazaar.ir/app/ir.hbaghal.android.rasekhoon/?l=fa

ALITIGER1 کاربر تازه وارد
|
تعداد پست ها : 3
|
تاریخ عضویت : مهر 1394 

سلام دوستان

بعضي ها كه زبان برنامه نويسي اندرويد رو بلد نيستن از برنامه joappبراي ساخت اپليكيشن اندرويد استفاده ميكنن در اين اين تاپيك قصد درام يكي از مشكلاتي در استفاده از اين برنامه پيش ميايد را حل كنم

حتما تا به حال سعي كرديد كه از افزونه هاي اين برنامه استفاده كنيد اما بعد از دانلود ان به دليل عدم مطابقت ورژن نرم افزار(البته اگر از اخرين ورژن ان استفاده كنيد)نميتوان از ان استفاده كرد

براي حل اين مشكل به ترتيب زير عمل كنيد

ايتدا افزونه را از سايت رسمي joappدانلود كنيد سپس انرا با استفاده از كليك راست سپس گزينه open withانرا در برنامه rarباز كنيد (اين برنامه براي باز كردن پوشه هاي zipوrarاست حتما انرا دانلود كنيد به درد بخور است و استفاده ي زيادي دارد)

روي فايلinstall.jsonكليك راست كرده و گزينه view file را انتخاب كنيد معمولا فايل را در note pad باز ميكند

به سمت راست (يا پايين)بياييد سپس joappversion را پيدا كنيد وانرا از 4.5.0به ورژن برنامه اي كه نصب كردين تغيير بديد مثال4.6.0

سپس انرا بسته گزينه yes رابزنيد و rarرا نيز بسته و گزينه yesرا بزنيد وحال به برنامه joappرفته واز قسمت مديريت افزونه نصب افزونه را انتخاب كنيد وانرا نصب كنيد

از افزونه تنها در apkحرفه اي ميتوان استفاده كرد

http://androidsaz.rasekhoonblog.com/

hosseinb68 کاربر طلایی1
|
تعداد پست ها : 1269
|
تاریخ عضویت : بهمن 1389 


سلام دوستان

بعضي ها كه زبان برنامه نويسي اندرويد رو بلد نيستن از برنامه joappبراي ساخت اپليكيشن اندرويد استفاده ميكنن در اين اين تاپيك قصد درام يكي از مشكلاتي در استفاده از اين برنامه پيش ميايد را حل كنم

حتما تا به حال سعي كرديد كه از افزونه هاي اين برنامه استفاده كنيد اما بعد از دانلود ان به دليل عدم مطابقت ورژن نرم افزار(البته اگر از اخرين ورژن ان استفاده كنيد)نميتوان از ان استفاده كرد

براي حل اين مشكل به ترتيب زير عمل كنيد

ايتدا افزونه را از سايت رسمي joappدانلود كنيد سپس انرا با استفاده از كليك راست سپس گزينه open withانرا در برنامه rarباز كنيد (اين برنامه براي باز كردن پوشه هاي zipوrarاست حتما انرا دانلود كنيد به درد بخور است و استفاده ي زيادي دارد)

روي فايلinstall.jsonكليك راست كرده و گزينه view file را انتخاب كنيد معمولا فايل را در note pad باز ميكند

به سمت راست (يا پايين)بياييد سپس joappversion را پيدا كنيد وانرا از 4.5.0به ورژن برنامه اي كه نصب كردين تغيير بديد مثال4.6.0

سپس انرا بسته گزينه yes رابزنيد و rarرا نيز بسته و گزينه yesرا بزنيد وحال به برنامه joappرفته واز قسمت مديريت افزونه نصب افزونه را انتخاب كنيد وانرا نصب كنيد

از افزونه تنها در apkحرفه اي ميتوان استفاده كرد

http://androidsaz.rasekhoonblog.com/


با سلام و احترام خدمت شما

دوست گرامی لطفاً برای ارسال مطلب جدید ، یک تاپیک جداگانه ایجاد کنید و از ارسال مطالب خود در لابه لای سایر تاپیک ها خودداری کنید

با تشکر

ALITIGER1 کاربر تازه وارد
|
تعداد پست ها : 3
|
تاریخ عضویت : مهر 1394 

ممنون از راهنماييتون

من تازه واردم