الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

تطوير Text Editor

بدأه بن العيد في 31 مايو 2007 · 15 رد · 7,220 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سأشرع إن شاء الله في تطور برنامج لقراءة وتغير الملفات النصية

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

post-91400-1180623559_thumb.jpg

الصورة الرئيسية للبرنامج

كما هو ظاهر في الصورة الرئيسية للبرنامج فإن المكون الرئيسي لكتابة النص هو المكون RichTextBox. هذا المكون يوفر عدة وضائف جاهزة للتعامل مع النصوص مثل النسخ , الإلصاق...

النسخة الحالية من البرنامج باللغة الأنجليزية وإن شاء الله سيتم تحويلها الى العربية.

post-91400-1180624684_thumb.jpg

نافذة المهام الرئيسية

عند إختيار إنشاء ملف جديد في البرنامج فهناك رسالة ستظهر للتعرف ما إن أراد المستعمل تسجيل التغير أم لا. لقراءة الإختيار من الرسالة إستعملت الكود التالي:

DialogResult SaveChange;
  SaveChange = MessageBox.Show("Save modifications to document1?", "Text Editor", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
  switch (SaveChange)
   {
	case DialogResult.Abort: break;
	case DialogResult.No: Application.Exit(); break;
	case DialogResult.Yes: Saver(SaveState.NewDocument); break;
   }

إستعملت الدالة Saver والتي تأخذ متغير لأنه هناك حالتين نحتاج فيهما الى حفظ النص إما إنشاء ملف جديد أو عند الخروج من البرنامج

 private void Saver(SaveState State)
   {   SaveFileDialog SV = new SaveFileDialog();
	   StreamWriter txtWriter;

	   SV.Title = "TextEditor - Save File";
	   SV.DefaultExt = "doc";
	   SV.Filter = "Document World Files|*.doc|Text Files|*.txt|HTML Files|*.htm|All Files|*.*";
	   SV.FilterIndex = 1;
	   SV.FileName = string.Empty;
		 if (SV.ShowDialog() == DialogResult.OK)
		  {
		  if (SV.FileName == string.Empty)
		  {return;}
		  txtWriter = new StreamWriter(SV.FileName);
		  string[] textLines = TextArea.Lines;
		  foreach(string line in textLines)
		  txtWriter.WriteLine(line);
		  txtWriter.Close();
		  // Check if we are exiting or creating a new doc
		  if (State == SaveState.NewDocument)
			TextArea.Clear();
			else Application.Exit();
		   }  
   }

حفظ النص المكتوب في فضاء الكتابة يكون سطر بسطر للحفاض على شكل النص وهذه الإمكانية توفر من قبل الخاصيةLines التابعة ل RichTextBox

عند إختيار فتح ملف تظهر نافذة الحوار لفتح ملف ما وعند التفعيل يتم تسجيل مسار ذلك الملف ليتم إضافته في ملف الأرشيف وهذه الملفات ستظهر لاحقا في الإختيار Recent Documents

هذه دالة فتح ملف جديد في البرنامج

private void openToolStripMenuItem_Click(object sender, EventArgs e)
  {
	OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
	StreamReader txtReader;

	OpenFileDialog1.Title = "TextEditor - Open File";
	OpenFileDialog1.DefaultExt = "rtf";
	OpenFileDialog1.Filter = "All Files|*.*|Document World Files|*.doc|Text Files|*.txt|HTML Files|*.htm";
	OpenFileDialog1.FilterIndex = 1;
	OpenFileDialog1.FileName = string.Empty;
	if (OpenFileDialog1.ShowDialog() == DialogResult.OK)
	 {
	  if (OpenFileDialog1.FileName == string.Empty)
	   { return;				}
	   OpenedFiles.Add(OpenFileDialog1.FileName);
	   txtReader = new StreamReader(OpenFileDialog1.FileName);

	   TextArea.Text = txtReader.ReadToEnd();
	   txtReader.Close();
	  }			
  }

طباعة النص المفتوح في البرنامج تتطلب إضافة المجال التالي:

using System.Drawing.Printing;

ثم هذه الدالة لرؤية النص قبل الطباعة PrintPreview:

 pd = new PrintDocument();
  pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
  // Setup & show the PrintPreviewDialog
  PrintPreviewDialog ppd = new PrintPreviewDialog();
  ppd.Document = pd;
  ppd.ShowDialog();

وهذه الدالة للطباعة:

pd = new PrintDocument();
 pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
 PrintDialog PD = new PrintDialog();
 PD.Document = pd;
 PD.ShowDialog();
 pd.Print();

post-91400-1180628975_thumb.jpg

إختيارات الإخراج

لتفعيل هاته الإختيارات إعتمدت على دوال جاهزة تابعة لRichTextBox وهي:

TextArea.Copy();
 TextArea.Cut();
 TextArea.Paste();
 TextArea.Undo();
 TextArea.Redo();
 TextArea.SelectAll();

أما البحث في النص المفتوح فيكون عبر الإختيارFind والذي يقوم بفتح نافذة البحث التي يمرر لها محتوى النص وتظهر كافة الأسطر التي توجد فيها الحرف, الكلمة أو الجملة التي نبحث عنها كما تصوره نافذة البحث التالية:

post-91400-1180629475_thumb.jpg

نافذة البحث

يمكن تكبير أو تصغير كتابة النص لتكون أكثر وضوحا أو أقل بإستعمال:

this.TextArea.ZoomFactor--;
 // and 
 this.TextArea.ZoomFactor++;

post-91400-1180630083_thumb.jpg

تكبير وتصغير النص

نأتي الآن الى تحميل أنواع الكتابة المتوفرة في الحاسوب وتعمير المكونينcombobox المخصصان لذلك

AutoCompleteStringCollection ac = new AutoCompleteStringCollection();
  foreach (FontFamily fam in FontFamily.Families)
   {
	fontCombo.Items.Add(fam.Name);
	ac.Add(fam.Name);
   }

أحجام الكتابة

for (int x = 1; x <= 7; x++)
  {
   SizeCombo.Items.Add(x.ToString());
  }

لتعمير عمود الوضائف يمكن إتباع الصورة أسفله وإختيار العنصر الذي نود إضافته. العناصر التي أضفتها أغلبها أزرار والزر يظهر في شكل صورة عند إضافته ثم نقوم بإختيار الصورة التي نريد إضافتها كأيقونة للزر دون أن ننسى عامل الشفافية. أي لون الزر عندما يكون مؤشر الفأرة فوقه. والتحكم في ذلك يكون في الإختيار ImageTransparentColor للزر الذي تمت إضافته.

post-91400-1180630586_thumb.jpg

تعمير عمود الوضائف

وأخيرا سأترك لكم الكود للإطلاع عليه والمساهمة لمن شاء ذلك. علما أنه لا يزال قيد التطوير.

TextEditor.zip

تم تعديل هذه المشاركة بواسطة Ben_Laiid في 20 أغسطس 2007 في 21:01

#2

وعليكم السلام ورحمة الله وبركاته.

حبذا لو تضيف لينك لهذا الموضوع في موضوع الأخ فادي حول مشاريع الأعضاء :

/index.php?showtopic=76719

#Read

http://MoutazShams.blogspot.com

projects003.gif

أعتذر عن التغيب هذه الأيام نظرا للانشغال المريب

#3

الله يعطيك العافية مجهود رائع وانتظر المزيد :rolleyes:

لكن في ملاحظة صغيرة وهيه أن ملفات الوورد ماتفتح

وهذي المشكلة اللي حاولت فيه ولكن مافي فايده رفعت ضغطي أرجو ان تلاقي لها حل :unsure:

والله يعطيك العافية مرة ثانية :)

#4

شكراً لك على الشرح الرائع اخوي ..

لي عودة ان شاء الله

#5

موضوع رائع وهيفيدينى فى بروجكت بعمله.

شكرا لك.

#6

السلام عليكم ورحمة الله وبركاته

أخي الفاضل

بداية أهنئك على مشروعك الجميل، وأدعوا الله أن يوفقك فيه، ولا تأبه لقِلَّة المشاركات أو كثرتها، ووَاصِل عملك، فلا أعتقد أنك تعمل مِن أجل كلمات مِن الناس، وأحسبك أنك تعمل أولاً مِن أجل الله، ثم مِن أجل نفسك والعِلْم، فلا تجعل الشيطان يُثْبِط هِمَّتك لقِلَّة الردود أو يَغُرَّنَّك بنفسك لكثرتها، والله وَلِيّ التوفيق.

يا أخي، لقد كنت بدأت في مشروع مماثل لمشروعك منذ فترة، وتوقفت عن خاصية في تنسيق النص ولم أستطيع الوصول إليها، ووجدت بفضل الله قد قمت بتصميمها في برنامجك، فلو تفضلت وشرحتها لي أكون شاكراً جداً، هذه الخاصية هي تنسيق النص من الجانبين معاً والتي تسمى بالـ Justify.

أخيراً أتمنى أن نتواصل دائماً في كل ما فيه الخير للإسلام والمسلمين، ولو ترغب في أن نتشارك في استكمال تصميم هذا البرنامج سوياً فأنا على أتم الاستعداد.

والسلام عليكم ورحمة الله وبركاته

إن أخطأت فمِن نَفْسي، وإن أصَبْت فمِن عند الله

الحمد لله على نِعْمَة الإسلام وكَفَى بدِين الله نِعْمَة

#7

من الممكن ايضا دراسة موضوع تلوين الكلمات اذا كنت تكتب برنامج للغة معينة مثل C# او VB وسأقوم بالمشاركة و لو بشرح بسيط عن الموضو بإذن الله

راكان الحنيطي

Be Open Source

opensource-550x4752.gif

#8

السلام عليكم

post-91400-1187634685_thumb.jpg

لقد قمت بتفعيل الأيقونات المتواجدة في شريط المهام بالكيفية التالية:

وضع النص في اليمين

TextArea.SelectionAlignment = HorizontalAlignment.Right;

وضع النص في اليسار

 TextArea.SelectionAlignment = HorizontalAlignment.Left;

وضع النص في الوسط

TextArea.SelectionAlignment = HorizontalAlignment.Center;

شطب النص

TextArea.SelectionFont = new Font(TextArea.SelectionFont, FontStyle.Strikeout);

الكتابة بالعريض

TextArea.SelectionFont = new Font(TextArea.SelectionFont, FontStyle.Bold);

الكتابة المسطرة

TextArea.SelectionFont = new Font(TextArea.SelectionFont, FontStyle.Underline);

الكتابة المائلة

TextArea.SelectionFont = new Font(TextArea.SelectionFont, FontStyle.Italic);

تغير لون النص المضلل


if (ShowColorDialog(ref color))
TextArea.SelectionColor = color;
Color color = new Color();

تغير لون خلفية النص المضلل


if (ShowColorDialog(ref color))
TextArea.SelectionBackColor = color;
Color color = new Color();

لتحديد المسافة الفارغة في طرفي مجال الكتابة

TextArea.SelectionIndent =10; // or the value which you wont

لتحديد نوع الكتابة

TextArea.SelectionFont = new Font(fontCombo.Text, 20, FontStyle.Bold);

علما أن الكود الأخير أي إستعمال القسم Fontيوفر إمكانية تفعيل عدة تغيرات على النص في الآن ذاته وهو ما لم أدمجه بعد في كود التطبيق.

TextEditor.rar

#9

بجد ربنا يباركلك

انا كنت لسه بتعلم Files And Streams وكنت محتاج فعلا تطبيق عملي عليهم وعملت الواجهة وجيت اكتب الاكواد في حاجات وقفت معايا

بس انت كدا زودت في البرنامج حاجات ممتازة

ياريت حضرتك تكمل الموضوع في اسرع وقت علشان اتعلمه بسرعه

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

#10

السلام عليكم ورحمة الله وبركاته

لازلت أخي الفاضل لم تجب على سؤالي الخاص بتنسيق النص ومحازاته من الجانبين Justify، أدعوا الله أن يكون المانع خيراً

والسلام عليكم ورحمة الله وبركاته

إن أخطأت فمِن نَفْسي، وإن أصَبْت فمِن عند الله

الحمد لله على نِعْمَة الإسلام وكَفَى بدِين الله نِعْمَة

#11

السلام عليكم ورحمة الله وبركاته

اخي المشروع جميل ومحتاج تطوير كثير

هناك ملحوظه انه عندما تعمل new document بيسال ان كنت عايز احفظ التغيرات ام لا

وانا لم اكتب شئ بعد

وايضا الBold & Italic &7 Underline لم استطع ان افعل اكثر من اوحده في نفس الوقت يا اما bold or italic or underline

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

تم تعديل هذه المشاركة بواسطة khaled_tiger في 25 أغسطس 2007 في 16:05

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#12

أخى أنا عامل نفس مشروعك بس عامل على txtBody جربت أعمل أكواد مثل "وضع النص في اليمين" وغيرت من TextArea إلى txtBody

فممكن تقولى كيف أصنع الأكواد دى على ال txtBody

Ahmed Elbasha

E-mail:ah_elbasha@yahoo.com

#13

يعطيكم الف الف الف عافية على مجهوداتكم الجبارة

الموضوع راح يفيدني كتير

الله يعطيكم الف عافية مرة تانية

#14

بالتوفيق والى الامام وان اشاء الله احاول اشترك معاك

#15

السلام عليكــم ورحمـة الله وبركاتــه ،،

up

#16

السلام عليكم و رحمة الله و بركاته

لا أعلم إذا مازال تطوير هذا المشروع قائما أو لا :unsure: ولكني أحببت أن أشارك بقدر المستطاع و كسب الخبرة

لقد قمت بتطوير بسيط للمشروع أتمنى منكم الإطلاع عليه و تقديم أرائكم فقد قمت بوضع :

1- إمكانية قراءة الملف 2- إرساللها إلى الإيميل 3- تشفير و فك تشفير المحتوى

وقد واجت مشكلة في التشفير ألا وهي : أستطيع أن أرسل المحتوى من الفورم الأصلي إلى form2 ولكن لا أستطيع إرجاع المحتموى المشفر من Form2 إلى الفورم الأصلي !!

ولدي سؤال أخر : ما هي الألية أو الفكرة لجعل البرنامج يدعم اللغة العربية ؟ :happy:

والله الموفق

TextEditor1.rar

تم تعديل هذه المشاركة بواسطة أبو فهيد في 24 أغسطس 2010 في 23:48

للصداقة البرمجية

pro-vb6@hotmail.com

مواضيع مشابهة