Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Leerzeichen in Enter(Zeilenumbruch) umwandeln (https://www.delphipraxis.net/134407-leerzeichen-enter-zeilenumbruch-umwandeln.html)

NDR 21. Mai 2009 15:55


Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Hallo,
Ich suche in Delphi 7 eine Möglickeit Leerzeichen in Enter/einen Zeilenumbruch umzuwandeln.
Zur Problematik:
Ich habe ein Memofeld in dem Zahlen eingegeben werde sollen, sodass ich eine Liste von Zahlen bekomme, mit den ich denn nach dem Umwandeln Rechnen etc. machen kann.
Der Benutzer kann ja nun aber auf die Idee kommen und zwei Zahlen in eine Zeile zu schreiben... das würde denn ja eine Fehlermeldung ala " '123 321' ist kein gültiger Integerwert" hervorrufen. Zu dem Zweck möchte ich das wenn ein Leerzeichen oder sonstige nicht erlaubten Zeichen im String drin stehen die das konvertieren in einen Integerwert verhindern geblockt bzw umgewandelt werden.

Beispiel
aus
'-123 321'
wird
'-123'
'321'

oder aus
'1234-567'
wird
'1234'
'-567'

Gibtes da eine Möglichkeit das schon bei der Eingabe zu korrigieren oder muss ich da erst ne Procedure drüber laufen lassen die mir die fehlerhaften Eingaben berichtigt?

mfg NDR

DP-Maintenance 21. Mai 2009 16:02

DP-Maintenance
 
Dieses Thema wurde von "fkerber" von "Open-Source" nach "Sonstige Fragen zu Delphi" verschoben.
Da es sich um eine Frage handelt, verschiebe ich das mal.

easywk 21. Mai 2009 16:24

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Hallo,

klar, du kannst in der Routine OnKeyPress die Tasten abfangen. Ich habe das zwar noch nicht in einem Memofeld gemacht, aber in TEdit mache ich das ständig:

Delphi-Quellcode:
const
  CZahlenGroup    = ['-','1','2','3','4','5','6','7','8','9','0',#8];

procedure TForm1.SimulateEnterZahlen(Sender: TObject;var Key: Char);
begin
  if not (Key in CZahlenGroup) then
    Key:=#0;
end;
Mein Fall löscht die Taste einfach, du kannst aber natürlich dann auch den Key auf Enter setzen ...

cu
easy

NDR 21. Mai 2009 16:44

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
So hab jetzt diese Procedure mit reingeschrieben und beim Memofeld mit dem Ereignis OnKeyPress verknüpft.... das Problem ist jetzt nur das ich zwar nur noch Zahlen und '-' eingeben kann, jedoch mein "Enter" um auf die nächste Zeile zu kommen auch geblockt wird :|


Noch ne weitere Frage die mir grad so aufkommt.... wie kann ich die anzahl der Zeilen im Memofeld beschränken?

schonmal thx

NDR

DenSchub 21. Mai 2009 16:51

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Ersetz mal das #8 durch #13 denn das steht imho für Enter.

Grüße,

NDR 21. Mai 2009 16:54

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Supi das mit der #13 funzt^^
Bleibt nur noch diese kleine Frage hier:
Zitat:

Zitat von NDR
Noch ne weitere Frage die mir grad so aufkommt.... wie kann ich die anzahl der Zeilen im Memofeld beschränken?

^^
NDR

DenSchub 21. Mai 2009 16:57

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Das setzt z.B. die Maximal-Anzahl der Zeilen auf 3:
Delphi-Quellcode:
if (Key = #13) AND (Memo.Lines.Count >= 3) then
  Key := #0;
Grüße

[edit]Das kommt natürlich auch in das OnKeyPress rein![/edit]

BUG 21. Mai 2009 16:57

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Zitat:

Zitat von NDR
jedoch mein "Enter" um auf die nächste zeile zu kommen auch geblockt wird :|

Probiere es mal so:
Delphi-Quellcode:
const
  CZahlenGroup    = ['-','1','2','3','4','5','6','7','8','9','0',#8,#13,#10];
MfG,
BUG

EDIT: Roter Kasten ... was ist das?

Wenn er die Rücktaste benutzen möchte, sollte er das #8 drinlassen.

Satty67 21. Mai 2009 17:00

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Eigentlich ja nur eine Frage pro Thread. Wäre die Antwort trivial, hätte ich auch nichts gesagt, aber ein gutes begrenzen der Zeilenzahl ist imho relativ kompliziert.

Trivial:
Wenn Memo1.Lines.Count größer gewünschtem Wert, das #13 wieder in #0 wandeln. Verhalten ist dann nicht ganz elegant, wenn man alte Zeilen oben dran editieren will

€: Ok, einer war schneller ;)

DenSchub 21. Mai 2009 17:01

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Stimmt, #8 ist ja die Rücktaste :wall:

Satty: Nö, denn das blockt ja dann nur das Enter, und wenn man oben was editieren will benutzt man ja kein Enter..

NDR 21. Mai 2009 17:08

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
genau nur das enter wird geblockt^^ ebend getestet^^

ich danke allen fleißigen helfern^^

mfg NDR

Satty67 21. Mai 2009 17:16

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Zitat:

Zitat von DenSchub
Nö, denn das blockt ja dann nur das Enter, und wenn man oben was editieren will benutzt man ja kein Enter..

Manchmal will man oben eine Zeile mit Enter einfügen, dann erst die drunter löschen oder mit Enter durch die Zeilen laufen. Aber kommt im aktuellen Anwendungsfall wohl nicht so oft vor, gibt ja noch Pfeil-Runter...

Sharky 21. Mai 2009 17:28

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Hai NDR,

was machst Du denn wenn der Anwender die Zeichen über die Zwichenablage in das Memofeld einfügt?

NDR 22. Mai 2009 16:53

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Dadrüber hab ich mir auch Gedanken gemacht und ich will das folgender maßen umsetzen:
Delphi-Quellcode:
try versuch:=strtoint(Memo.Lines[x]);
    except
    on econverterror do
      begin
      showmessage('Keine Zahl eingegeben!');
      Memo.SetFocus;
      exit;
      end;

Helmi 22. Mai 2009 17:05

Re: Leerzeichen in Enter(Zeilenumbruch) umwandeln
 
Besser du verwendest: Delphi-Referenz durchsuchenStrToIntDef oder Delphi-Referenz durchsuchenTryStrToInt
Beim letzteren bekommst du einen boolschen Rückgabewert, ob das Umwandeln erfolgreich war oder nicht


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