AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehlermeldung: Operator ist auf Operandentyp nicht anwendbar
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung: Operator ist auf Operandentyp nicht anwendbar

Ein Thema von ark4869 · begonnen am 28. Nov 2006 · letzter Beitrag vom 30. Nov 2006
Antwort Antwort
Seite 1 von 3  1 23      
ark4869

Registriert seit: 23. Aug 2006
50 Beiträge
 
Delphi 6 Personal
 
#1

Fehlermeldung: Operator ist auf Operandentyp nicht anwendbar

  Alt 28. Nov 2006, 18:41
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:
procedure TForm1.BBteinswegClick(Sender: TObject);
begin
EdWai.Text := EdWai.Text - ' '
end;
und ich kompilieren möchte, kommt die Fehlermeldung
"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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 18:47
Man kann von einem String Nichts abziehen. In deinem Fall würde ein
Delphi-Quellcode:
s := EdWai.Text;
SetLength( s, Length( s) -1);
EdWai.Text := s;
helfen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 18:50
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-Referenz durchsuchenCopy und Delphi-Referenz durchsuchenDelete:
Delphi-Quellcode:
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;
[add]
stimmt, Delphi-Referenz durchsuchenSetLength gibt's och
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ark4869

Registriert seit: 23. Aug 2006
50 Beiträge
 
Delphi 6 Personal
 
#4

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 18:55
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

Mit freundlichen Grüßen
ark4869
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 18:58
SetLength verändrt die Länge des Strings.
Das Zwicshenspeichern in eine Variable ist notwendig, da man die Property .Text nicht direkt manipulieren kann.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#6

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 19:07
Zitat von ark4869:
doch noch etwas unklar ist mir, wofür man Variable s braucht
Nee, steht da nicht ... es wird leider nur über Umwege erkennbar.
(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:
OUT := copy(IN, x, y);

delete(IN_OUT, x, y);

setlength(IN_OUT, x);
.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.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
ark4869

Registriert seit: 23. Aug 2006
50 Beiträge
 
Delphi 6 Personal
 
#7

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 19:09
Warum kann man bei einem String denn addieren, aber nicht subtrahieren?
Und warum funktionieren in meinem Programm Befehle wie
Zitat:
EdWai.Text := EdWai.Text +FloatToStr(6)
,
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#8

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 19:13
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:
EdWai.Text := EdWai.Text +FloatToStr(6)
^setzen      ^auslesen
Man sieht es zwar nicht, aber Delphi macht aus diesem Code folgendes:
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 19:15
Zitat:
Warum kann man bei einem String denn addieren, aber nicht subtrahieren?
Das "+" bedeutet nich das addiert wird, sondern ist eigentlich ein Verketten.
Zitat:
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.
Wie himitsu schon genauer ausgeführt hat ist .Text kein normaler Member sondern ist eine Property die eigentlich nur "virtuell" besteht. Sie wird vom Compiler entweder auf Getter/Setter umgelenkt oder auf einen (normalerweise private) Member. man kann deshalb nicht einfach andere Funktionen darauf anwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
ark4869

Registriert seit: 23. Aug 2006
50 Beiträge
 
Delphi 6 Personal
 
#10

Re: Fehlermeldung: Operator ist auf Operandentyp nicht anwen

  Alt 28. Nov 2006, 19:17
Okay, ich glaube ich habe alles verstanden
Danke nochmals, ich glaub jetzt hab ich wirklich keine Fragen mehr

Mit freundlichen Grüßen
Ark4869
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:33 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