![]() |
Memo Zeichenzähler mit Eingabe
Hallo, ich hab ein kleines Problem. Ich möchte die Zeichen vom Memo feld auslesen, sodass das mit der MaxLength passt. Nur die Eingabetaste nimmt er nicht mit, warum weiss ich net.
Hier ist bis jetzt mein Code:
Delphi-Quellcode:
Ich Bitte um Hilfe
var wort: string;
zeichenzahl, zeilenzahl,i,zeile,zeichenzaehler: Longint; begin Zeichenzahl:=Memo1.lines.count; Zeichenzaehler:=0; FOR i:=0 TO zeichenzahl-1 DO Begin wort:=memo1.lines[i]; zeichenzaehler:=zeichenzaehler+length(wort); end; Form1.StatusBar1.Panels[1].Text:=('Zeichenzahl: ' + InttoStr(zeichenzaehler)); MfG Dave |
Re: Memo Zeichenzähler mit Eingabe
Warum nicht
Delphi-Quellcode:
Length(Memo1.Text)
|
Re: Memo Zeichenzähler mit Eingabe
Zitat:
MfG Dave |
Re: Memo Zeichenzähler mit Eingabe
Ist ja auch richtig. Ein Return führt zu einem Zeilenvorschub und einem Wagenrücklauf. Und die zählen auch zu der Anzahl Zeichen.
|
DP-Maintenance
Dieses Thema wurde von "Luckie" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.
Delphi VCL Thema. |
Re: Memo Zeichenzähler mit Eingabe
Zitat:
|
Re: Memo Zeichenzähler mit Eingabe
Na dann ziehe die Anzahl der Zeilen wieder ab. Dann müsste es stimmen. Bei zwei Zeilen hast du vier Steuerzeichen minus zwei Zeilen sind ein Steuerzeichen pro Zeile.
|
Re: Memo Zeichenzähler mit Eingabe
Zitat:
MfG Dave |
Re: Memo Zeichenzähler mit Eingabe
Dann von Hand zählen:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure Memo1KeyPress(Sender: TObject; var Key: Char); private { Private-Deklarationen } cntChars: Integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char); begin Inc(cntChars); Caption := IntToStr(cntChars); end; |
Re: Memo Zeichenzähler mit Eingabe
Zitat:
Jo, danke. genau das hab ich gesucht. Warum bin ich heut net selber dahinter gekommen? Ist mir ein rätsel :-) Trotzdem danke MfG Dave |
Re: Memo Zeichenzähler mit Eingabe
MMh, mir fällt grd auf, das wenn ich was lösche, das dies als zeichen mit hinzugefügt wird.
MMh, naja. Ich mach morgen weiter. Heute isses mir zu spät. MfG Dave |
Re: Memo Zeichenzähler mit Eingabe
Zitat:
|
Re: Memo Zeichenzähler mit Eingabe
Hi!
Als Tipp dazu: Du musst dann noch abfragen, welches Zeichen da so kommt - es kommen ja nur 2 Tastendrücke in Frage, die etwas löschen können. Allerdings gibt es noch mehr Sonderfälle: Markierten Text (mehr als ein Zeichen) löschen oder sogar ausschneiden oder überschreiben... Auch das Einfügen von Text (sei es über Kontextmenü oder über Tastenkombi) solltest du bedenken... Grüße, Frederic |
Re: Memo Zeichenzähler mit Eingabe
Zitat:
Das solltest du wie beim Memo lieber weglassen. Zum Thema: Warum denkt ihr so kompliziert? :mrgreen:
Delphi-Quellcode:
Bzw. wenn der Zeilenumbruch gar nicht gezählt werden soll, dann einfach durch einen leeren String statt mit einem Leerzeichen ersetzen, fertig.
StatusBar1.Panels[1].Text := 'Zeichenzahl: '
+ IntToStr(Length(StringReplace(Memo1.Text, #13#10, ' ', [rfReplaceAll]))); Diese Lösung ist zwar langsamer usw. als einfaches Zählen, aber bei der zu erwartenden Zeichenanzahl spielt das ja keine Rolle. |
Re: Memo Zeichenzähler mit Eingabe
Zitat:
Delphi-Quellcode:
StatusBar1.Panels[1].Text:=IntToStr(Length(Memo1.Text)-Memo1.Lines.Count);
|
Re: Memo Zeichenzähler mit Eingabe
Zitat:
Zitat:
// EDIT: Es sollte reichen bei 0 Zeichen in der letzten Zeile nochmal minus Eins zu rechnen. Kommt noch dazu, dass man die Leerzeile woanders machen kann... |
Re: Memo Zeichenzähler mit Eingabe
Ich hab das schon getestet, habe mir aber zugegebenermaßen nicht alle Kommentare angesehen und deswegen den Sonderfall (Zeile hat noch kein CRLF) nicht 'drauf gehabt.
So sollte es dann vollständig funktionieren:
Delphi-Quellcode:
M.E. sollte das aber nicht in Memo1KeyPress stehen sondern im Memo1Change.
var s:string; len:integer;
begin s:=Memo1.Text; len:=Length(s); dec(len,Memo1.Lines.Count-Integer((len>0) and (s[len]<>#10))); Statusbar1.Panels[0].Text:=IntToStr(len); end; |
Re: Memo Zeichenzähler mit Eingabe
Man könnte es auch mit
Delphi-Quellcode:
versuchen
Anzahl := Length(Memo.Lines.DelimitedText);
|
Re: Memo Zeichenzähler mit Eingabe
Hallo
Dank jaenicke, das war das was ich gesucht hatte
Delphi-Quellcode:
Funzt perfekt
IntToStr(Length(StringReplace(Memo1.Text, #13#10, ' ', [rfReplaceAll])));
MfG Dave |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:06 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