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/)
-   -   Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern? (https://www.delphipraxis.net/156725-mehrzeiliges-tedit-bzw-linebreak-tmemo-verhindern.html)

PeterPanino 13. Dez 2010 01:17

Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Hallo,

ich benötige ein mehrzeiliges TEdit, d.h. ein TEdit mit WordWrap, wobei der umgebrochene Text natürlich kein LineBreak (#13#10) enthalten soll.

Da ich keine entsprechende Komponente gefunden habe, habe ich versucht, eine solche mit einem TMemo zu simulieren, bei dem das Einfügen eines LineBreak verhindert wird:
Delphi-Quellcode:
mmo1.WordWrap := True;

procedure TForm1.mmo1Change(Sender: TObject);
var
  CP: Integer;
begin
  if Pos(#13#10, mmo1.Text) > 0 then
  begin
    CP := mmo1.SelStart;
    mmo1.Text := StringReplace(mmo1.Text, #13#10, '', [rfReplaceAll]);
    mmo1.SelStart := CP - 2;
  end;
  mmo1.Width := mmo1.Width + 1;
  mmo1.Width := mmo1.Width - 1;
end;
Das ist aber nur ein umständlicher Workaround. Hat jemand eine bessere Idee?

Luckie 13. Dez 2010 01:34

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Benutze visuelle Komponenten nicht zur Datenhaltung. Wenn du den Text ohne Zeilenumbrüche brauchst nimm eine normale Variable vom Typ String.

PeterPanino 13. Dez 2010 01:41

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Ich brauche das nicht zur Datenhaltung, sondern der User soll das zur Dateneingabe benutzen.

LG

Luckie 13. Dez 2010 01:50

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Dann ist es doch egal. Er guckt sich die Daten nur an und bei einem Zeilenumbruch sieht man ja nicht die Steuerzeichen. Deswegen verstehe ich jetzt nicht, was du willst.

PeterPanino 13. Dez 2010 01:58

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von Luckie (Beitrag 1068178)
Deswegen verstehe ich jetzt nicht, was du willst.

Verhindern, dass der User ein LineBreak eingibt.

Björn Ole 13. Dez 2010 02:12

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Delphi-Quellcode:
procedure TSchöneForm.SchönesMemoKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Chr(VK_RETURN) then
    Key := #0;
end;

Luckie 13. Dez 2010 02:56

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Entferne doch die Zeilenumbrüche wieder, wenn du die Daten weiterverarbeitest.

Jens Hartmann 13. Dez 2010 07:04

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Was Luckie meint,

wäre z.B. sowas...

http://www.delphipraxis.net/17346-wi...-loeschen.html

zu diesem Thema findest Du hier im Forum viel Beiträge.

Gruß Jens

PeterPanino 13. Dez 2010 09:01

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von Björn Ole (Beitrag 1068180)
Delphi-Quellcode:
procedure TSchöneForm.SchönesMemoKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Chr(VK_RETURN) then
    Key := #0;
end;

Danke, das funktioniert aber nicht beim Einfügen aus der Zwischenablage - deswegen habe ich ja OnChange verwendet.

PeterPanino 13. Dez 2010 09:03

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von PeterPanino (Beitrag 1068179)
Verhindern, dass der User ein LineBreak eingibt.

Das war etwas ungenau ausgedrückt. Das trifft es besser:

Ein TEdit mit WordWrap oder ein Verfahren, das ein solches simuliert.

PeterPanino 13. Dez 2010 09:06

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von Jens Hartmann (Beitrag 1068183)
Was Luckie meint,

wäre z.B. sowas...

http://www.delphipraxis.net/17346-wi...-loeschen.html

zu diesem Thema findest Du hier im Forum viel Beiträge.

Gruß Jens

Genau das steht ja oben in meinem Code.:|

p80286 14. Dez 2010 21:05

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Es gibt kein mehrzeiliges TEdit!
Dafür ist TMemo zuständig.

Wenn Du aus was für Gründen auch immer keine CR/LF in Deinem Text haben willst, kannst Du diese entweder aus dem TMemo.Text entfernen oder mit Hilfe von String und TLabel/TStaticText Dein mehrzeiliges TEdit simulieren.

Denn irgendwann schlägt sich die Darstellung in einem TMemo auf die Daten im TMemo.Text nieder.

Zitat:

Zitat von Luckie (Beitrag 1068176)
Benutze visuelle Komponenten nicht zur Datenhaltung. Wenn du den Text ohne Zeilenumbrüche brauchst nimm eine normale Variable vom Typ String.

Gruß
K-H

PeterPanino 15. Dez 2010 00:37

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
@ p80286

hast du den Code ausprobiert, den ich am Anfang im Ausgangsposting reingestellt habe?

sx2008 15. Dez 2010 01:58

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
@PeterPanino: Irgendwie bist du gefangen in deiner Idee, du bräuchtest ein mehrzeiliges Editfeld ohne Zeilenumbrüche (was ja schon ein Widerspruch in sich ist).
Du versuchst Sourcecode zu finden wo es eigentlich nötig wäre über die Benutzeroberfläche nachzudenken und zu diskutieren.
"Befreie deinen Geist!" - Na aus welchem Film ist das Zitat?

Was genau soll der Benutzer eingeben?
Warum soll es ihm verboten sein eine neue Zeile einzufügen oder eine bestehende Zeile umzubrechen?
Wäre vielleicht nicht ein Stringgrid viel besser geeignet?

PeterPanino 15. Dez 2010 02:07

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von sx2008 (Beitrag 1068587)
@PeterPanino: Irgendwie bist du gefangen in deiner Idee, du bräuchtest ein mehrzeiliges Editfeld ohne Zeilenumbrüche (was ja schon ein Widerspruch in sich ist).

Irgendwie bist du gefangen in deiner Idee, du wüsstest besser als ich was ich brauche.*

Glaub mir, ich hab' zu viele Jahre an Erfahrung auf dem Buckel, als dass ich nicht wüsste, was ich brauche ...:)

* "Man wird niemals mehr als 364 KB Arbeitsspeicher brauchen!" (B.G.)

PS: Bald werde ich das Geheimnis lüften ... ;-)

sx2008 21. Dez 2010 18:54

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von PeterPanino (Beitrag 1068588)
PS: Bald werde ich das Geheimnis lüften ... ;-)

Ich warte ganz gespannt darauf... 8-)

alzaimar 22. Dez 2010 04:43

AW: Mehrzeiliges TEdit bzw. LineBreak in TMemo verhindern?
 
Zitat:

Zitat von PeterPanino (Beitrag 1068588)
Irgendwie bist du gefangen in deiner Idee, du wüsstest besser als ich was ich brauche.*

Glaub mir, ich hab' zu viele Jahre an Erfahrung auf dem Buckel, als dass ich nicht wüsste, was ich brauche ...:)

Ein entscheidender Punkt könnte in deiner Erfahrung fehlen: GUI-Elemente sollen 'so wie erwartet' funktionieren. Du willst eine bekannte Eingabemetapher (Texteditor) umbiegen. Das solltest Du nicht tun und ich kenne auch keine Anwendung, die das flächendeckend eingeführt hat, sodaß Du dich darauf berufen kannst.

Allerdings kann es Spezialanwendungen geben, die nur für eine bestimmte Klientel gedacht ist, und die sich ständig mit ihr beschäftigen: Dann kann eine wohldurchdachte neue Eingabemetapher eingeführt werden.

Ich persönlich würde jedoch sehr sehr spartanisch damit umgehen und in diesem Fall lieber ein stinknormales Memo nehmen und die Texte nach einem OnExit formatieren, d.h. Zeilenumbrüche entfernen. Dann sieht der Anwender aktiv, was mit seinem Text geschieht. Dies entspricht dem Grundstatz der visuellen Rückmeldung und Transparenz.

Da Du aber -aufgrund deiner Erfahrung- offensichtlich genau weisst, was Du willst, sind wir wirklich gespannt auf diesen Anwendungsfall: Dazulernen können selbst die ältesten Hasen immer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:40 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