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 Leerzeichen in Edit1.Text verhindern (https://www.delphipraxis.net/113270-leerzeichen-edit1-text-verhindern.html)

Delphiturbo 5. Mai 2008 14:50


Leerzeichen in Edit1.Text verhindern
 
Hallo

wie kann ich Leerzeichen in Edit1.Text OnChange.Event verhindern ?
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
// habe ich einmal so gelöst
// if ... = ' ' then ... :=''
end;

Matze 5. Mai 2008 14:53

Re: Leerzeichen in Edit1.Text verhindern
 
Hi,

das geht sicher, doch ich würde dafür das OnKeyPress-Ereignis nutzen:

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ' ' then
    Key := #0;
end;
Grüße, Matze

Fussball-Robby 5. Mai 2008 14:53

Re: Leerzeichen in Edit1.Text verhindern
 
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ' ' then
    Key := #0;
end;
Mfg

Edit: da hatte wohl jemand die gleiche Idee :lol:

Delphiturbo 5. Mai 2008 14:59

Re: Leerzeichen in Edit1.Text verhindern
 
Und was wäre wenn der User den Inhalt nicht eintippt sondern einfügt ? :mrgreen:

was muss man dagegen in Onchange eingeben?

_frank_ 5. Mai 2008 15:00

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Matze
das geht sicher, doch ich würde dafür das OnKeyPress-Ereignis nutzen:

und was ist mit copy&paste? ich würde schon das OnChange nehmen, so in etwa (ungetested):

Delphi-Quellcode:
procedure TForm1.Edit1Change(sender:TObject);
var s:string;
    p:integer;
begin
  s:=(sender as TEdit).text;
  p:=pos(' ',s);
  while p>0 do
  begin
    delete(s,p,s);
    p:=pos(' ',s);
  end;
  (sender as TEdit).text:=s;
end;
HTH Frank

toms 5. Mai 2008 15:03

Re: Leerzeichen in Edit1.Text verhindern
 
Hallo, ist es wichtig, dass keine Leezeichen im Edit erscheinen oder dürfen bei einer späteren Verarbeitung des Edittextes keine Leerzeichen vorhanden sein?
Bei Letzterem könntest du die Leerzeichen per StringReplace herausfiltern.

lbccaleb 5. Mai 2008 15:04

Re: Leerzeichen in Edit1.Text verhindern
 
oder eine nicht ganz so schöne methode:

Delphi-Quellcode:
var
  i: integer;
  tempstr: string;
begin
  tempstr := '';
  for i := 1 to Length(edit1.Text) do
    if edit1.Text[i] <> ' ' then
      tempstr := tempstr + edit1.Text[i];
  edit1.Text := tempstr;
end;
das in onchange einfügen..

Delphiturbo 5. Mai 2008 15:08

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von lbccaleb
oder eine nicht ganz so schöne methode:

das in onchange einfügen..

Es hat nicht funktioniert auch der Code von _frank_!!!
Ich habe diesen Code gehabt. Er war ein kurzer Code mit der Idee if ... ' ' then ... =''

Phoenix 5. Mai 2008 15:11

Re: Leerzeichen in Edit1.Text verhindern
 
WAS hat nicht funktioniert?
Und was heisst 'Er war klein !' ???

himitsu 5. Mai 2008 15:12

Re: Leerzeichen in Edit1.Text verhindern
 
besser währe wohl Beides
- erst garkein Leerzeichen beim Eingeben erlauben > muß man es auch nicht mehr unschön löschen
- und den Cursor muß man ja auch nicht ständig verschieben :angel:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ' ' then
    Key := #0;
end;

procedure TForm1.Edit1Change(sender:TObject);
var
  s: String;
  i: Integer;
begin
  s := TEdit(Sender).Text;
  if pos(' ', s) > 0 then
  begin
    i := TEdit(Sender).SelStart;
    TEdit(Sender).Text := StringReplace(S, ' ', '', [rfReplaceAll]);
    TEdit(Sender).SelStart := i;
  end;
end;

lbccaleb 5. Mai 2008 15:12

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Delphiturbo
Zitat:

Zitat von lbccaleb
oder eine nicht ganz so schöne methode:

das in onchange einfügen..

Es hat nicht funktioniert auch der Code von _frank_!!!
Ich habe diesen Code gehabt. Er war ein kurzer Code mit der Idee if ... ' ' then ... =''

also ich habs gerade so bei mir versucht und bei mir haut alles hinn, egal ob mit reinschreiben oder einfügen, er entfernt immer die ' ' aus dem edit!!

Delphiturbo 5. Mai 2008 15:13

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Phoenix
WAS hat nicht funktioniert?

Ich konnte einen Satz mit mehreren Leerzeichen in Edit1.Text einfügen :mrgreen:

Delphiturbo 5. Mai 2008 15:16

Re: Leerzeichen in Edit1.Text verhindern
 
Was himitsu ist die Lösung :thumb:

himitsu 5. Mai 2008 15:18

Re: Leerzeichen in Edit1.Text verhindern
 
:mrgreen:


Zitat:

Zitat von Delphiturbo
Ich konnte einen Satz mit mehreren Leerzeichen in Edit1.Text einfügen :mrgreen:

hattest du auch die Events deinem Edit hinzugefügt?

Fussball-Robby 5. Mai 2008 15:18

Re: Leerzeichen in Edit1.Text verhindern
 
Delphi-Quellcode:
TEdit(Sender).SelStart := i;
Das muss aber so heißen:
Delphi-Quellcode:
TEdit(Sender).SelStart := i - 1;
Der Cursor ist ja hinter dem bereits eingetippten Leerzeichen, wenn man dieses nun löscht, ist der Cursor 1 zu weit rechts :wink:



Zitat:

Zitat von himitsu
:mrgreen:


Zitat:

Zitat von Delphiturbo
Ich konnte einen Satz mit mehreren Leerzeichen in Edit1.Text einfügen :mrgreen:

hattest du auch die Events deinem Edit hinzugefügt?

:mrgreen: :mrgreen:

_frank_ 5. Mai 2008 15:25

Re: Leerzeichen in Edit1.Text verhindern
 
der einzige fehler den ich in meinem Code finden konnte war der letzte Parameter von delete...s statt 1.

ansonsten wäre noch die geschichte mit dem cursor, wo man den erstmal sichert und dann ggf. anpasst.

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var s:string;
    p,cp:integer;
begin
  s:=(sender as TEdit).text;
  cp:=edit1.SelStart;
  p:=pos(' ',s);
  while p>0 do
  begin
    delete(s,p,1);
    if cp<=p then dec(cp);
    p:=pos(' ',s);
  end;
  (sender as TEdit).text:=s;
  (sender as TEdit).SelStart:=cp;
end;
HTH Frank

Delphiturbo 5. Mai 2008 15:26

Re: Leerzeichen in Edit1.Text verhindern
 
Ich wollte auch nur die Großbuchstaben nehmen
Ich habe diesen Code :
Delphi-Quellcode:
Edit1.Text := AnsiUpperCase(Edit1.Text);
Der Cursor blinkt immer in der 1. Position und wenn ich was eintippe dann kommt ganz vorne !!! :mrgreen:
wo liegt das Problem ?

Delphiturbo 5. Mai 2008 15:28

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von _frank_
der einzige fehler den ich in meinem Code finden konnte war der letzte Parameter von delete...s statt 1.

ansonsten wäre noch die geschichte mit dem cursor, wo man den erstmal sichert und dann ggf. anpasst.

aber der Cursor blinkt immer ganz vorne. d.h. wenn du eine Buchstabe eintippst dann kommt vorne !!!

himitsu 5. Mai 2008 15:34

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Fussball-Robby
Der Cursor ist ja hinter dem bereits eingetippten Leerzeichen, wenn man dieses nun löscht, ist der Cursor 1 zu weit rechts :wink:

Falsch :zwinker:

du kannst kein Leerzeichen eingeben, wegen Edit1KeyPress

also alte Pos = Neue
und diese liegt vor dem eingefügtem Text


Zitat:

aber der Cursor blinkt immer ganz vorne. d.h. wenn du eine Buchstabe eintippst dann kommt vorne !!!
weil du den Text neu ins Edit schreibst und dabei die Cursorposition löschst ;)
(siehe SelStart)


incl. Großschreibung:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ' ' then
    Key := #0;
  Else
    Key = AnsiUpperCase(Key)[1];
end;

procedure TForm1.Edit1Change(sender:TObject);
var
  s, s2: String;
  i: Integer;
begin
  s := TEdit(Sender).Text;
  s2 := AnsiUpperCase(s);
  if (pos(' ', s2) > 0) or (s <> s2) then
  begin
    i := TEdit(Sender).SelStart;
    TEdit(Sender).Text := AnsiUpperCase(StringReplace(s2, ' ', '', [rfReplaceAll]));
    TEdit(Sender).SelStart := i;
  end;
end;

lbccaleb 5. Mai 2008 15:34

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Delphiturbo
Zitat:

Zitat von _frank_
der einzige fehler den ich in meinem Code finden konnte war der letzte Parameter von delete...s statt 1.

ansonsten wäre noch die geschichte mit dem cursor, wo man den erstmal sichert und dann ggf. anpasst.

aber der Cursor blinkt immer ganz vorne. d.h. wenn du eine Buchstabe eintippst dann kommt vorne !!!


ich hab meins nach dem auch nochmal geändert :


Delphi-Quellcode:
var
  i: integer;
  tempstr: string;
begin
  tempstr := '';
  for i := 1 to Length(edit1.Text) do
    if edit1.Text[i] <> ' ' then
      tempstr := tempstr + edit1.Text[i];
  edit1.Text := tempstr;
  edit1.SelStart := Length(edit1.Text);
end;

himitsu 5. Mai 2008 15:36

Re: Leerzeichen in Edit1.Text verhindern
 
@lbccaleb: scheib mal mitten in den Text (im Edit) rein :zwinker:
(so ist der Cursor nun immer ganz hinten)

_frank_ 5. Mai 2008 15:42

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Delphiturbo
aber der Cursor blinkt immer ganz vorne. d.h. wenn du eine Buchstabe eintippst dann kommt vorne !!!

kann man deinerseits etwas mehr Freundlichkeit erwarten? Zumal ich auf das von dir geschilderte Problem mit meinem Code eingegangen bin und sogar eine Copy&Paste-fertige version bereitgestellt habe, welche auch dieses Problem beseitigt.

Gruß Frank

Delphiturbo 5. Mai 2008 15:43

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von himitsu
@lbccaleb: scheib mal mitten in den Text (im Edit) rein :zwinker:
(so ist der Cursor nun immer ganz hinten)

Beim eintippen ja ok
aber nach dem Einfügen springt der Cursor wieder nach vorne
Es ist aber nicht schlecht. Man kann die Cursor-Position Manual nachträglich positionieren

Delphiturbo 5. Mai 2008 15:49

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von lbccaleb
ich hab meins nach dem auch nochmal geändert

Immer falsch. Bestimmt nicht getestet

Jakob Ullmann 5. Mai 2008 15:53

Re: Leerzeichen in Edit1.Text verhindern
 
Warum nicht einfach die Funktion StringReplace nehmen? Übrigens @Großbuchstaben: TEdit hat doch eine Eigenschaft CharCase oder so.

lbccaleb 5. Mai 2008 15:57

Re: Leerzeichen in Edit1.Text verhindern
 
ok dann ebend so:


Delphi-Quellcode:
var
  i: integer;
  tempstr, curpos: string;
begin
  tempstr := '';
  curpos := edit1.selstart;
  for i := 1 to Length(edit1.Text) do
    if edit1.Text[i] <> ' ' then
      tempstr := tempstr + edit1.Text[i];
  edit1.Text := tempstr;
  edit1.SelStart := curpos;
end;

shmia 5. Mai 2008 16:03

Re: Leerzeichen in Edit1.Text verhindern
 
Wozu eigentlich der Kampf mit den Leerzeichen ?
Also WAS soll den in das Editfeld eingegeben werden und warum dürfen keine Leerzeichen drin sein ?

Mal angenommen es soll eine Faxnummer eingegeben werden und du willst keine Leerzeichen, damit die Nummern eindeutig vergleichbar sind.
Dann ist es doch viel besser, die Leerzeichen in dem Augenblick zu entfernen, wenn der Feldinhalt ausgelesen wird anstatt den Benutzer zu bevormunden.

Unser Kopf ist rund, damit das Denken die Richtung wechseln kann

PS:
Und jetzt bin ich mal gespannt, wie lange es dauert, bis meine Frage beantwortet wird.
Oder ob die Gedanken so eingefahren sind, dass die Antwort nie kommt.

Delphiturbo 5. Mai 2008 16:03

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von Jakob Ullmann
Warum nicht einfach die Funktion StringReplace nehmen? Übrigens @Großbuchstaben: TEdit hat doch eine Eigenschaft CharCase oder so.

Das stimmt :thumb:


Zitat:

Zitat von lbccaleb
ok dann ebend so:

Hast Du kein Delphi Programm?

Delphiturbo 5. Mai 2008 16:09

Re: Leerzeichen in Edit1.Text verhindern
 
Ich habe diesen Code
Delphi-Quellcode:
Edit1.Text := AnsiUpperCase(Edit1.Text);
weg gelöscht, da wir die Edit1.Text eigeschaft Charcase besser nehmen können
dann blinkt der Cursor richtig

Nuclear-Ping 5. Mai 2008 16:13

Re: Leerzeichen in Edit1.Text verhindern
 
[OT]
Turbo, du kennst schon die "Edit"-Funktion oder? ;) Pushen erst nach 24h! :warn:
[/OT]

lbccaleb 5. Mai 2008 16:37

Re: Leerzeichen in Edit1.Text verhindern
 
was genau ist jetzt eigentlich dein problem bzw was sind deine probleme??

toms 5. Mai 2008 20:17

Re: Leerzeichen in Edit1.Text verhindern
 
Zitat:

Zitat von shmia
Wozu eigentlich der Kampf mit den Leerzeichen ?
Also WAS soll den in das Editfeld eingegeben werden und warum dürfen keine Leerzeichen drin sein ?

Mal angenommen es soll eine Faxnummer eingegeben werden und du willst keine Leerzeichen, damit die Nummern eindeutig vergleichbar sind.
Dann ist es doch viel besser, die Leerzeichen in dem Augenblick zu entfernen, wenn der Feldinhalt ausgelesen wird anstatt den Benutzer zu bevormunden.

Etwas ähnliches habe ich oben auch schon angeregt jedoch wurde darauf nicht eingegangen...

Zitat:

Zitat von toms
Hallo, ist es wichtig, dass keine Leezeichen im Edit erscheinen oder dürfen bei einer späteren Verarbeitung des Edittextes keine Leerzeichen vorhanden sein?
Bei Letzterem könntest du die Leerzeichen per StringReplace herausfiltern.



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