AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Letztes Zeichen löschen wenn nicht 0 oder 1
Thema durchsuchen
Ansicht
Themen-Optionen

Letztes Zeichen löschen wenn nicht 0 oder 1

Ein Thema von DelphiNoob1.0 · begonnen am 26. Aug 2013 · letzter Beitrag vom 26. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
DelphiNoob1.0

Registriert seit: 23. Okt 2012
Ort: Berlin
13 Beiträge
 
Delphi 6 Personal
 
#1

Letztes Zeichen löschen wenn nicht 0 oder 1

  Alt 26. Aug 2013, 10:58
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

Geändert von DelphiNoob1.0 (26. Aug 2013 um 11:03 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

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

  Alt 26. Aug 2013, 11:07
Weil du nur deine lokale String-Variable bin veränderst, und nicht den Text in deinem TEdit-Feld namens 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 AnsiLastChar nicht einen PAnsiChar zurück? Ich würde mich wundern wenn der Zeiger auf einen AnsiChar überhaupt das gleiche ergeben soll wie deine literale Konstante '1'. Kann mich jemand aufklären?
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#3

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

  Alt 26. Aug 2013, 11:11
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
DelphiNoob1.0

Registriert seit: 23. Okt 2012
Ort: Berlin
13 Beiträge
 
Delphi 6 Personal
 
#4

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

  Alt 26. Aug 2013, 11:12
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 ?

Geändert von DelphiNoob1.0 (26. Aug 2013 um 11:17 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

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

  Alt 26. Aug 2013, 11:16
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...

Geändert von Der schöne Günther (26. Aug 2013 um 11:19 Uhr)
  Mit Zitat antworten Zitat
weisswe
(Gast)

n/a Beiträge
 
#6

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

  Alt 26. Aug 2013, 11:18
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;
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 26. Aug 2013, 11:20
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;
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
DelphiNoob1.0

Registriert seit: 23. Okt 2012
Ort: Berlin
13 Beiträge
 
Delphi 6 Personal
 
#8

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

  Alt 26. Aug 2013, 11:21
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

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

  Alt 26. Aug 2013, 11:24
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
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 26. Aug 2013, 11:34
Hmm das wäre Natürlich einfacher, aber meine Lehrerin möchte ja sehen wie man das anders lösen könnte
Lehrer

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)
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.
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