• 0
MOHAMED FATHY BASHA

الأرقام بين العربية والانجليزية

سؤال

بسم الله

أخوانى الكرام قد تناولت موضوع استقبال الأرقام باللغة العربية فى موضوع اخر فى المنتدى

ولكنه لم يستقبل مشاركات كثيرة ربما لانه كان غامضا بعض الشئ

لأنه حتى أنا صاحب الموضوع ظلت عندى مشكلة وهى انى لا أستطيع تحويل الأرقام العربية الى النوع Double

ولكن الان وبعد البحث توصلت للحل ففكرت ان نعرضه ولكن بالشرح والتفصيل لعله يفيد أحد الزملاء

أولا : لتحويل الأرقام الى اللغة العربية نستخدم الفئة java.awt.font.NumericShaper

والتى تحتوى على دالة نقوم من خلالها باستدعاء هذه الفئة ولكن بلغة معينة وتسمىgetShaper

والتى تستقبل متغير من نوع رقم int ويمثل نوع اللغة التى تريد التحويل اليها

وهذه المتغيرات معرفة داخل الفئة الام مسبقا مثل NumericShaper.ARABIC وهو للتغيير الى اللغة العربية

اذا لعمل فئة خاصة نستخدمها دائما فى تحويل الأرقام ولنسميها myConverter

سيكون الكود الى الان كما يلى


import java.awt.font.NumericShaper;
public class myConverter {
NumericShaper shaper=null;
public void useShaper(){
shaper=NumericShaper.getShaper(NumericShaper.ARABIC);// for arabic numbers
}

هذا هو الكود الاولى

ولكننا نريد استخدامها فى تغيير نصوص من فئات أخرى نقو م بارسالها اليها باللغة الانجليزية ثم نستقبلها منها مرة أخرى بعد تحويلها الى العربية

اذا سنجرى بعض التعديلات على الكود ليصبح كالتالى


import java.awt.font.NumericShaper;
public class myConverter {
static NumericShaper shaper=null;
public static String useShaper(String englishText){
if(englishText.isEmpty()) return "";// check on text
shaper=NumericShaper.getShaper(NumericShaper.ARABIC);// for arabic numbers return "";
}
}

وطبعا عرفنا الدالة والمتغير NumericShaper بالكلمة static لكى نستطيع مناداتها من مكان اخر مباشرة بدون استدعاء الفئة كلها ثم استدعاء الدالة

والمسئول عن تحويل الارقام فى الفئة java.awt.font.NumericShaper هى دالة تسمى shape

وهى تستقبل 3 متغيرات الاول وهو مصفوفة من الحروف char array تمثل الحروف التى تريد تحويلها

والثانى فهرس الحرف او رقم الحرف index الذى تريد ان تبدأ من عنده التحويل

والثالث فهرس الحرف الذى تريد التوقف عنده

وبهذا سنعدل الكود ليصبح كما يلى


public class myConverter {
static NumericShaper shaper=null;
static char[] text=null;
public static String useShaper(String englishText){
if(englishText.isEmpty()) return "";// check on text
shaper=NumericShaper.getShaper(NumericShaper.ARABIC);// for arabic numbers
text=String.valueOf(englishText).toCharArray();// convert text to char array
shaper.shape(text,0,text.length);
return String.valueOf(text);// convert char array to text
}
}

أظن الكود بسيط ولا يحتاج لشرح الان يمكننا استخدام هذه الفئة للتحويل ولهذا سنكتب المثال التالى

 
import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class runExample extends JFrame {
private JTextField arabicField = new JTextField();
public runExample() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(435, 311));
this.setTitle("الأرقام بين العربية والانجليزية");
arabicField.setBounds(new Rectangle(68, 111, 295, 60));
this.getContentPane().add(arabicField, null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
}
public static void main(String[] args){
new runExample().setVisible(true);
}
}

هذا المثال بسيط جدا يحتوى على صندوق نص واحد فقط والباقى اعدادات النافذة نفسها

والان نريد ان نحول الأرقام التى يقوم المستخدم بادخالها فى الحقل arabicField الى أرقام عربية

وهنا يمكن ان يقول البعض نقوم بعمل متنصت Event Listener على الحقل يقو م بتغيير النص ثم اعادة كتابته فى الحقل

واقرب حل هو استخدام المتنصت عند ضغط اى مفتاح من لوحة المفاتيح KeyListener ونستخدم الدالة keyPressed

وهذا الحل صحيح ولكن ماذا لو قام المستخدم بنسخ نص من مكان اخر ثم لصقه فى هذا الحقل (جرب)

ولهذا سنستخدم المستند Document الموجود داخل الحقل وذلك بمراقبته قبل ادخال النص وهذه أقوى طريقة

ويتم هذا بعمل كائن من javax.swing.text.PlainDocument ونقوم باعادة كتابة Override الدالة المسئولة عن ادخال النص insertString

ونقوم باستخدام الدالة التى صنعناها للتحويل لتحويل النص قبل ادخاله الى الحقل وبهذا نضمن تنفيذ هذه العملية سواء مع الكتابة بلوحة المفاتيح أو نسخ ولصق النصوص

ليصبح الكود كما يلى


import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class runExample extends JFrame {
private JTextField arabicField = new JTextField();
public runExample() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(435, 311));
this.setTitle("الأرقام بين العربية والانجليزية");
arabicField.setBounds(new Rectangle(68, 111, 295, 60));
this.getContentPane().add(arabicField, null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false); // -------- note this part -----------------
arabicField.setDocument(new PlainDocument(){
public void insertString(int offset,String newText,AttributeSet a) throws BadLocationException{
super.insertString(offset,myConverter.useShaper(newText),a);
}
});
}
public static void main(String[] args){
new runExample().setVisible(true);
}
}

الان يمكنك تجربة المثال الذى صنعته ومحاولة كتابة اولصق ارقام او نصوص تحتوى على أرقام فى هذا الحقل ( ماذا تلاحظ؟ )

هكذا اتممنا النصف الأول من الموضوع وهو تحويل الأرقام الى اللغة العربية

// ***********************************************************

الان نريد ان نستخرج بيانات من نوع Double من الارقام التى يتم ادخالها فى مربع النص arabicField

واستخدامها فى اشياء اخرى وليكن مبدئيا اظهارها فى صندوق حوارى باستخدام JOptionPane

ولهذا سنقوم بتعديل الكود ليصبح هكذا


import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
public class runExample extends JFrame {
private JTextField arabicField = new JTextField();
private JButton jButton1 = new JButton();
String myText="";
double result=0;
public runExample() {
try {
jbInit();
}
catch (Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(435, 311));
this.setTitle("الأرقام بين العربية والانجليزية");
arabicField.setBounds(new Rectangle(68, 111, 295, 60));
this.getContentPane().add(jButton1, null);
this.getContentPane().add(arabicField, null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false); // -------- note this part -----------------
arabicField.setDocument(new PlainDocument(){
public void insertString(int offset,String newText,AttributeSet a) throws BadLocationException{
super.insertString(offset,myConverter.useShaper(newText),a);
}
});
jButton1.setText("حول الى Double");
jButton1.setBounds(new Rectangle(103, 205, 225, 35));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
}
public static void main(String[] args){
new runExample().setVisible(true);
}
private void jButton1_actionPerformed(ActionEvent e) {
try{
myText=arabicField.getText().trim();
result=Double.parseDouble(myText);
JOptionPane.showMessageDialog(this,result);
}
catch(Exception ex){
JOptionPane.showMessageDialog(this,ex.getMessage());
}
}
}

ماذا تلاحظ ؟

لا يمكن تحويل الارقا م العربية الى النوع Double

وهذه هى المشكلة ولحل هذه المشكلة يجب ان نقوم بتحويل الارقام الى اللغة الانجليزية أولا

وهنا نبدأ البحث عن طريقة لتحويل الأرقام من العربية الى الانجليزية

طبعا الكل سيقول ولم البحث كل ماعلينا فعله هو تغيير نوع المتغير الذى ارسلناه الى الدالة المسئولة عن تحويل الارقام الى العربية ونجعلها تحول الارقام الى الانجليزية

وهذا هو الحل الطبيعى ( أرجو منك ان تجربه )

فمثلا بدلا من كتابة السطر التالى

 shaper=NumericShaper.getShaper(NumericShaper.ARABIC);// for arabic numbers 

نقوم بكتابة سطر اخر ( حاول كتابته انت فليس لدى ما أكتبه هنا واذا نجحت اعرضه الله يجزيك خير )

والان بعد اذنكم أخد ريست لان الكتابة باللغة العربية ترهقنى ونكمل فى المشاركة الثانية

سلام

تم تعديل بواسطه علاء الصالحي
ضبط الأسطر في الشيفرة و إضافة الجملة التال&#1
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

17 إجابة على هذا السؤال .

  • 1

معذرة على التأخير

رائع جدا أخ علاء :thumb_up:

وشكرا على ذكر اسمى فى الموضوع

للامام دائما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بسم الله

هل حاولت الحل ولم تنجح محاولتك ؟

عالعموم بالبحث وجدت أحد الزملاء قدم الحل التالى على موقع Sun فى اجابته على سؤال لزميل اخر

وقد قمت ببعض التعديلات على الكود لأتمكن من استخدامه

وبعد اضافته الى الفئة الخاصة بنا myConverter والتى أنشأناها لاستخدامها فى تغيير الارقام يصبح الكود كالتالى






import java.awt.font.NumericShaper;

public class myConverter {
static NumericShaper shaper=null;
static char[] text=null;
final static char zero=0,one=1,two=2,three=3,four=4,five=5,six=6,seven=7,eight=8,nine=9;

public static String useShaper(String englishText){

if(englishText.isEmpty()) return "";// check on text

shaper=NumericShaper.getShaper(NumericShaper.ARABIC);// for arabic numbers
text=String.valueOf(englishText).toCharArray();// convert text to char array
shaper.shape(text,0,text.length);

return String.valueOf(text);// convert char array to text

}

public static String englishChar(String arabicText){

if(arabicText.isEmpty()){
return "";
}

char[] values=new char[arabicText.length()];

char ch;

for(int i=0;i< values.length ;i++){
ch=arabicText.trim().charAt(i);

if(ch== zero+1632){
values[i]='0';
}else if(ch==one+1632){
values[i]='1';
}else if(ch==two+1632){
values[i]='2';
}else if(ch==three+1632){
values[i]='3';
}else if(ch==four+1632){
values[i]='4';
}else if(ch==five+1632){
values[i]='5';
}else if(ch==six+1632){
values[i]='6';
}else if(ch==seven+1632){
values[i]='7';
}else if(ch==eight+1632){
values[i]='8';
}else if(ch==nine+1632){
values[i]='9';
}else{
values[i]=ch;// no change
}
}

return String.valueOf(values);
}

}




وهنا قمنا باضافة دالة بسيطة جدا تقوم بمقارنة الحروف الموجودة داخل النص الذى نريد تحويله ومقارنته بالارقام العربية

فاذا وجدت احدهم استبدلته بالرقم الانجليزى المقابل له

والان نحاول اختبار هذه الدالة وذلك باستخدامها فى النافذة التى صنعناها لتجربة البرنامج (runExample)

ونقوم بتحويل النص الموجود فى مربع النص arabicField الى أرقام انجليزية قبل تحويلها الى النوع Double

وبهذا يصبح الكود كالتالى بعد تعديله





import java.awt.Dimension;

import java.awt.Rectangle;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class runExample extends JFrame {
private JTextField arabicField = new JTextField();

private JButton jButton1 = new JButton();
String myText="";
double result=0;

public runExample() {
try {
jbInit();
} catch (Exception e) {
e.printStackTrace();
}
}

private void jbInit() throws Exception {
this.getContentPane().setLayout( null );
this.setSize(new Dimension(435, 311));
this.setTitle("الأرقام بين العربية والانجليزية");
arabicField.setBounds(new Rectangle(68, 111, 295, 60));
this.getContentPane().add(jButton1, null);
this.getContentPane().add(arabicField, null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setResizable(false);
// -------- note this part -----------------
arabicField.setDocument(new PlainDocument(){
public void insertString(int offset,String newText,AttributeSet a) throws BadLocationException{
super.insertString(offset,myConverter.useShaper(newText),a);
}
});
jButton1.setText("حول الى Double");
jButton1.setBounds(new Rectangle(103, 205, 225, 35));
jButton1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
}

public static void main(String[] args){
new runExample().setVisible(true);
}

private void jButton1_actionPerformed(ActionEvent e) {

try{
myText=arabicField.getText().trim();
String english=myConverter.englishChar(myText);// reconvert to english numbers
result=Double.parseDouble(english);

JOptionPane.showMessageDialog(this,result);

}catch(Exception ex){
JOptionPane.showMessageDialog(this,ex.getMessage());
}

}
}



الان يمكننا تجربة البرنامج وذلك بادخال رقم فى مربع النص وليكن رقم 10 مثلا

ثم نضغط على الزر الموجود فى النافذة فتظهر لنا النتيجة فى صندوق الحوار 10.0

وهذا يدل على نجاح عملية التحويل الى Double

وهو المطلوب اثباته #

طبعا هذا مجرد توضيح للفكرة ويمكننا استخدامها بطرق اخرى كثيرة

على فكرة انا كتبت هذا الموضوع لانى كنت محتاجه وما وجدته فعندما وجدته فكرت ان أكتبه لاوفر على غيرى البحث وتضييع الوقت

فان كان مفيدا فانا كتبته لهذا الغرض وان لم يكن مفيدا فانا أسف على الازعاج

وشكرا لمروركم الكريم

بالتوفيق

تم تعديل بواسطه MOHAMED FATHEI
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا .

حقيقة مجهود رائع وجهد مشكور .

بارك الله فيك ، وثق تماما بأن هناك الكثير ممن سوف يستفيدون من هذا العمل الرائع .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

شكرا لك اخى rohaili على هذه المشاركة الجميلة

وتثبيت الثقة وشكرا لمرورك الكريم

وفقك الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولاً أحب أن أشكرك على مجهوداتك الفعالة هنا في القسم

ثانياً لو أردت تحويل الموضوع إلى حزمة فيجب عليك أن تتأكد من نقطتين

ممكن أن نقول ملاحظتين بسيطتين فقط أحب أن ألفت نظرك لهم

1- قد يقوم المستخدم بإدخال شيء آخر غير الأرقام

ما سلوك حزمتك تجاه هذه المشكلة؟

2- لو كان البرنامج الذي يستخدم حزمتك عبارة عن برنامج متعدد الخيوط

هل حزمتك آمنة للاستخدام؟

لو أحببت أن نناقش هذه الأشياء فأنا جاهز

أتمنى لك التوفيق

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أولاً أحب أن أشكرك على مجهوداتك الفعالة هنا في القسم

العفو أخ علاء كما استفدنا يجب أن نفيد

1- قد يقوم المستخدم بإدخال شيء آخر غير الأرقام

ما سلوك حزمتك تجاه هذه المشكلة؟

عندما عرضت الموضوع كنت أريد عرض فكرة تحويل الأرقام فقط

ولم أقم بزيادة أى شئ فى الكود حتى يكون الموضوع واحد ويسهل على القارئ فهمه

أما بالنسبة لاحتمال أ ن يقوم المستخدم بادخال حروف فقد قمت بعمل validation على المدخلات فى الكود الخاص بى

وهو باضافة دالة بسيطة جدا وهى كما يلى





public boolean isDouble(String text){
try{
Double.parseDouble(myConverter.englishChar(text));
return true;
}catch(Exception ex){
return false;
}
}


وأقوم باستدعائها للكشف على النص المدخل من قبل المستخدم علاوة على النص القديم وذلك فى الدالة insertString

لتصبح هكذا





arabicField.setDocument(new PlainDocument(){
String oldText="";
public void insertString(int offset,String newText,AttributeSet a) throws BadLocationException{
oldText=arabicField.getText().trim();
if(isDouble(oldText+newText)){
super.insertString(offset,myConverter.useShaper(newText),a);
}
}
});


وأظن أنها كافية أليس كذلك؟

2- لو كان البرنامج الذي يستخدم حزمتك عبارة عن برنامج متعدد الخيوط

هل حزمتك آمنة للاستخدام؟

اما هذه النقطة لا اعرف ماذا تقصد بها

هل تقصد انى اذا حاولت استخدام هذه الفئة فى أكثر من خيط فى نفس الوقت سيحدث Exception ؟

وشكرا لمرورك الكريم

تم تعديل بواسطه MOHAMED FATHEI
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بالنسبة للنقطة الأولى

اجعل الحزمة الخاصة بك تقوم بفحص الخطأ لا المستخدم

بالنسبة للنقطة الثانية

لن يصدر أية أخطاء Exception وإنما ستحصل على نتائج خاطئة

المشكلة أنك تتعامل مع نفسه

فلما يقوم أكثر من خيط بطلب نفس الدالة

وتحصل مشاكل كثيرة

على العموم سأقوم بتعديل الفئة لتصبح حزمة كاملة طبعاً بعد إذنك

تحياتي

تم تعديل بواسطه علاء الصالحي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طبعا يمكنك تطويرها أخ علاء كما تحب

وياريت تعرضها علينا بعد تطويرها

وشكرا لك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

قمت ببعض التعديلات على الحزمة الحالية

أضفت بعض الدوال والثوابت

قمت بتضمين Exception

قمت بحل مشكلة تعدد الخيوط

وها هي حزمة كاملة صحيح أنها بسيطة لكنها مفيدة للمستخدم

بأمانة دوري في الحزمة كان مجرد إضافات لا تذكر

وأتمنى أن يسمح لي الأخ محمد بعرضها في مدونتي

اقترح لها اسم أداة الأرقام العربية Arabic Numbers Utility

وأترك الاسم النهائي لمحمد

تحياتي

ArabicNumbers.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حقيقة شرح رائع ومجهود جبار وشكرا لكل من الاخ محمد والاخ علاء

حقيقة مجهود رائع وشرح اروع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

وها هي حزمة كاملة صحيح أنها بسيطة لكنها مفيدة للمستخدم

بأمانة دوري في الحزمة كان مجرد إضافات لا تذكر

وأتمنى أن يسمح لي الأخ محمد بعرضها في مدونتي

اقترح لها اسم أداة الأرقام العربية Arabic Numbers Utility

وأترك الاسم النهائي لمحمد

يا أخ علاء أنا اللى كان دورى مجرد الفكرة ولكن بعد التعديلات التى قمت بها تغيرت الحزمة تماما

وأتمنى أن يسمح لي الأخ محمد بعرضها في مدونتي

بل انت اسمح لنا باستخدامها بصراحة مجهود تشكر عليه

حقيقة شرح رائع ومجهود جبار وشكرا لكل من الاخ محمد والاخ علاء

حقيقة مجهود رائع وشرح اروع

شكرا لك أخى الكريم على هذا الرد الجميل

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سأقول لك شيئاً خذه مني ولا تفرط فيه أبداً

الأفكار لا تقدر بثمن وأياً كان حجم المجهود الذي يقوم به الآخرون

فالفكرة لك ولا تقتنع إن حاول أحدهم إقناعك أن الفكرة لا أهمية لها

وكن على ثقة عقل بلا أفكار لا وجود له

لذا فلولا أنك فكرت وخرجت بهذه الفكرة لما قمت أنا بشيء

وعلى هذا فأنت هنا الأصل وما أنا إلا منفذ

لذا أتمنى لو تعيد الإجابة على أسئلتي :)

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أشكرك أخ علاء على كلامك المحفز

فأنت أكثر منى خبرة ونصيحتك لى غالية طبعا

وبالنسبة للفكرة كل ماحدث أنى كنت أبحث عنها لأستخدمها لنفسى لتحل لى مشكلة

وبعد أن وجدتها وحاولت تعديلها لتناسب عملى وظننت أنى وصلت بها لدرجة أنها تفيد الكثير من أخوانى

قمت بعرضها وشرحها لأن زكاة العلم تبليغه

وكانت بسيطة جدا وأظن أن الكثير كان سيهملها لاعتقاده أنها ليست لها قيمة أو أي سبب أخر

حتى جأت أنت وطورتها الى هذا الحد الرائع وأضفت لها كل هذه القوة

والتى ستتسبب فى لفت نظر الجميع اليها وأغلبهم سيستخدمها

ألم تلاحظ أن الردود لم تكن موجودة فى هذا الموضوع قبل ظهور اسمك فيه باستثناء الأخ العزيز rohaili

وكذلك استخدامها ونشرها لم يكن ليتم الا بمرورك على الموضوع واثراءك له بمشاركاتك وأهم شئ تطويرك للحزمة

وبعد كل هذا فكلما استخدمها زميل أخذ ثواب من الله يعنى أنت كده قدمت لى أكبر خدمة

وأنا لا أظن أنى كنت لأطورها يوما لتصل الى هذا الحد (مازلت مبتدئ)

وبالنسبة للاسم مفيش أحسن من كده Arabic Numbers Utility

وبالنسبة لنشرها فى مدونتك افتكر موضوع الثواب والحسنات اللى هاكسبها

وربنا يوفقنا نشوف أى فكرة تانية ولو بسيطة نأخد منها كمان شوية حسنات

وتطورها تانى وتنشرها فى مدونتك (كله فايدة للجميع)

وفى الاخير أشكرك على اهتمامك بأفكارى البسيطة وتطويرها

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ببساطة عزيزي محمد

صاحب الفكرة الأصلية يشبه مؤسس العلم

أصحاب الأفكار الفرعية هم من يطورون العلم بعد أن يضع مؤسسه حجر الأساس

عن نفسي أعرف من هو مخترع الهاتف لكن هل أعرف من طوره بعد ذلك على الآغلب لا

شكراً أن سمحت لي بنشر الحزمة

اه نسيت أن أخبرك أني سأضيف الموضوع إلى المواضيع المميزة :)

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكرا لك أخ علاء على اضافة الموضوع الى المواضيع المميزة

وبهذا يكون لدى موضوعين فى قائمة المواضيع المميزة :clapping:

وانتظروا المزيد باذن الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تستحق أكثر يا محمد

تحياتي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .