![]() |
Richeditfeld auf Größe begrenzen
Hi,
habe ein Richeditfeld, dieses soll in seiner Größe nicht veränderbar sein. D.h. wenn das Ende der letzten Zeile des Richeditfeldes erreicht worden ist, darf nicht einfach vorne wieder weiter gemacht werden und die erste Zeile nach oben verschoben werden. Es darf kein weiterer Eintrag mehr möglich sein. Wie kann man dieses Problem beheben? 8) |
Hallo, vielleicht hilft dir ja die Eigenschaft MaxLength weiter, mit der kannst du auf jeden Fall schonmal die Zeichenanzahl begrenzen.
Gruß, Sebastian |
Maxlength bringt mir in meinem Fall wenig, da die Größe der Schrift im Richeditfeld variabel ist. Es kann also sein, dass z.B 100 Zeichen in das Richeditfeld passen oder aber nur 80.
|
Hi,
ich frage mich, wofür das wirklich nötig ist. Ansonsten kannst du WordWrap = true und dann gucken, dass in der nächsten Zeile wirklich nichts mehr steht... Chris |
Moin Gogi,
nur mal so als Idee (ungetestet): Prüfe im OnChange Ereignis, den Wert der maximalen Zeilenzahl und lösche alle darüber liegenden Zeilen. Beispiel:
Delphi-Quellcode:
procedure TForm1.RichEdit1Change(Sender: TObject);
const _iMaxLines = 5; begin if RichEdit1.Lines.Count > _iMaxLines then begin while (RichEdit1.Lines.Count) > _iMaxLines do begin RichEdit1.Lines.Delete(RichEdit1.Lines.Count-1); end; end; end; |
Ja, aber wie kommt man dann auf die Anzahl der Linien ???
Ich habs mit
Delphi-Quellcode:
und mit
richedit1.height / richedit1.Font.height
Delphi-Quellcode:
versucht, aber beide Werte ergeben nicht die Anzahl der Linien die gesucht ist !!!
richedit1.height / richedit1.Font.size
Kann ich es mit der Schriftgröße machen ??? Wenn ja, wie dann ?? |
Um meinen Vorschlag von oben etwas zu verdeutlichen:
Delphi-Quellcode:
Um das zu erklären: Du guckst, ob die Anzahl der Zeilen größer als 1 ist, und wenn ja löscht du die 2. Zeile (Delphi fängt bei 0 an).
RichEdit1.WordWrap := true;
{ ... } procedure TForm1.RichEdit1Change(Sender: TObject); begin if RichEdit1.Lines.Count > 1 then begin RichEdit1.ReadOnly := true; // eine Möglichkeit... RichEdit1.Lines.Delete(1); end; end; Chris |
Moin Chris,
dabei übersiehst Du nur, dass jemand auch per Copy&Paste etwas einfügen könnte, so dass es durch aus Sinn macht alle Zeilen, die über die gewünschte Anzahl hinausgehen zu löschen. Sicher ist sicher ;-) |
Jetzt haben wir aber immernoch nicht gelöst wie man auf die Zeilenanzahl kommt ! Hat keiner von euch eine Idee?
|
Hiermit solltest Du die möliche Anzahl der Zeilen erhalten:
Delphi-Quellcode:
var
MaxLines: Word; begin with RichEdit1 do begin Canvas.Font := Font; MaxLines := (Height div Canvas.TextHeight('Wg')); end; {...} end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz