Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Memo auf max Zeichen/Zeile beschränken


AlexBegin - Fr 12.10.07 11:31
Titel: Memo auf max Zeichen/Zeile beschränken
Gibt es eine Möglichkeit ein Memo auf eine bestimmte Zeichen/Zeile zu beschränken? Ich habe bis jetzt nur die Option im Ojektinspektor für die maximale Zeichen im ganzen Memo gefunden. Kann mir jemand von euch mir helfen?

Bis dann
Alex


zuma - Fr 12.10.07 11:55

Selbstmachen ist der Programmierer Lust ;)
Der Sinn ist mir aber nicht klar. Sollte doch egal sein, wie lang eine Zeile eingegeben wird, da das Memo automatisch umbricht (wenn im OI : WordWrap = True), wenn die Zeile breiter als Memoanzeigebreite ist ?


jasocul - Fr 12.10.07 12:14

user profile iconzuma hat folgendes geschrieben:
Der Sinn ist mir aber nicht klar.
Ein Beispiel aus der Praxis:
Wenn das Memo später mal gedruckt werden soll und nur ein begrenzter Bereich zur Verfügung steht.

Zur Frage:
Bei jedem Tastendruck prüfen, ob die Zeile schon voll ist und dann entsprechend reagieren.


zuma - Fr 12.10.07 13:02

user profile iconjasocul hat folgendes geschrieben:
user profile iconzuma hat folgendes geschrieben:
Der Sinn ist mir aber nicht klar.
Ein Beispiel aus der Praxis:
Wenn das Memo später mal gedruckt werden soll und nur ein begrenzter Bereich zur Verfügung steht.


schon klar, ich habe mich ja auch auf das eingeben bezogen, nicht auf das verwenden. Unklar war mir der Sinn, das im Memo schon bei der Eingabe zu machen. Ich weiss ja nicht, wie andere das sehen, aber bei mir ist immer die Druckroutine für das Aufbereiten der zu druckenden Daten zuständig, das Memo wäre also 'nur' ein 'Datenlieferant'.


jasocul - Fr 12.10.07 13:09

Es kann aber notwendig sein, dass das schon bei der Eingabe berücksichtigt werden muss. Dabei können mehrere Dinge eine Rolle spielen:
- Schriftart (Feste Zeichenbreite)
- manuelle Umbrüche und Leerzeichen/Einrückungen
- Unveränderte Darstellung von Bildschirm und Druck.


zuma - Fr 12.10.07 13:19

user profile iconjasocul hat folgendes geschrieben:
Es kann aber notwendig sein, dass das schon bei der Eingabe berücksichtigt werden muss. Dabei können mehrere Dinge eine Rolle spielen:
- Schriftart (Feste Zeichenbreite)
- manuelle Umbrüche und Leerzeichen/Einrückungen
- Unveränderte Darstellung von Bildschirm und Druck.


Schriftart:
würd ja bedingen, das abhängig von der Schriftart eine unterschiedliche Zeilenlänge vorzugeben ist. (breite Schrift = 10 zeichen, schmale schrift = 15 zeichen oder sowas in der art). war hier aber nicht die rede von.

manuelle Umbrüche, leerzeichen
die umbrüche sind doch gespeichert, wenn man statt memo.text memo.lines nutzt ?

unveränderte Darstellung Bildschirm und Druck:
Bei memo's nie sicher zu realisieren - wenn z.b 3 zeilen sichtbar, aber 4 enthalten, darf man streng genommen nur 3 zeilen drucken, da man die 4te nicht am Bildschirm sieht .. :)
unverändert heisst auch, alle leerzeichen, einrückungen usw. so zu lassen, also nichts zu ändern - ergo am besten lines für lines printen

:) wollte nur mal bissl 'korinthen kacken' *gg*
have a nice day ;)


AlexBegin - Fr 12.10.07 14:05

Wie jasocul sagt, benutze ich das Memo als Dateneingabe und diese wird dann mit einem anderem Zeichensatz ausgedruckt.

Wie soll das mit dem Überprüfen des Tastendruck und dessen Weiterverarbeitung funktionieren?

Bis dann
Alex


zuma - Fr 12.10.07 14:52

user profile iconAlexBegin hat folgendes geschrieben:
Wie jasocul sagt, benutze ich das Memo als Dateneingabe und diese wird dann mit einem anderem Zeichensatz ausgedruckt.

Wie soll das mit dem Überprüfen des Tastendruck und dessen Weiterverarbeitung funktionieren?

Bis dann
Alex


Ich denke mal, er meint das in etwa so:

beim onkeypress des Memo's:
zeile := memo.lines.Strings[aktuelleZeile];
if length(zeile) >= maxZeilenLaenge then
machwasmitzeile (was auch immer du machen möchtest (eingabe beenden, zeile umbrechen, etc)

else nicht nötig, da nix zu machen ist,
wenn zeile noch nicht maxZeilenlänge erreicht hat


Lannes - Fr 12.10.07 16:32

Hallo,

//Edit: Tipp war nicht richtig beschrieben, so ist es besser:

ich würde ein RichEdit nehmen, das Ereignis RichEdit.OnResizeRequest wird ausgelöst wenn der beschriebene Bereich vergrößert wird. Die Prozedurvariable Rect liefert Dir die koordinaten des beschriebenen Bereichs.