using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; namespace BMYOWordPad public partial class Form1 : Form // kaydırma çubuğu zoom için kullanılacak TrackBar trb = new TrackBar(); public Form1() InitializeComponent(); // kaydırma çubuğunun özellikleri ayarlanıyor. trb.autosize = false; trb.height = 18; trb.width = 150; trb.minimum = 1; trb.maximum = 50; trb.value = 10; trb.tickfrequency = 10; trb.tickstyle = TickStyle.None; trb.valuechanged += new EventHandler(trb_ValueChanged); // kaydırma çubuğu durum çubuğuna eklenecek. ToolStripControlHost mycontrolhost = new ToolStripControlHost(trb); statusstrip1.items.insert(8, mycontrolhost); // kaydırma çubuğun yakınlaştırma/uzaklaştırma için kullanılacak void trb_valuechanged(object sender, EventArgs e) richtextbox1.zoomfactor = (float)trb.value / 10; lblzoom.text = "%" + (richtextbox1.zoomfactor * 100); // form açılınca ilk önce yapılacak işlemler. private void Form1_Load(object sender, EventArgs e) // Form açılınca ilk önce Font listesini yükleyecek foreach (FontFamily f in FontFamily.Families) // tüm stilleri desteklemiyorsa almayacağız if (f.isstyleavailable(fontstyle.bold) && f.isstyleavailable(fontstyle.italic) && f.isstyleavailable(fontstyle.strikeout) && f.isstyleavailable(fontstyle.underline) && f.isstyleavailable(fontstyle.regular)) cbyazitipi.items.add(f.name); 1
//yazı büyüklüklerini yükle cbyazibuyuklugu.items.addrange(new object[] 5, 8, 9, 10, 12, 14, 16, 18, 20, 24, 28, 32, 36, 40, 48, 60, 72, 100 ); // başlangıç yazısı tipini ayarla richtextbox1.font = new System.Drawing.Font("Times New Roman", 12, FontStyle.Regular); // Yazı tiplerinin bulunduğu combobox ta seçili olan aktif font olacak cbyazitipi.text = richtextbox1.font.name; // yazı büyüklüğünü aktif fontun büyüklüğüne ayarla cbyazibuyuklugu.text = richtextbox1.font.size.tostring(); // yeni bir dosya için başka bir form olarak başlat. private void tsbyeni_click(object sender, EventArgs e) System.Diagnostics.Process.Start(Application.ExecutablePath); // dosya adını kaydetme ve dosya açma işlemlerinde kullanacağız. string dosya_adi = null; // dosya açma işlemi private void tsbac_click(object sender, EventArgs e) // dosya açma dialoğunu programatik olarak oluşturuyoruz. OpenFileDialog opf = new OpenFileDialog(); // açılabilecek dosya formatları ayarlanıyor opf.filter = "BMYO Dosya Formatı *.myo Zengin Metin Formatı *.rtf Desteklenen Formatlar *.rtf;*.myo"; // varsayılanda aktif format "Desteklenen Formatlar *.rtf;*.myo" olacak opf.filterindex = 3; // dosya açma dialoğunun başlığı ayarlanıyor opf.title = "Programımızda açmak için dosya seç"; // aşağıdaki kod ile dosya açma dialoğunun başlangıç dizini ayarlanabilir // opf.initialdirectory = @"C:\"; if (opf.showdialog() == DialogResult.OK) // eğer dosya açma dialoğuna OK dediysek açmak için bir dosya seçmişizdir. // bu durumda dosya_adı seçilen doya olacaktır. dosya_adi = opf.filename; // seçilen dosyayı aç richtextbox1.loadfile(dosya_adi); this.text = "BMYO WordPad [" + dosya_adi + "]"; // dosya kaydetme işlemi private void tsbkaydet_buttonclick(object sender, EventArgs e) // eğer herhangi bir dosya açmadıysak ve yazdıklarımızı henüz kaydetmediysek dosya_adı null olacaktır. if (dosya_adi == null) // bu durumda farklı kaydet işlemini çalıştır tsbfarklikaydet_click(null, null); // eğer zaten daha önce kaydetmişsek ve varolan bir dosya açmışsak dosya_adı na kaydet. richtextbox1.savefile(dosya_adi); // Seçili Font, sf programın her yerinde seçili fontu temsil ediyor. Font sf get return richtextbox1.selectionfont; set richtextbox1.selectionfont = value; 2
// Farklı kaydetme işlemi private void tsbfarklikaydet_click(object sender, EventArgs e) // dosya kaydetme dialoğunu programatik olarak oluşturuyoruz. SaveFileDialog sfd = new SaveFileDialog(); // kaydetme formatları ayarlanıyor sfd.filter = "BMYO Dosya Formatı *.myo Zengin Metin Formatı *.rtf"; // varsayılanda aktif format "Zengin Metin Formatı *.rtf" olacak sfd.filterindex = 2; // dosya açma dialoğunun başlığı ayarlanıyor sfd.title = "Dosyayı Farklı Kaydet"; // eğer dosya kaydetmek için bir isim belirlediysek ve dialoğa OK dediysek if (sfd.showdialog() == DialogResult.OK) // bu durumda dosya_adı seçilen isim olacaktır. dosya_adi = sfd.filename; // dökümanı dosya_adı na kaydet. richtextbox1.savefile(dosya_adi); // formun başlığını ayarla this.text = "BMYO WordPad [" + dosya_adi + "]"; // richtextbox1 de metin alanına her tıklamada, veya seçili yazı her değiştiğinde burası çalışacaktır. private void richtextbox1_selectionchanged(object sender, EventArgs e) try // combobox ta seçili fontun adını göster cbyazitipi.text = sf.name; // seçili font büyüklüğünü göster cbyazibuyuklugu.text = sf.size.tostring(); // seçili font Koyu mu, italik mi, altı veya üstü çizili mi belirle tsbbold.checked = sf.bold; tsbitalik.checked = sf.italic; tsbaltiniciz.checked = sf.underline; tsbustunuciz.checked = sf.strikeout; // Geri alınacak bir şey varsa Geri Al aktif olacak // aynı durumda illeri alınacak birşey varsa yinele aktif olacak // diğer durumlarda geri al ve yinele pasif olacak mngerial.enabled = tsbundo.enabled = richtextbox1.canundo; mnyinele.enabled = tsbredo.enabled = richtextbox1.canredo; // seçili veya tıklanan alanda madde işareti varmı belirle tsbmaddeisareti.checked = richtextbox1.selectionbullet; // hangi yöne hizalanmış onu ayarla tsbsola.checked = (richtextbox1.selectionalignment == HorizontalAlignment.Left); tsbortala.checked = (richtextbox1.selectionalignment == HorizontalAlignment.Center); tsbsaga.checked = (richtextbox1.selectionalignment == HorizontalAlignment.Right); // seçili yazı varsa (seçilen harf sayısı 0'dan büyük ise) kes ve kopyala aktif olacak, yoksa deaktif olacak tsbkes.enabled = mnkes.enabled = mnsil.enabled = richtextbox1.selectedtext.length > 0; tsbkopyala.enabled = mnkopyala.enabled = richtextbox1.selectedtext.length > 0; // yapıştırılacak bir şey var yapıştırma aktif yoksa deaktif olacak mnyapistir.enabled = tsbyapistir.enabled = richtextbox1.canpaste(new DataFormats.Format("", 0)); // seçili yazının satır aralıklarını belirtecek lnsp1.checked = (richtextbox1.selectioncharoffset == 0); lnsp1_15.checked = (richtextbox1.selectioncharoffset == (int)(sf.size * 0.15)); lnsp1_5.checked = (richtextbox1.selectioncharoffset == (int)(sf.size * 0.5)); lnsp2.checked = (richtextbox1.selectioncharoffset == (int)(sf.size)); 3
// aktif konumdaki satır sütun numaralarını göster int index1 = richtextbox1.selectionstart; lblsatir.text = "Satır: " + (richtextbox1.getlinefromcharindex(index1) + 1); Point p = richtextbox1.getpositionfromcharindex(index1); if (p.x == 1) lblsutun.text = "Sütun: " + 1; p.x = 0; int index2 = richtextbox1.getcharindexfromposition(p); int col = index1 - index2 + 1; lblsutun.text = "Sütun: " + col; //------------------------------------------------ catch // Geri alma işlemi : Son değişikliği geri alır private void tsbundo_click(object sender, EventArgs e) richtextbox1.undo(); // Yineleme işlemi : Son geri alma işlemini yineler private void tsbredo_click(object sender, EventArgs e) richtextbox1.redo(); // tümünü seçme işlemi : tüm metni seçer private void tsbtumunusec_click(object sender, EventArgs e) richtextbox1.selectall(); // seçileni kesme işlemi private void tsbkes_click(object sender, EventArgs e) richtextbox1.cut(); // seçileni kopyalama işlemi private void tsbkopyala_click(object sender, EventArgs e) richtextbox1.copy(); // kesilen veya kopyalananı yapıştırma işlemi : yapıştırılacak birşey varsa yapıştırır. private void tsbyapistir_click(object sender, EventArgs e) richtextbox1.paste(); // seçilen kısmı sola hizalama işlemi : seçilen veya tıklanan paragrafı sola hizalar. private void tsbsola_click(object sender, EventArgs e) richtextbox1.selectionalignment = HorizontalAlignment.Left; // seçilen kısmı ortaya hizalama işlemi : seçilen veya tıklanan paragrafı ortaya hizalar. private void tsbortala_click(object sender, EventArgs e) richtextbox1.selectionalignment = HorizontalAlignment.Center; 4
// seçilen kısmı sağa hizalama işlemi : seçilen veya tıklanan paragrafı sağa hizalar. private void tsbsaga_click(object sender, EventArgs e) richtextbox1.selectionalignment = HorizontalAlignment.Right; // yazı tipi seçeneği için dialog açma işlemi private void tsbyazitipi_click(object sender, EventArgs e) // Yazı tipi dialoğu programatik olarak oluşturuluyor. FontDialog fd = new FontDialog(); // Yazı tipi dialoğunda yazı rengini göster fd.showcolor = true; // dialog açılmadan önce tıklan veya seçilen yerin fontu ile eşleştir fd.font = richtextbox1.selectionfont; // aynı zamanda dialogtaki yazı rengi de seçilen yer ile aynı olsun fd.color = richtextbox1.selectioncolor; // eğer yazı tipi için diaog OK (tamam) ile kapatılmış ise if (fd.showdialog() == DialogResult.OK) // seçili yerin yazı tipi dialogtan seçilen yazı tipi olsun. richtextbox1.selectionfont = fd.font; // seçili yerin yazı rengi dialogtan seçilen yazı rengi olsun. richtextbox1.selectioncolor = fd.color; // Seçilen yazının tipini combobox tan ayarla private void cbyazitipi_selectedindexchanged(object sender, EventArgs e) try // büyüklük ve stil değişmeden sadece ismi combobox tan alarak değiştir sf = new Font(cbYaziTipi.Text, sf.size, sf.style); catch // Seçilen yazının büyüklüğünü combobox tan ayarla private void cbyazibuyuklugu_selectedindexchanged(object sender, EventArgs e) try // yazı tipi ve stil değişmeden sadece büyüklüğü combobox tan alarak değiştir sf = new Font(sf.FontFamily, float.parse(cbyazibuyuklugu.text), sf.style); catch // seçilen kısmın koyulaştırma değerini değiştir. eğer zaten koyu ise koyuluğu kaldır, değilse koyulaştır private void tsbbold_click(object sender, EventArgs e) // eğer zaten koyu ise koyuluğu stilden çıkar, değilse koyuluğu stile ekle sf = new Font(sf.FontFamily, sf.size, sf.bold? sf.style & ~FontStyle.Bold : sf.style FontStyle.Bold); // seçilen kısmın italik değerini değiştir.eğer zaten italik ise italikliği kaldır, değilse italik yapar private void tsbitalik_click(object sender, EventArgs e) // eğer zaten italik ise stilden italik kısmı çıkar, değilse stile italik ekle sf = new Font(sf.FontFamily, sf.size, sf.italic? sf.style & ~FontStyle.Italic : sf.style FontStyle.Italic); 5
// seçilen kısmın altını çizme değerini değiştir. eğer zaten altı çizili ise çizgiyi kaldır, değilse altını çizer private void tsbaltiniciz_click(object sender, EventArgs e) // eğer zaten altı çizi ise stilden kaldır, değilse altını çizi stile ekle sf = new Font(sf.FontFamily, sf.size, sf.underline? sf.style & ~FontStyle.Underline : sf.style FontStyle.Underline); // seçilen kısmın üstünü çizme değerini değiştir. eğer zaten üstü çizili ise çizgiyi kaldır, değilse üstünü çizer private void tsbustunuciz_click(object sender, EventArgs e) // eğer zaten üstü çizi ise üstü çizili seçeneğini stilden çıkar, değilse ekle sf = new Font(sf.FontFamily, sf.size, sf.strikeout? sf.style & ~FontStyle.Strikeout : sf.style FontStyle.Strikeout); // seçilen yazıdan tüm stilleri kaldırır. private void tsbstilsil_click(object sender, EventArgs e) // yeni stil olarak Regular (sadece düzenli demek) ata // yani koyu, italik, altı veya üstü çizili özellikleri kaldır sf = new Font(sf.FontFamily, sf.size, FontStyle.Regular); // seçilen yazının fontunu listeden bir büyütecek private void tsbfontbuyut_click(object sender, EventArgs e) if (cbyazibuyuklugu.selectedindex!= cbyazibuyuklugu.items.count - 1) cbyazibuyuklugu.selectedindex++; // seçilen yazının fontunu listeden bir küçültecek private void tsbfontkucult_click(object sender, EventArgs e) if (cbyazibuyuklugu.selectedindex!= 0) cbyazibuyuklugu.selectedindex--; // Seçilen yazını yazı rengini değiştirir private void tsbyazirengi_click(object sender, EventArgs e) // Renk seçme dialoğu oluşturuluyor ColorDialog cd = new ColorDialog(); // eğer ColorDialog (renk seçici) OK (tamam) ile kapatılmış ise renk seçilmiş demektir. // bu durumda seçili yazının yazı rengi dialogtan seçilen renk olacaktır. if (cd.showdialog() == DialogResult.OK) richtextbox1.selectioncolor = cd.color; // Seçilen yazını vurgu rengini değiştirir private void tsbvurgurengi_click(object sender, EventArgs e) // Renk seçme dialoğu oluşturuluyor ColorDialog cd = new ColorDialog(); // eğer ColorDialog (renk seçici) OK (tamam) ile kapatılmış ise renk seçilmiş demektir. // bu durumda seçili yazının vurgu rengi dialogtan seçilen renk olacaktır. if (cd.showdialog() == DialogResult.OK) richtextbox1.selectionbackcolor = cd.color; // metin kutusunun zemin rengini ayarlar private void tsbzeminrengi_click(object sender, EventArgs e) // Renk seçme dialoğu oluşturuluyor ColorDialog cd = new ColorDialog(); // eğer ColorDialog (renk seçici) OK (tamam) ile kapatılmış ise renk seçilmiş demektir. // bu durumda zemin rengi dialogtan seçilen renk olacaktır. if (cd.showdialog() == DialogResult.OK) richtextbox1.backcolor = cd.color; 6
// Seçilen yazıyı büyük harfe dönüştürür. private void tsbbuyukharf_click(object sender, EventArgs e) // seçilen yazı geçerli dilde BÜYÜK harfe dönüşecektir. richtextbox1.selectedtext = richtextbox1.selectedtext.toupper( System.Globalization.CultureInfo.CurrentCulture); // Seçilen yazıyı küçük harfe dönüştürür. private void tsbkucukharf_click(object sender, EventArgs e) // seçilen yazı geçerli dilde küçük harfe dönüşecektir. richtextbox1.selectedtext = richtextbox1.selectedtext.tolower( System.Globalization.CultureInfo.CurrentCulture); // Seçilen veya tıklanan paragrafa madde işareti koymaya kadırmaya yarar private void tsbmaddeisareti_click(object sender, EventArgs e) // tıklandığı zamana eğer zaten madde işareti varsa kaldıracak, yoksa koyacak richtextbox1.selectionbullet =!richtextbox1.selectionbullet; // Kelime kaydır işlemini gerçekleştirecek private void tsbkelimekaydir_click(object sender, EventArgs e) // eğer zaten kelime kaydır işlemi varsa ipatal edecek, yoksa devreye sokacak richtextbox1.wordwrap =!richtextbox1.wordwrap; // başlama değişkeni bul değiştir işlemleri için kullanılacak int baslama = 0; // bulma işlemi private void tsbbul_click(object sender, EventArgs e) // eğer arama için arma kutusuna herhangi birşey yazmadıysak işlem yapma if (txtbul.text.length == 0) return; // eğer aramak için birşeyler yazdıysak, başlama noktasından itibaren // girilen kelimeyi bulacak ve yeni başlama noktası bulunan kelime den sonra olacak baslama = richtextbox1.find(txtbul.text, baslama < 0? 0 : baslama, RichTextBoxFinds.None); baslama += txtbul.text.length; // değiştirme işlemi private void tsbdegistir_click(object sender, EventArgs e) // eğer arama için arma kutusuna herhangi birşey yazmadıysak işlem yapma if (txtbul.text.length == 0) return; // eğer aramak için birşeyler yazdıysak, başlama noktasından itibaren // girilen kelimeyi bulacak ve yeni başlama noktası bulunan kelime den sonra olacak baslama = richtextbox1.find(txtbul.text, baslama < 0? 0 : baslama, RichTextBoxFinds.None); baslama += txtbul.text.length; // eğer kelime bulunduysa değiştirilmek içn girilen kelime ile değiştir if (baslama > 0 && richtextbox1.selectedtext.length > 0) richtextbox1.selectedtext = txtdegistir.text; // eğer bir şey bulunmadıysa beep diye uyar. Console.Beep(); //Resim ekleme işlemi private void tsbresimekle_click(object sender, EventArgs e) // Resim açmak için dosya açma dialoğu oluşturuluyor OpenFileDialog ofd = new OpenFileDialog(); // açılacak dosya formatları için formatlar belirleniyor ofd.filter = "Resim Dosyaları *.bmp;*.jpg;*.jpeg;*.gif;*.png"; 7
// eğer dosya açma penceresinden resim seçilip tamam denildiyse if (ofd.showdialog() == DialogResult.OK) // resim dosyadan hafızaya yüklenecek, daha sonra yapıştırılacak Image resim = Image.FromFile(ofd.FileName); // resim nesnesi panoya alınıyor Clipboard.SetImage(resim); // Panodan seçili alana yapıştırılacak. richtextbox1.paste(); // seçilen yazıyı üst simge yapar private void tsbüstsimge_click(object sender, EventArgs e) // daha önce üst simge veya alt simge yapılmış ise normale döndür. if (richtextbox1.selectioncharoffset!= 0) richtextbox1.selectioncharoffset = 0; sf = new System.Drawing.Font(sf.FontFamily, 3 * (sf.size / 2)); // normal ise üst simge yap, bunun için yazı fontunu üçte iki büyüklüğüne indir sf = new System.Drawing.Font(sf.FontFamily, 2 * (sf.size / 3)); // ve yazı ofsetini (normal seviyeden yüksekliğini) yazı büyüklüğünün yarısı kadar yap. richtextbox1.selectioncharoffset = (int)richtextbox1.selectionfont.size / 2; // seçilen yazıyı üst simge yapar private void tsbaltsimge_click(object sender, EventArgs e) // daha önce üst simge veya alt simge yapılmış ise normale döndür. if (richtextbox1.selectioncharoffset!= 0) richtextbox1.selectioncharoffset = 0; sf = new System.Drawing.Font(sf.FontFamily, 3 * (sf.size / 2)); // normal ise alt simge yap, bunun için yazı fontunu üçte iki büyüklüğüne indir sf = new System.Drawing.Font(sf.FontFamily, 2 * (sf.size / 3)); // ve yazı ofsetini (normal seviyenin altına) yazı büyüklüğünün yarısı kadar yap. richtextbox1.selectioncharoffset = -(int)richtextbox1.selectionfont.size / 2; // seçilen paragrafın girintisini 10 pixel arttırır. private void tsbgirintiarrtır_click(object sender, EventArgs e) richtextbox1.selectionindent += 10; // seçilen paragrafın girintisini 10 pixel azaltır. private void tsbgirintiazalt_click(object sender, EventArgs e) richtextbox1.selectionindent -= 10; // seçilen yazının satır aralığını 1 yapar. private void lnsp1_click(object sender, EventArgs e) richtextbox1.selectioncharoffset = 0; lnsp1.checked = true; lnsp1_15.checked = lnsp1_5.checked = lnsp2.checked = false; 8
// seçilen yazının satır aralığını 1,15 yapar. private void lnsp1_15_click(object sender, EventArgs e) richtextbox1.selectioncharoffset = (int)(sf.size * 1.15f - sf.size); lnsp1_15.checked = true; lnsp1.checked = lnsp1_5.checked = lnsp2.checked = false; // seçilen yazının satır aralığını 1,5 yapar. private void lnsp1_5_click(object sender, EventArgs e) richtextbox1.selectioncharoffset = (int)(sf.size * 1.5f - sf.size); lnsp1_5.checked = true; lnsp1.checked = lnsp1_15.checked = lnsp2.checked = false; // seçilen yazının satır aralığını 2 yapar. private void lnsp2_click(object sender, EventArgs e) richtextbox1.selectioncharoffset = (int)(sf.size * 2.0f - sf.size); lnsp2.checked = true; lnsp1.checked = lnsp1_15.checked = lnsp1_5.checked = false; // dökümanı %10 yaklaştırır. private void tsbyakınlaştır_click(object sender, EventArgs e) richtextbox1.zoomfactor *= 1.1f; if (richtextbox1.zoomfactor > 5) richtextbox1.zoomfactor = 5; trb.value = (int)(richtextbox1.zoomfactor * 10); lblzoom.text = "%" + (richtextbox1.zoomfactor * 100); // dökümanı %10 uzaklaştırır. private void tsbuzaklaştır_click(object sender, EventArgs e) richtextbox1.zoomfactor /= 1.1f; if (richtextbox1.zoomfactor < 0.1f) richtextbox1.zoomfactor = 0.1f; trb.value = (int)(richtextbox1.zoomfactor * 10); lblzoom.text = "%" + (richtextbox1.zoomfactor * 100); // basılan tuşun durumunu günceller. [DllImport("User32.dll")] static extern short GetKeyState(int KeyKode); // basılan tuşun durumuna bak private void richtextbox1_keyup(object sender, KeyEventArgs e) lblcaps.text = Console.CapsLock? "CAPS" : ""; // büyük harf lblnum.text = Console.NumberLock? "NUM" : ""; // num lock if (GetKeyState((int)Keys.Insert) > 0) // insert lblins.text = "OVR"; lblins.text = "INS"; 9
// dökümanın zoom durumuna göre kaydırma çubuğunun yerini ayarla private void richtextbox1_contentsresized(object sender, ContentsResizedEventArgs e) trb.valuechanged -= new EventHandler(trb_ValueChanged); if (richtextbox1.zoomfactor > 5) richtextbox1.zoomfactor = 5; if (richtextbox1.zoomfactor < 0.1) richtextbox1.zoomfactor = 0.1f; trb.value = (int)(richtextbox1.zoomfactor * 10); lblzoom.text = "%" + (trb.value * 10); trb.valuechanged += new EventHandler(trb_ValueChanged); //============= SAĞ TIKLAMA MENÜSÜ İŞLEMLERİ ======================= // sağ tıklama -- geri alma işlemi : son değişikliği geri alır private void mngerial_click(object sender, EventArgs e) richtextbox1.undo(); // sağ tıklama -- yineleme işlemi : geri alınmış değişikliği yineler private void mnyinele_click(object sender, EventArgs e) richtextbox1.redo(); // sağ tıklama -- tümünü seçme işlemi private void mntumunusec_click(object sender, EventArgs e) richtextbox1.selectall(); // sağ tıklama -- seçileni siler private void mnsil_click(object sender, EventArgs e) richtextbox1.selectedtext = ""; // sağ tıklama -- kesme işlemi private void mnkes_click(object sender, EventArgs e) richtextbox1.cut(); // seçileni keser // sağ tıklama -- kopyalama işlemi private void mnkopyala_click(object sender, EventArgs e) richtextbox1.copy(); // sağ tıklama -- yineleme işlemi : yapıştırılacak birşey varsa yapıştırır. private void mnyapistir_click(object sender, EventArgs e) richtextbox1.paste(); 10