notepad çalışmasında kafaya takılanlar

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

notepad çalışmasında kafaya takılanlar

Mesaj gönderen Serhan01 »

Arkadaşlar bir notepad çalışması yaptım. çalışmayı başka bir yerden indirdiğim kodlarla birlikte yaptım. yani ordan öğrendiğim kodları uygulayarak. yeni başladığım için her kodu araştırarak anlayarak gitmeye çalıştım ama anlayamadığım veya çözemediğim yerler var. yardımcı olursanız çok makbüle geçecek.

1.

Kod: Tümünü seç

procedure TForm1.dAcClick(Sender: TObject);
begin
  if dosAc.Execute then
    begin
      memo.Lines.LoadFromFile(dosAc.FileName);
      fName:=dosAc.FileName;
      form1.Caption:='Notepad- '+fName;
    end;
end;
yukardaki kod ile notepad içine başka bir txt dosyasını açıyorum problem yok ama fName yani dosya ismi değişkeninde dosyanın ismi değilde dosyanın klasör yolu tutuluyor. yani form caption ında görüntülenen açtığım deneme.txt dosyası değilde c:\deneme\deneme.txt şeklinde görülüyor. ben fName değişkenine dosya yolunu değil de dosya ismini nasıl alabilirim.

2.

Kod: Tümünü seç

procedure TForm1.Dzen1Click(Sender: TObject);
var
  smemo:string;
begin
  if memo.SelLength>0 then
    begin
      dzKes.Enabled:=true;
      dzKopyala.Enabled:=true;
    end
  else
    begin
      dzKes.Enabled:=false;
      dzKopyala.Enabled:=false;
    end;

  if Clipboard.HasFormat(cf_text) then
    begin
      dzPaste.Enabled:=true;
    end
  else
    begin
      dzPaste.Enabled:=false;
    end;
  
  smemo:=memo.Text;

  if length(trim(sMemo))>0 then
    begin
      dzGeri.Enabled:=true;
    end
  else
    begin
      dzGeri.Enabled:=false;
    end;
end;
yukardaki kod ile düzen menüsünde bulunan elemanları (kes, kopyala, yapıştır) duruma göre enable veya disable yapıyorum. hepsi çalışıyor problem yok. fakat yapamadığım şey yapıştır elemanının enable veya disable olması konusu. eğer bilgisayarın hafızasında herhangi bir yerden bir kopyalama varsa (bir dosya ismi veya ms word den herhangi bir text) yapıştır enable olarak geliyor. benim yapmak istediğimse notepad içinde herhangi bir texti kopyalarsam yapıştır enable durumuna gelsin. bunun bir yolu var mıdır?

3.

Kod: Tümünü seç

procedure TForm1.rOnlyClick(Sender: TObject);
begin
  memo.ReadOnly:=not memo.ReadOnly;
  rOnly.Checked:=not rOnly.Checked;
end;
yukardaki kod ile notepad in sadece yazılabilir veya okunabilir olmasını açıp kapatıyorum. yani readonly olayı. aslında memo.ReadOnly:=true; kodu işimi görüyor fakat menüde ben read only elemanına tıkladığımda yanına bir tik koymuyor ve read only seçili hale gelmiyor. faydalandığım çalışmada ise böyle bir kod kullanmış hem tik koymak hem de readonly durumuna getirmek için. ama ben bu koddan hiçbir şey anlamadım. yukardaki kodun türkçesini anlatabilir misiniz?

biraz uzun oldu ama şimdiden teşekkürler.
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: notepad çalışmasında kafaya takılanlar

Mesaj gönderen omurolmez »

1) ExtractFileName

2) Bırakın öyle kalsın. Eğer başka programlara dikkat ederseniz, Windows Not Defteri, MS Word, MS Excel, vb., program içinde/dışında gözetimi yapmaksızın; panoda öğe varsa, Yapıştır menüsü aktif olur. Bu sayede, programınıza başka yerden veri kopyalayabilirsiniz (Ayrıca genel kabul gören bir kurala uymak daha iyidir).

3) Sizinde tahmin edeceğiniz gibi TMenuItem nesnesinin Checked özelliği true ise, menü başlığının yanında bir onay işareti çıkar. Eğer menünün her tıklanmasında, Checked durumunu tersine çevirmek istersek (işaretli ise işaretsiz; işaretsiz ise işaretli yapmak), şu anki Checked durumunu öğrenir, durumu tersine çevirir ve Checked özelliğine atarız. İşte sorduğunuz kod bunu yapıyor. Çoğu bilgisayar dilinde, atama ifadeleri sağdan sola doğru çalışır. Yani,

Kod: Tümünü seç

Checked :=not Checked;
kodu sağdan sola doğru, Checked özelliğinin değerini öğren, not operatörü uygula, yeni değeri Checked özelliğine ata demektir. Buradaki not operatörü, boolean (true/false) veri tipine uygulandığında, değer true ise false; değer false ise true döndürür (değilini alır).

TMenuItem nesnesinin bir de AutoCheck özelliği vardır. Bu özelliği true yaptığınızda, menünün tıklamaları arasında, Checked özelliğine bir değer atamasanız bile, çek işareti eklenir/kaldırılır.
Ömür Ölmez
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: notepad çalışmasında kafaya takılanlar

Mesaj gönderen xxxjedixxx »

Cevap1:
fName := ExtractFileName(dosAc.FileName);

Cevap2:

Kod: Tümünü seç

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
// Bu kodları bir çok kişi bilmez. Bonus olsun
  if Key = #$16 then Key := #0; // Ctrl V iptal için
  if Key = #$03 then Key := #0; // Ctrl C iptal için
  if Key = #$18 then Key := #0; // Ctrl X iptal için
end;

procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);
begin
  Handled := True;  // Sağ tuş menüsünü kapatmak için
end;
Cevap3:
rOnly menüsünün autocheck'ini false yap. Autocheck true olursa tıklandığında otomatik olarak tıklı işareti gelir fakat kodunda sen tekrar tersine çevirdiğin için tık işaretini kaldırmış oluyorsun.

Ayrıca kodunu aşağıdaki gibi değiştir. Daha mantıklı olacaktır.

Kod: Tümünü seç

procedure TForm1.rOnlyClick(Sender: TObject);
begin
  rOnly.Checked := not rOnly.Checked;
  memo.ReadOnly := rOnly.Checked;
end;
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: notepad çalışmasında kafaya takılanlar

Mesaj gönderen Serhan01 »

omurolmez ve xxxjedixxx cevaplar için çok teşekkürler. gerçekten çok yardımcı oldunuz.
Serhan01
Üye
Mesajlar: 27
Kayıt: 15 Nis 2014 02:02

Re: notepad çalışmasında kafaya takılanlar

Mesaj gönderen Serhan01 »

arkadaşlar iki nokta var sormam gereken.

1.

Kod: Tümünü seç

procedure TForm1.oFontClick(Sender: TObject);
begin

  dosFont.Font:=memo.Font;

  if dosFont.Execute then
    begin
      memo.Font:=dosFont.Font;
    end;

end;
bu kod ile fontu değiştiriyorum ama benim yapmak istediğim herhangi bir texti seçtiğimde sadece o alanın fontun değişmesi ama bu kod ile bütün alanın fontu değişiyor. sadece seçili alanın fontunu nasıl değiştirebilirim?

2.

Kod: Tümünü seç

procedure TForm1.dzGeriClick(Sender: TObject);
begin
  SendMessage(memo.Handle,WM_UNDO,0,0);
end;
bu kod ile yapılan işlemi geri alabiliyorum ama yapılan bütün işlemi geri alıyor. sadece en son yapılan işleme nasıl geri alabilirim?

teşekkürler.
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: notepad çalışmasında kafaya takılanlar

Mesaj gönderen xxxjedixxx »

Merhaba,

Memo1 nesnesiyle kelime fontlarını ayrı ayrı değiştiremezsin. Bunun RichEdit kullanman gerekiyor. Forumda RichEdit ile ilgili bir arama yapabilirsin.

Not: Eğer bu işi başarırsan projenin adını da artık WordPad yapmalısın. Dikkat edersen Notepad'te kelime bazında font değişikliği yoktur. :)
Cevapla