Memo bileşenindeki alt satırları silmek istiyorum

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 183
Kayıt: 01 Oca 2008 05:34

Memo bileşenindeki alt satırları silmek istiyorum

Mesaj gönderen Commandx »

Şey başlıktanda anlaşıldığı gibi yaptığım bir projede
form üzerinde bir memo bileşeni var
içeriğinde gelişigüzel yazılmış alt alta satırlar var
Resim
bazen satırlara programın başka işlemleri sırasında nedense boş satır yazılmak zorunda kalıınıyor

istediğim şey buttona basınca memo içindeki yazıların aynen kalması alttaki boş satırların silinmesi
Böyle olmasını istiyorum
Resim
uğraştım yapamadım
Forumda memo ile ilgili benzer konuları aradımsada bulamadım
Yardımlarınız için şimdiden teşekür ederim
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Memo bileşenindeki alt satırları silmek istiyorum

Mesaj gönderen unicorn64 »

memo nun satırları üzerinde döngü kurup. satırdaki değer boşsa o satırı sil demeniz yeterli olacaktır.
uğraştım yapamadım dediğiniz kodu buraya kopyalarsanız nerde eksiğiniz olduğuna birlikte bakarız...
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Kullanıcı avatarı
Commandx
Üye
Mesajlar: 183
Kayıt: 01 Oca 2008 05:34

Re: Memo bileşenindeki alt satırları silmek istiyorum

Mesaj gönderen Commandx »

bu döngü kurularak yaptığım

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);

var
i:integer;
begin
for i := 0 to memo1.Lines.Count -1 do
if memo1.GetTextLen=0 then begin
//if memo1.lines.Strings='' then begin // bunuda denedim
memo1.Lines.Delete(i);
end;

end;
Buda Memo içindeki #13#10 enter karakteri gördüğü yerde replace etsin istedim sonuç alamadım

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
 Memo1.Lines.Text:= StringReplace(Memo1.Lines.text,#13#10,'',[rfReplaceAll]);a


end;
bu iki koduda denedim olmadı
http://www.delphibasics.co.uk/RTL.asp?Name=DaysBetween
http://www.neonhaber.com/Static/mega-co ... index.html
www.delphican.con
Function PARSE( text, ilk, son:String ): String; //
begin
Delete(Text, 1, pos(ilk, Text) + Length(ilk)-1);
Result := Copy(Text, 1, Pos(Son, Text)-1);
end;
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Memo bileşenindeki alt satırları silmek istiyorum

Mesaj gönderen unicorn64 »

if kontrolüne breakpoint koysaydın belki farkederdin yanlış şeyi kontrol ettiğini...
o anki satırı değil memonun tüm içeriğini kontrol etmişsin

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
  i:=0;
  while i<memo1.Lines.Count do
  begin
    if Memo1.Lines[i]='' then // !!!!
      Memo1.Lines.Delete(i)
    else
      i:=i+1;
  end;
end;
bazen yükselmek için önce dibi görmek gerekir...

forumda soru sormadan önce bakılmalı bence
daha fazlası için...

yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...

Resim
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Re: Memo bileşenindeki alt satırları silmek istiyorum

Mesaj gönderen Hakan Can »

Farklı bir tarz denemek istersen hem hız da önemliyse şunları deneyebilirsin (en sonuncusu en hızlısı):

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := Memo1.Lines.Count - 1 downto 0 do
    if Memo1.Lines[I] = '' then Memo1.Lines.Delete(I);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
begin
  Memo1.Lines.BeginUpdate;
  try
    for I := Memo1.Lines.Count - 1 downto 0 do
      if Memo1.Lines[I] = '' then Memo1.Lines.Delete(I);
  finally
    Memo1.Lines.EndUpdate;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  I: Integer;
begin
  with TStringList.Create do
  try
    for I := 0 to Memo1.Lines.Count - 1 do
      if Memo1.Lines[I] <> '' then Add(Memo1.Lines[I]);
    Memo1.Lines.Text := Text;
  finally
    Free;
  end;
end;
Cevapla