• 0
Hammadi2100

تطوير Text Editor

سؤال

السلام عليكم

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

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

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
0

شارك هذا الرد


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

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

  • 0

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

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

http://www.arabteam2000-forum.com/index.php?showtopic=76719

0

شارك هذا الرد


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

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

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

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

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

0

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

شكرا لك.

0

شارك هذا الرد


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

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

أخي الفاضل

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

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

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

0

شارك هذا الرد


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

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

0

شارك هذا الرد


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

السلام عليكم

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

0

شارك هذا الرد


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

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

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

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

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

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

0

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

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

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

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

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

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

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

شارك هذا الرد


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

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

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

0

شارك هذا الرد


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

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

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

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

0

شارك هذا الرد


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

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

0

شارك هذا الرد


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

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

up

0

شارك هذا الرد


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

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

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

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

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

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

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

والله الموفق

TextEditor1.rar

تم تعديل بواسطه أبو فهيد
0

شارك هذا الرد


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

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

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



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

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

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