السلام عليكم
سأشرع إن شاء الله في تطور برنامج لقراءة وتغير الملفات النصية
بدأت في البرنامج وسأشرح الكود هنا ليستفيد الجميع وطبعا مرحبا بكل الإقتراحات والمشاركات في تطوير البرنامج
الصورة الرئيسية للبرنامج
كما هو ظاهر في الصورة الرئيسية للبرنامج فإن المكون الرئيسي لكتابة النص هو المكون RichTextBox. هذا المكون يوفر عدة وضائف جاهزة للتعامل مع النصوص مثل النسخ , الإلصاق...
النسخة الحالية من البرنامج باللغة الأنجليزية وإن شاء الله سيتم تحويلها الى العربية.
نافذة المهام الرئيسية
عند إختيار إنشاء ملف جديد في البرنامج فهناك رسالة ستظهر للتعرف ما إن أراد المستعمل تسجيل التغير أم لا. لقراءة الإختيار من الرسالة إستعملت الكود التالي:
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();
إختيارات الإخراج
لتفعيل هاته الإختيارات إعتمدت على دوال جاهزة تابعة لRichTextBox وهي:
TextArea.Copy(); TextArea.Cut(); TextArea.Paste(); TextArea.Undo(); TextArea.Redo(); TextArea.SelectAll();
أما البحث في النص المفتوح فيكون عبر الإختيارFind والذي يقوم بفتح نافذة البحث التي يمرر لها محتوى النص وتظهر كافة الأسطر التي توجد فيها الحرف, الكلمة أو الجملة التي نبحث عنها كما تصوره نافذة البحث التالية:
نافذة البحث
يمكن تكبير أو تصغير كتابة النص لتكون أكثر وضوحا أو أقل بإستعمال:
this.TextArea.ZoomFactor--; // and this.TextArea.ZoomFactor++;
تكبير وتصغير النص
نأتي الآن الى تحميل أنواع الكتابة المتوفرة في الحاسوب وتعمير المكونين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 للزر الذي تمت إضافته.
تعمير عمود الوضائف
وأخيرا سأترك لكم الكود للإطلاع عليه والمساهمة لمن شاء ذلك. علما أنه لا يزال قيد التطوير.

