Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Memo, Texteingabebeschränkung (https://www.delphipraxis.net/65912-memo-texteingabebeschraenkung.html)

Igotcha 22. Mär 2006 10:09


Memo, Texteingabebeschränkung
 
Hallo zusammen,

ich habe gerade mit TMemo und SynEdit rumgespielt, doch noch keine Lösung für folgende Aufgabenstellung gefunden:

Ich brauche eine Möglichkeit, in einem Memo Text mit einer festen Zeichenbreite einzugeben, der auf 19 Zeilen und 40 Zeichen pro Zeile begrenzt ist. Wird beim Schreiben über das 40. Zeichen geschrieben, soll das komplette Wort in der nächsten Zeile beginnen. Selbstverständlich sollen auch nicht mehr als 19 Zeilen möglich sein.

Viele Grüße
Igotcha

Igotcha 23. Mär 2006 08:55

Re: Memo, Texteingabebeschränkung
 
Kleiner "push", da ich noch keine Lösung gefunden habe.

JWeis 23. Mär 2006 09:41

Re: Memo, Texteingabebeschränkung
 
Delphi-Quellcode:
memo1.maxlength:= 19*40
so kannst du den maximalen inhalt des memos festlegen


Delphi-Quellcode:
wordwarp:= true
word wird am ende in nächste zeile geschrieben


Zitat:

Zitat von Igotcha
Ich brauche eine Möglichkeit, in einem Memo Text mit einer festen Zeichenbreite einzugeben, der auf 19 Zeilen und 40 Zeichen pro Zeile begrenzt ist.

das weis ich leider nicht

Igotcha 23. Mär 2006 09:52

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von JWeis
Zitat:

Zitat von Igotcha
Ich brauche eine Möglichkeit, in einem Memo Text mit einer festen Zeichenbreite einzugeben, der auf 19 Zeilen und 40 Zeichen pro Zeile begrenzt ist.

das weis ich leider nicht

Wie ich die maximal Zeichenzahl gesamt und Zeilenumbruch am rechten Rand festlegen kann, das weiss ich ;-)

Ich brauche diese 40 Zeichen-Beschränkung deshalb, da das dann gespeicherte File in einer anderen Anwendung eingelesen wird, die erwartet, dass maximal 40 Zeichen in einer Zeile stehen und danach eine neue Zeile kommt, bis maximal 19 Zeilen.

Dazu würde ich dann den Inhalt des Memos per Lines[x] (mit maximal 40 Zeichen) manuell in eine Textdatei schreiben.

Gruß Igotcha

Grishnak 23. Mär 2006 09:58

Re: Memo, Texteingabebeschränkung
 
Du kannst per .CaretPos die Zeile/Spalte herausfinden, in denen sich der Cursor momentan befindet.
Wenn der Spalten-Wert 40 ist, musst du nun (z.B. im .OnChange-Ereignis) dafür sorgen, dass der Cursor in die nächste Zeile kommt. (gibt es nicht die Möglichkeit, einen "virtuellen" Tastendruck an eine Komponente zu schicken?).

Klaus01 23. Mär 2006 10:01

Re: Memo, Texteingabebeschränkung
 
wordwrap = true macht nur in der Darstellung im TMemo einen "Zeilenumbruch" -
liest man das TMemo dann aus gibt es nur eine lange Zeile.

Grüße
Klaus

Igotcha 23. Mär 2006 11:12

Re: Memo, Texteingabebeschränkung
 
Danke für die Kommentare erstmal, aber ich möchte mich ja gerade nicht manuell (also durch Cursorabfrage, o.ä.) darum kümmern müssen, ob ich in die nächste Zeile muss - vor allem was ist, wenn der Anwender ein Zeichen löscht ;-)

Gruß Igotcha

marabu 23. Mär 2006 11:21

Re: Memo, Texteingabebeschränkung
 
Den geringsten Aufwand verursacht sicherlich eine Prüfung auf Knopfdruck, nachdem der Text erfasst wurde. Dabei ist die Funktion WrapText() aus der Unit StrUtils sicher hilfreich.

Grüße vom marabu

TeronG 23. Mär 2006 11:33

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von Igotcha
.... das gespeicherte File in einer anderen Anwendung eingelesen wird ...

Wenn der Text eh erst gespeichert und dann wieder geladen wird dann kannste die Formartierung doch beim bzw. vorm Speichern erledigen. :gruebel:
Falls die Zeilenzahl dann zu groß wird musste hald ne Meldung ausgeben.
Evtl. nicht die schönste aber ne einfache Lösung ^^

Igotcha 23. Mär 2006 11:44

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von TeronG
Zitat:

Zitat von Igotcha
.... das gespeicherte File in einer anderen Anwendung eingelesen wird ...

Wenn der Text eh erst gespeichert und dann wieder geladen wird dann kannste die Formartierung doch beim bzw. vorm Speichern erledigen. :gruebel:
Falls die Zeilenzahl dann zu groß wird musste hald ne Meldung ausgeben.
Evtl. nicht die schönste aber ne einfache Lösung ^^

Nee, der Anwender soll einen Editor haben (wir haben das auch schon mit Word und Feldern probiert), in dem er in einer "Matrix" von 40*19 Text eingeben kann und zwar genau so, wie er nach dem Einlesen in die andere Anwendung auch dort erscheinen soll.

Du möchtest ja auch nicht, dass Word erst beim Speichern sagt, dass Du irgendwo zuviel Text eingegeben hast, o.ä. ;-)

Gruß Igotcha

Klaus01 23. Mär 2006 12:08

Re: Memo, Texteingabebeschränkung
 
Liste der Anhänge anzeigen (Anzahl: 1)
kannst Du nicht das memofeld als Ausgabe/Ansicht verwenden.
Die Eingabe kann ja dann über ein Editfeld (wo nur 40 Zeichen erlaubt sind)
vorgenommen werden.

Wird das Editfeld in das memofeld übertragen kannst Du
überprüfen ob das Zeilenlimit erreicht ist.

Etwas umständlich - aber sollte so gehen.

Grüße
Klaus

TeronG 23. Mär 2006 12:14

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von Igotcha
Nee, der Anwender soll einen Editor haben (wir haben das auch schon mit Word und Feldern probiert), in dem er in einer "Matrix" von 40*19 Text eingeben kann und zwar genau so, wie er nach dem Einlesen in die andere Anwendung auch dort erscheinen soll.

Du möchtest ja auch nicht, dass Word erst beim Speichern sagt, dass Du irgendwo zuviel Text eingegeben hast, o.ä. ;-)

Hast ja recht .. dann bleibt dir aber scheinbar nix übrig als de Text bei der eingabe zu Prüfen (ab Cursorposition oder so)

Airblader 23. Mär 2006 12:19

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von Grishnak
Du kannst per .CaretPos die Zeile/Spalte herausfinden, in denen sich der Cursor momentan befindet.
Wenn der Spalten-Wert 40 ist, musst du nun (z.B. im .OnChange-Ereignis) dafür sorgen, dass der Cursor in die nächste Zeile kommt. (gibt es nicht die Möglichkeit, einen "virtuellen" Tastendruck an eine Komponente zu schicken?).

Gefährlich ;) Man kann per Strg+V dann Texte einfügen und nur die letzte Zeile wird geprüft ;)

air

Igotcha 23. Mär 2006 13:24

Re: Memo, Texteingabebeschränkung
 
Zitat:

Zitat von Klaus01
kannst Du nicht das memofeld als Ausgabe/Ansicht verwenden.
Die Eingabe kann ja dann über ein Editfeld (wo nur 40 Zeichen erlaubt sind)
vorgenommen werden.

Wird das Editfeld in das memofeld übertragen kannst Du
überprüfen ob das Zeilenlimit erreicht ist.

Etwas umständlich - aber sollte so gehen.

Grüße
Klaus

Neeeeeee ;-)

Der Anwender muss die Möglichkeit haben, 760 Zeichen Text, "ganz normal" eingeben zu können (unter den Beschränkungen max. 19 Zeilen, max. 40 Zeichen pro Zeile).

Ansonsten könnte ich ihm ja auch ein StringGrid (19*40) zur Verfügung stellen, wenn ich den Anwender quälen wollte ;-)

Gruß Igotcha


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz