![]() |
Letztes Zeichen löschen wenn nicht 0 oder 1
Code:
Irgendwie löscht er trotzdem nicht, könnt ihr mir helfen und was könnte ich sonst noch verbessern ?
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; LG DelphiNoob |
AW: Letztes Zeichen löschen wenn nicht 0 oder 1
Weil du nur deine lokale String-Variable
Delphi-Quellcode:
veränderst, und nicht den Text in deinem TEdit-Feld namens
bin
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:
nicht einen
AnsiLastChar
Delphi-Quellcode:
zurück? Ich würde mich wundern wenn der Zeiger auf einen
PAnsiChar
Delphi-Quellcode:
überhaupt das gleiche ergeben soll wie deine literale Konstante '1'. Kann mich jemand aufklären?
AnsiChar
|
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; |
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:
Edit: Okay er verändert jetzt doch was :) aber nun springt der Cursor wieder zum anfang des Editfeldes wie kann man das verhindern ?
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; |
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 ![]() Trotzdem: Ein TMaskEdit wäre für deine Zwecke wohl noch besser als ein TEdit... |
AW: Letztes Zeichen löschen wenn nicht 0 oder 1
Zitat:
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; |
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; |
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
|
AW: Letztes Zeichen löschen wenn nicht 0 oder 1
Zitat:
Delphi-Quellcode:
Mir gehen bei den Record-Helpern jeden Tag wieder einer ab, ich mag die Dinger einfach :)
if myStr.EndsWith('1') or myStr.EndsWith('0') then
myStr := myStr.TrimRight(['1', '0']); |
AW: Letztes Zeichen löschen wenn nicht 0 oder 1
Zitat:
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 19:21 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