memoda karakter sayısını kontrol etme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ksecil
Üye
Mesajlar: 3
Kayıt: 18 Haz 2003 08:50

memoda karakter sayısını kontrol etme

Mesaj gönderen ksecil »

merhaba arkadaşlar
memoda hersatırın karakter saysını kontrol etmek istiyorum mesela satırdaki karakterler 50 yi gçmeyecek 50 olunca bir alt satıra otomatik geçecek.
herkese iyi çalışmalar...
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

memo nun OnKeyDown event' ına aşağıdaki kodu yazarsan olur.

Kod: Tümünü seç

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  LNum, CNum: longint;
begin
  LNum:= Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart, 0);
  CNum:= Memo1.Perform(EM_LINEINDEX, LNum, 0);
//  Label1.Caption := 'X: '+ IntToStr(LNum + 1);
//  Label2.Caption := 'Y:' + IntToStr((Memo1.SelStart - CNum) + 1);
  if (Key >= 32) and (Key <= 127)
       and (length(Memo1.Lines[LNum]) > 50) then
    Memo1.Lines[LNum] := Memo1.Lines[LNum] + #13 + #10;
end;
kolay gelsin.
mavsar

Mesaj gönderen mavsar »

Kod: Tümünü seç

LineLength :=  SendMessage(Memo1.Handle, EM_LineLength, CPos, 0);
kodu ile satırın uzunluğunu alırsın. Eğer 50 yi geçiyorsa satırı bir arttırırsın.

İyi çalışmalar

Mehmet
ksecil
Üye
Mesajlar: 3
Kayıt: 18 Haz 2003 08:50

Mesaj gönderen ksecil »

teşekkür ederim yardımlarınız için ama
yazdıgım eski satırlardan birine geldigimde
bi kelime unuttum onu yazdıgımda taşan kelimeler alt satıra inmeli
direkt?
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

WordWrap olayını true false yaparak kontrol edebilirsin..

gerisi sana kalmış:))
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Sayın rsimsek hocam,
Sizden kopya çekerek kodu şu hale getirdim:

procedure

TForm1.richedit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
LNum: longint;
i:integer;
begin
LNum:= richedit1.Perform(EM_LINEFROMCHAR, richedit1.SelStart, 0);
for i:= 0 to Lnum do
if (Key >= 32) and (Key <= 127)
and (length(richedit1.Lines[LNum]) > 20) then
richedit1.Lines[LNum] := richedit1.Lines[LNum] + #13 + #10;
end;


Girilen tüm satırlardaki karakter sayısını sınırladım :arrow:
Ancak satır sonlarındaki kelimeler bölünüyor. Bunu nasıl halledebilirim?
//"ahmet bu gün çok neşelid
//ir"
yerine // "ahmet bu gün çok neşelidir" olmalı ama nasıl?
Bilgi çoğaldıkça krallar ölür
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Merhaba,

Bilmem ne düşünürsünüz ama ben genelde bu tür durumlarla karşılaştığımda en basit olan yöntemi uygulyorum :)

Yani Memo Field'ın ekranda görünen size'ını 50 Chr alacak kadar geniş tutup (dikkat fieldın kapasitesini değil), WordWrap'ini True yapıp, Font'unu da Courier New yapıp (50 chr büyüklüğünde sığabilecek size'da) olayı tamamen sabitliyorum :)

Sonra satır 50'yi geçti mi, worddwrap yaptım mı gibi olaylardan kurtuluyorum. Dezavantajı ise, aslında Memofield'da herhangi bir gerçek satır açılmadan (yani kullanıcı Enter tuşuna basmadıysa) satırın uzayıp gitmesi :)

Bunu da gösterim yaptığım yerde hep aynı mantığı kullanarak aşıyorum...

Biraz kolaya kaçmak oluyor ama amaç iş görülsün :)

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
futbolcu
Üye
Mesajlar: 129
Kayıt: 02 Tem 2003 08:33
Konum: Ankara

Mesaj gönderen futbolcu »

Ya arkadaşlar, buna yanıt verecek biri yok mu? Olay şu:
Satırdaki karakterlerin sayısı kontrol edilecek. Bu olay kullanıcı bazlı değil
çağırdığınız metin belgesi 0-50 karakter olacak ve eğer kelime sığmıyorsa
bir alt satıra gelecek. Yukarıda ben bir kod yazdım bu kodun sağlamadığı bir şey var; onu da belirttim.
Lütfen bu konu hakkında bilgisi olan bunu esirgemesin.
saygılarımla
Bilgi çoğaldıkça krallar ölür
Cevapla