Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeile aus RichEdit löschen, wenn ReadOnly = true


mehmeh - Mi 27.07.05 10:02
Titel: Zeile aus RichEdit löschen, wenn ReadOnly = true
Hi,

ich hab ein RichEdit auf ReadOnly gesetzt und schreibe über RichEdit.lines.add() Daten hinein. Nun hab ich aber das Problem, dass ich ganz unten eine Leerzeile habe. Und die muss da weg, weil der Text per Mail verschickt wird und möglicher weiße wieder maschinell eingelesen wird und da deswegen am Ende keine Leerzeile stehen darf.
Wäre ja kein Problem die Leerzeile mit Entf zulöschen, aber in das Feld soll der Benutzer nichts ändern können.

wenn ich RichEdit.Lines.Delete oder Free mache, dann ist alles weg. Das klappt also nicht.

Habt ihr ne Idee?


jasocul - Mi 27.07.05 10:08

Du kannst bei Delete noch einen Index als Parameter übergeben. Der bestimmt dann die Zeile, die gelöscht werden soll.


mehmeh - Mi 27.07.05 10:28

Also ich hab´s
so

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for i := 1 to 75 do          // Die 75 Bingo Zahlen werden ins RichEdit geschrieben
 RichEdit1.Lines.Add(IntToStr(i) + '=' + b[i]);

 RichEdit1.Lines.Add('J=' + IntToStr(j));
 RichEdit1.Lines.Add('S=' + b[s]);

 i := RichEdit1.Lines.Count;
 RichEdit1.Lines.Delete(i);

und das klappt nicht.
Aus mir momentan unerklärlichen Gründen ist da unten immer noch eine Leerzeile.

wenn

RichEdit1.Lines.Delete(i+1);

dann passiert nichts
aber wenn

RichEdit1.Lines.Delete(i-1);

dann wird die Zeile über der Leerzeile gelöscht
Was hab ich denn nur übersehen


jasocul - Mi 27.07.05 10:41

Das

Delphi-Quelltext
1:
RichEdit1.Lines.Delete(i-1);                    

wäre im Prinzip richtig.
Allerdings scheint ein Richedit die letzte Zeile mit "nichts" nicht mitzuzählen. Ich habs mir anzeigen lassen. Die Zeilenzahl entspricht der Anzahl, ohne diese berüchtigte letzte Zeile.


Lannes - Mi 27.07.05 11:00

Hallo,

richtig.
Die letzte Zeile wird zwar nicht mitgezählt, aber mit SaveToFile wird daraus eine Zeile in der RTF-Datei.
Die "berüchtigte letzte Zeile" und eventuelle Leerzeilen kannst Du mit folgendem Code entfernen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var s : String;
    z : Integer;
begin
  //Leerzeilen entfernen
  for z := RichEdit1.Lines.Count-1 downto 0 do
    begin
    if RichEdit1.Lines[RichEdit1.Lines.Count-1] = '' then
      RichEdit1.Lines.Delete(RichEdit1.Lines.Count-1)
      else
      break;
    end;
  //berüchtigte letzte Zeile entfernen (entspricht Taste Entf)
  s := RichEdit1.Text;
  delete(s,Length(s)-1,2);
  RichEdit1.Text := s;
  RichEdit1.Lines.SaveToFile('C:\temp\Eine.rtf');
end;


mehmeh - Mi 27.07.05 11:30

@ Lannes

das war eine sehr gute Antwort und es hat geklappt!

DANKE!