Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Letztes Zeichen löschen wenn nicht 0 oder 1 (https://www.delphipraxis.net/176304-letztes-zeichen-loeschen-wenn-nicht-0-oder-1-a.html)

DelphiNoob1.0 26. Aug 2013 09:58

Letztes Zeichen löschen wenn nicht 0 oder 1
 
Code:
procedure TForm1.BinaerChange(Sender: TObject); // Change also direkt bei eingabe
var i :integer;
    bin :string;
begin
bin:=Binaer.Text;
i:=length(bin);
If i=1 then
if not AnsiLastChar(bin)^ = '1' or '0' then delete (bin, i, 1 );
end;
Irgendwie löscht er trotzdem nicht, könnt ihr mir helfen und was könnte ich sonst noch verbessern ?

LG DelphiNoob

Der schöne Günther 26. Aug 2013 10:07

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Weil du nur deine lokale String-Variable
Delphi-Quellcode:
bin
veränderst, und nicht den Text in deinem TEdit-Feld namens
Delphi-Quellcode:
Binaer
.

Du musst Binaer.Text natürlich anschließend auch noch den Inhalt der Variable zuweisen.

Allerdings wundert mich spontan, dass er überhaupt kompiliert. Gibt
Delphi-Quellcode:
AnsiLastChar
nicht einen
Delphi-Quellcode:
PAnsiChar
zurück? Ich würde mich wundern wenn der Zeiger auf einen
Delphi-Quellcode:
AnsiChar
überhaupt das gleiche ergeben soll wie deine literale Konstante '1'. Kann mich jemand aufklären?

baumina 26. Aug 2013 10:11

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Du löscht nur wenn die Länge des String genau 1 ist. Dann würde reichen:

Delphi-Quellcode:
procedure TForm1.BinaerChange(Sender: TObject); // Change also direkt bei eingabe
begin
  If ((Binaer.Text = '1') or (Binaer.Text = '0')) then Binaer.Text := '';
end;

DelphiNoob1.0 26. Aug 2013 10:12

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Ich habs jetzt mal nur mit der 2 gemacht geht aber trotzdem nicht er will da nichts verändern ..
Code:
procedure TForm1.BinaerChange(Sender: TObject); // Change also direkt bei eingabe
var i :integer;
    bin :string;
begin
bin:=Binaer.Text;
i:=length(bin);
If i>1 then
if AnsiLastChar(bin)^ = '2' then delete (bin, i, 1 );
Binaer.text:=bin;
end;
Edit: Okay er verändert jetzt doch was :) aber nun springt der Cursor wieder zum anfang des Editfeldes wie kann man das verhindern ?

Der schöne Günther 26. Aug 2013 10:16

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Ich habe meinen Beitrag jetzt zum dritten mal neu geschrieben da du deinen Beitrag innerhalb von Sekunden auch drei mal komplett überarbeitest hast...

Für die Cursorposition: Schau dir mal die SelStart-Eigenschaft deines TEdit an.


Trotzdem: Ein TMaskEdit wäre für deine Zwecke wohl noch besser als ein TEdit...

weisswe 26. Aug 2013 10:18

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Zitat:

Zitat von baumina (Beitrag 1226213)
Du löscht nur wenn die Länge des String genau 1 ist. Dann würde reichen:

Das stimmt - wenn er wirklich nur bei Länge 1 löschen will..

Sonst:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bin: String;
begin
  bin := Binaer.Text;
  if (Copy(bin, length(bin), 1) = '1') or (Copy(bin, length(bin), 1) = '0') then
    Delete(bin, length(bin), 1);
  Binaer.Text := bin;
end;

baumina 26. Aug 2013 10:20

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Wenn Du möchtest, dass ein Editfeld nur 1en und 0en zulässt, löse es folgendermassen:

Ereignis OnKeyPress:

Delphi-Quellcode:
if not CharInSet(Key, ['0','1',#8]) then
begin // #8 = Backspace
  beep;
  Key := #0;
end;

DelphiNoob1.0 26. Aug 2013 10:21

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Hmm das wäre Natürlich einfacher, aber meine Lehrerin möchte ja sehen wie man das anders lösen könnte :) Das mit der Eins hab ich verbessert, jetzt muss der string größer als 1 sein, damit die Procedur arbeitet

Der schöne Günther 26. Aug 2013 10:24

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Zitat:

Zitat von weisswe (Beitrag 1226216)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bin: String;
begin
  bin := Binaer.Text;
  if (Copy(bin, length(bin), 1) = '1') or (Copy(bin, length(bin), 1) = '0') then
    Delete(bin, length(bin), 1);
  Binaer.Text := bin;
end;

Hätte er jetzt kein altes D6 sondern ein schnuckeliges XE4, könnte man das auch so runterkriegen:

Delphi-Quellcode:
   if myStr.EndsWith('1') or myStr.EndsWith('0') then
      myStr := myStr.TrimRight(['1', '0']);
Mir gehen bei den Record-Helpern jeden Tag wieder einer ab, ich mag die Dinger einfach :)

baumina 26. Aug 2013 10:34

AW: Letztes Zeichen löschen wenn nicht 0 oder 1
 
Zitat:

Zitat von DelphiNoob1.0 (Beitrag 1226220)
Hmm das wäre Natürlich einfacher, aber meine Lehrerin möchte ja sehen wie man das anders lösen könnte :)

Lehrer :roll:

Wenn du nur das letzte Zeichen betrachtest, hilft dir das gar nichts, denn man kann in einem Editfeld auch mittendrin ein Zeichen abändern oder einfügen. D.h. du musst immer den kompletten String begutachten.

Vor dem Ändern musst Du dir die Position des Cursors merken. Diese muss pro gelöschtem Zeichen ebenfalls korrigiert werden. Nach dem Ändern muss der Cursor dann neu gesetzt werden. (siehe SelStart)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:01 Uhr.
Seite 1 von 2  1 2      

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