![]() |
Fehlermeldung: Operator ist auf Operandentyp nicht anwendbar
Hallo.
Es tut mir Leid, falls es einen Thread dieser Art schon gibt, aber ich habe beim momentanen programmieren ein kleines Problem. Wir haben die Aufgabe, einen Taschenrechner zu programmieren. Alles kein Problem, komme inzwischen recht gut damit klar. Ich möchte jetzt gerne als kleine Extrafunktion(Es ist noch ein einfacher +,-,*,/ Rechner) eine Funktion einbringen, dass man das letzte Zeichen wieder wegmachen kann. Also wie auf dem normalen Taschenrechner "<--" . Wenn die komplette Prozedur nun so lautet: Zitat:
"Operator ist auf diesen Operandentyp nicht anwendbar". Wenn ich das - in ein + ändere, kompiliert der normal, und macht alles richtig, nimmt halt nicht eine Ziffer im Editfenster weg, sondern gibt eine Leerstelle dazu. Auch wenn ich, einfach zum probieren, statt „ – ' '“ „ FloatToStr(0)“ z.B. einsetze, kommt diese Fehlermeldung... Bei der Delphi Hilfe verstehe ich leider kein Wort. Kann mir vielleicht jemand helfen? Mit freundlichen Grüßen Ark4869 |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Man kann von einem String Nichts abziehen. In deinem Fall würde ein
Delphi-Quellcode:
helfen.
s := EdWai.Text;
SetLength( s, Length( s) -1); EdWai.Text := s; |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Tja, sowas geht halt mit Strings nicht,
abgesehn davon ... was soll den bei diser subtraktion rauskommen?
Delphi-Quellcode:
// z.B.:
irgendwas - ' ' = ? // oder irgendwas - 'X' = ? ... Als wichtigste Funktionen um Zeichen aus 'nem String zu entfernen, oder einen Bereich aus einem String auszuwählen sind ![]() ![]()
Delphi-Quellcode:
[add]
EdWai.Text := Copy(EdWai.Text, 1, Length(EdWai.Text) - 1);
s := Copy(EdWai.Text, 1, Length(EdWai.Text) - 1); EdWai.Text := S; s := EdWai.Text; s := Copy(s, 1, Length(s) - 1); EdWai.Text := S; S := EdWai.Text; Delete(S, Length(EdWai.Text), 1); EdWai.Text := S; stimmt, ![]() |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Danke sehr, funktioniert...
Aber ich bin so clever, dass ich eigentlich weiss dass es mir, ohne es zu verstehen, eigentlich nicht viel bringt. Werde mir also mal SetLength angucken und mich dann wieder melden, wenn ich noch Probleme habe. Noch einmal vielen Dank :) Also die Funktion mit dem delete verstehe ich schon besser, doch noch etwas unklar ist mir, wofür man Variable s braucht, dies wird aber, wie gesagt, bestimmt beim Lesen der Delphi Hilfe kommen :) Was dabei rauskommen soll: Die letzte Ziffer im Edit soll weg sein ;) OK, mir ist es jetzt klar, ich zitiere mal mein Informatikbuch : " S ist eine String-Variable, Index und Count sind Integer-Ausdrücke. Delete löscht ab der durch Index angegebenen Position Count Zeichen aus dem String S." Ich danke Euch Beiden nochmal, dafür, dass Ihr mir geholfen habt, und dafür, dass Ihr Euch die Zeit dafür genommen hat :D Mit freundlichen Grüßen ark4869 |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
SetLength verändrt die Länge des Strings.
Das Zwicshenspeichern in eine Variable ist notwendig, da man die Property .Text nicht direkt manipulieren kann. |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Zitat:
(Thema Setter- und Getter-Methoden) SetLength und Delete verlangen einen Var-Parameter, da sie den Inhalt direkt in der Variable verändern. Copy ließt dagegen nur den Inhalt aus und gibt das geänderte als Ergebnis zurück.
Delphi-Quellcode:
.Text ist aber keine Variable, sondern ein Property und da ist es so, daß es in Wirklichkeit 2 Funktionen sind ... eine zum Auslesen der Inhalts und eine zum Setzen.
OUT := copy(IN, x, y);
delete(IN_OUT, x, y); setlength(IN_OUT, x); Daher muß da wo der Ihnalt direkt geändert wird, praktisch erst der Inhalt ausgelesen, dann geändert und zum Schluß wieder gesetzt werden ... also muß der Inhalt irgendwo zwichengespeichert werden. |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Warum kann man bei einem String denn addieren, aber nicht subtrahieren?
Und warum funktionieren in meinem Programm Befehle wie Zitat:
wenn man Text nicht "manipulieren" kann. Manipulieren hab ich in Anführungszeichen gesetzt, weil ich nicht genau weiss, wie du es meinst, ob du es einfach wie ändern meinst, oder in einem Sinn, den ich nicht kenne. Edit: OK, den letzten Punkt versteh ich jetzt, es liegt also an den Funktionen die man braucht, hätt ich da oben irgendwas mit Copy gehabt, hätte ich das ähnlich wie hier im Thread beigebracht machen müssen. Aber trotzdem bleibt die Frage, warum man addieren, aber nicht subtrahieren kann. Mit freundlichen Grüßen Ark4869 |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Das ist wohl mehr nur ein Syntaktischer Fehler in der Sprache.
In PHP wird z.B. mit "+" Addiert und über "." Strings aneinander gehängt. Es wird also nicht addiert, sondern aneinander gehängt. [add]
Code:
Man sieht es zwar nicht, aber Delphi macht aus diesem Code folgendes:
EdWai.Text := EdWai.Text +FloatToStr(6)
^setzen ^auslesen
Delphi-Quellcode:
EdWai.GetText(TempVar1); // TempVar1 := EdWai.Text;
FloatToStr(TempVar2, 6); // TempVar2 := FLoaToStr(6); Concat(TempVar1, TempVar2); // TempVar1 := TempVar1 + TempVar2; EdWai.SetText(TempVar1); // EdWai.Text := TempVar1; |
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Zitat:
Zitat:
|
Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen
Okay, ich glaube ich habe alles verstanden :)
Danke nochmals, ich glaub jetzt hab ich wirklich keine Fragen mehr :D Mit freundlichen Grüßen Ark4869 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 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