Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Löschversuch funktioniert nicht (https://www.delphipraxis.net/197561-loeschversuch-funktioniert-nicht.html)

Versus 16. Aug 2018 20:26

Löschversuch funktioniert nicht
 
Ich bin gerade dabei nen einfachen Windows Taschenrechner zu programmieren jetzt habe ich u.a. einen Button dafür eingerichtet das man die letzte zahl löschen kann
,also z.B. Ich gebe ne 12 ein drück den Button und dann steht dann da nur noch eine 1.

edit1.Text:=edit1.Text - ' ';


Ich habe versucht mir diesen befehl herzuleiten leider ohne erfolg wie man sehen kann. Jetzt kann ich nur auf euer wissen hoffen danke im Vorraus ! :D

KodeZwerg 16. Aug 2018 20:33

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von Versus (Beitrag 1410891)
Ich bin gerade dabei nen einfachen Windows Taschenrechner zu programmieren jetzt habe ich u.a. einen Button dafür eingerichtet das man die letzte zahl löschen kann
,also z.B. Ich gebe ne 12 ein drück den Button und dann steht dann da nur noch eine 1.

edit1.Text:=edit1.Text - ' ';


Ich habe versucht mir diesen befehl herzuleiten leider ohne erfolg wie man sehen kann. Jetzt kann ich nur auf euer wissen hoffen danke im Vorraus ! :D

Probier mal
Delphi-Quellcode:
SetLength(Edit1.Text, Length(Edit1.Text)-1);
Wenn das klappt mach
Delphi-Quellcode:
If Length(Edit1.Text) > 0 then SetLength(Edit1.Text, Length(Edit1.Text)-1);


Ps: das ist nur hier im DP edit geraten/entstanden, also ungetestet.

Versus 16. Aug 2018 20:40

AW: Löschversuch funktioniert nicht
 
Bei mir kommt da eine Fehlermeldung nämlich "Konstantenobjekt kann nicht als Var-Parameter weiter gegeben werden".

KodeZwerg 16. Aug 2018 20:46

AW: Löschversuch funktioniert nicht
 
Wie schauts mit einem
Delphi-Quellcode:
Edit1.Text := Copy(Edit1.Text, 1, Length(Edit1.Text)-1);
aus? Das müsste klappen.

Versus 16. Aug 2018 20:54

AW: Löschversuch funktioniert nicht
 
Besten Dank funktioniert Super !:thumb:

KodeZwerg 16. Aug 2018 20:57

AW: Löschversuch funktioniert nicht
 
Gern geschehen, mach es dann aber bitte so:
Delphi-Quellcode:
if Length(Edit1.Text) > 0 then Edit1.Text := Copy(Edit1.Text, 1, Length(Edit1.Text)-1);
:wink:

KodeZwerg 16. Aug 2018 21:02

AW: Löschversuch funktioniert nicht
 
Ps: Nur so Nebenbei, Du könntest Dir auch eine Redo Funktion dazu einbauen, also das wenn jemand "lösch letzte Zahl" klickt es auch wieder Rückgängig machen kann, für mehrere Werte müsste man sich nur ein kleines Array einrichten worüber man Werte speichert/zurückholt. Wiegesagt, nur so Nebenbei erwähnt falls Du noch Ideen brauchst :-D

blawen 16. Aug 2018 21:18

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von Versus (Beitrag 1410891)
Ich bin gerade dabei nen einfachen Windows Taschenrechner zu programmieren jetzt habe ich u.a. einen Button dafür eingerichtet das man die letzte zahl löschen kann
,also z.B. Ich gebe ne 12 ein drück den Button und dann steht dann da nur noch eine 1.

edit1.Text:=edit1.Text - ' ';

Braucht es diese Funktion überhaupt? In einem Edit-Feld kann man ja üblicherweise mit der Backspace-Taste löschen.

KodeZwerg 16. Aug 2018 21:27

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von blawen (Beitrag 1410901)
In einem Edit-Feld kann man ja üblicherweise mit der Backspace-Taste löschen.

Ich vermute mal das Edit1 ReadOnly für Knopf-Eingabe ist. Also Knopf "1" = Edit1.Text := Edit1.Text + '1';

edit
Ja ne, Du hast ja Recht @blawen, er schreibt ja das er Tippt. Mein Fehler, tut mir Leid!

p80286 16. Aug 2018 21:36

AW: Löschversuch funktioniert nicht
 
Eine weitere Möglichkeit wäre:
Delphi-Quellcode:
var
  mytext : string;
begin
  mytext:=self.Edit1.Text;
  delete(mytext,length(mytext),1);    // letztes Zeichen löschen
  self.Edit1.Text:=mytext;
end;
Gruß
K-H

KodeZwerg 16. Aug 2018 22:00

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von p80286 (Beitrag 1410903)
Eine weitere Möglichkeit wäre:

Wenn Performance irrelevant ist und es um verschiedene Möglichkeiten geht, hier noch einer:
Delphi-Quellcode:
var
  i: Integer;
  mytext : string;
begin
  myText := '';
  if Length(Edit1.Text) > 0 then
    for i := 1 to Length(Edit1.Text)-1 do
      myText := myText + Edit.Text[i];
  Edit1.Text := myText;
end;
Sollte das gleiche ergeben, ungetestet.

himitsu 16. Aug 2018 22:45

AW: Löschversuch funktioniert nicht
 
Das direkt über mir: Sorry, aber für sowas sollte man gesteinigt und gevierteilt werden => Chars "einzeln" aneinanderzuhängen,

aber nochmal was zu dem Copy => Delphi-Referenz durchsuchenLeftStr :angle:

p80286 16. Aug 2018 22:45

AW: Löschversuch funktioniert nicht
 
Da der TE ein Zeichen löschen möchte dachte ich, da
Delphi-Quellcode:
delete
ganz gut passen würde.
Daß ein
Delphi-Quellcode:
copy
das performantere
Delphi-Quellcode:
delete
bei der Verarbeitung von mehreren tausenden Sätzen ist, sollte sich inzwischen herumgesprochen haben.

Gruß
K-H

QHimitsu
Seit wann gibt es das denn`?
Ich dachte das wäre typisch Basic.

himitsu 16. Aug 2018 23:11

AW: Löschversuch funktioniert nicht
 
Seit mehr als 10 Jahren bestimmt. (spätestens seit FastStrings in Delphi übernommen wurde).
Die Unit StrUtils existiert schon ein Weilchen.



Copy/LeftStr oder Delete ist hier fast gleich performant, aber beim Copy hast den Vorteil, dass es nicht erst in einer Variable zwischengespeichert werden muß, da Funktion <> Prozedur.

Theoretisch ist Delete performanter, da es direkt den String behandelt und nichts umkopiert (so lange es nur eine Referenz auf den String gibt), also "inplace" den String behandelt, ohne dass "oftmals" überhaupt der Speichermanager ran muß, was hier aber eh sinnlos ist, da das Ergebnis am Ende sowieso wieder an die Komponente übertragen (kopiert) werden muß.



Ohne FastMM sind aber so Dinge wie Einzelcharoperationen einfach nur krank,
aber obwohl ab da "größerer" Speicher auch inpace vergrößert/verkleinert werden kann, so lange dahinter noch genug frei ist (kleinere Blöcke gibt es nur in gleichgroßen Gruppen, also ist dahinter nie etwas frei), bringt das hier nichts.

Luckie 17. Aug 2018 00:37

AW: Löschversuch funktioniert nicht
 
Leute, es geht nur um das manuelle Löschen eines Zeichens in einem Editfeld. Das wird wohl kaum 100.000 mal in der Sekunde passieren. Performance spielt hier absolut keine Rolle. Warum also jeden Thread mit mehr oder weniger sinnvollen, hoch gezüchteten und optimierten Code kaputt diskutieren? :roll:

himitsu 17. Aug 2018 02:56

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von himitsu (Beitrag 1410929)
... bringt das hier nichts.

:roll: .

Daniel 17. Aug 2018 07:12

AW: Löschversuch funktioniert nicht
 
Zitat:

Zitat von Luckie (Beitrag 1410936)
Leute, es geht nur um das manuelle Löschen eines Zeichens in einem Editfeld. Das wird wohl kaum 100.000 mal in der Sekunde passieren. Performance spielt hier absolut keine Rolle. Warum also jeden Thread mit mehr oder weniger sinnvollen, hoch gezüchteten und optimierten Code kaputt diskutieren? :roll:

Danke. :-)


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