| Autor |
Beitrag |
Tante Ulla
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 16.06.07 08:38
Hi,
ich habe ein TRichEdit mit fester Größe (20 Zeilen mit je 59 Zeichen, also max. 1180 Zeichen).
MaxLength habe ich auf 1180 gesetzt.
Allerdings könnte da jetzt jemand auf die Idee kommen und da 20 Leerzeilen einfügen und ab Zeile 21 den eigentlichen Text eingeben. Deswegen würde ich gerne die aktuelle Cursor Position in Echtzeit auslesen und in ein anderes Feld in Echtzeit schreiben, um dem eingebenden User die noch zur Verfügung stehenden Zeichen anzuzeigen.
Also:
Restzeichen = MaxLength - (letzteZeile -1) * 59 - AnzahlZeicheninletzterZeile
Geht sowas in Echtzeit? Und wenn ja, hat jemand nen Hinweis mit welchen Mitteln oder nach was ich hier im Forum suchen muss?
Zuletzt bearbeitet von Tante Ulla am Sa 16.06.07 08:52, insgesamt 1-mal bearbeitet
|
|
bflegel
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: Sa 16.06.07 08:43
Hmmm, ich hab zwar noch nicht mit RichEdit gearbeitet, kenne daher nicht dessen Eigenschaften, aber könntest Du nicht, wenn Du Dich im Richedit befindest, per Timer die Anzahl der eingegebenen Zeichen zählen und dann ausgeben?
_________________ I know all the jokes about my name
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Sa 16.06.07 09:14
Schau mal nach Caret Position gibt Dir Zeile und Position an.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Tante Ulla 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 16.06.07 12:13
Ein Fettes Danke euch beiden.
Der Tip mit dem Timer war genau das was ich gebraucht habe.
Die Berechnungen habe ich mit Lines.Count und Text(Length) hinbekommen.
Funzt jetzt so wie es soll.
|
|
bflegel
      
Beiträge: 193
Erhaltene Danke: 1
Win XP, Win 7, BS2000
D5
|
Verfasst: Sa 16.06.07 12:23
Gern geschehen...
_________________ I know all the jokes about my name
|
|
jakobwenzel
      
Beiträge: 1889
Erhaltene Danke: 1
XP home, ubuntu
BDS 2006 Prof
|
Verfasst: Sa 16.06.07 12:38
Ich würd das nich in nem Timer berechnen, sondern im Ereignis OnChange von RichEdit. So wirds nur dann neu berechnet, wenn sich auch worklich was ändert.
_________________ I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
|
|
Tante Ulla 
Hält's aus hier
Beiträge: 4
|
Verfasst: Sa 16.06.07 13:46
Noch besser. Funzt mit OnChange super, ich denke damit sollte es noch wesentlich ressourcenschonender sein. Dangööööö
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 16.06.07 18:37
Hallo,
wenn das RichEdit so eingerichtet ist das alle Zeilen im sichtbaren Bereich liegen, dann dürfte das Ereignis OnResizeRequest besser als OnChange sein. OnResizeRequest wird ausgelöst wenn ein größerer Bereich für den Text benötigt wird, also wenn eine neue Zeile benutzt wird.
Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TForm1.RichEdit1ResizeRequest(Sender: TObject; Rect: TRect); begin if Rect.Bottom - Rect.Top > RichEdit1.ClientHeight then Label.Caption := 'Es reicht'; end; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Tante Ulla 
Hält's aus hier
Beiträge: 4
|
Verfasst: So 17.06.07 09:16
Auch ne gute Idee, die ich gleich umgesetz habe. Ich hab dafür aber dann nen MessageDlg anstatt Label.Caption genommen.
Nochmal ein fettes Dangööööö für eure Anregungen und Tips.
|
|