Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehler: Operator ist auf diesen Operandentyp nicht anwendbar


Marco117 - Do 12.02.09 13:05
Titel: Fehler: Operator ist auf diesen Operandentyp nicht anwendbar
Hi Leute
Ich habe da ein problem ich weiss nich ob das hier im richtigen bereich gepostet ist ist aber ich fange mal an zu berichten.
Ich versuche eine Edit Textbox so einzustellen das sie nur die zahlen aus dem Nummernblock
inc.+,-,* und /, einlist und alle anderen ignoriert.



(Ich habe die Ascii Tabelle als hielfe genutzt)
Mein bisheriger Text lautet:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Keyindex : Integer;
    Keys : Boolean;
begin
Keyindex := Ord (Key);
Keys := (Key) <= 42 and (Key) >= 57;
if not Keys then
Edit1.Text := '';
end;

end.


und bekomme dann volgende Fehlermeldungen:


Quelltext
1:
2:
[DCC Fehler] Rechner3Unit1.pas(31): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
[DCC Warnung] Rechner3Unit1.pas(31): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'ShortString'.


Hoffe das ihr mir da weiter helfen könnt
ich bedanke mich schonmal.
mfG Marco

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconGausi: Titel wieder geändert. Den hab ich doch eben so gesetzt. :motz:


baka0815 - Do 12.02.09 13:12
Titel: Re: HILFE
Du hast ja leider keine Zeilennummern angegeben, aber versuch mal die Klammerung umzusetzen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Keyindex : Integer;
    Keys : Boolean;
begin
Keyindex := Ord (Key);
Keys := (Key <= 42) and (Key >= 57);
if not Keys then
Edit1.Text := '';
end;


Dann sollte zumindest der Fehler nicht mehr auftreten, aber ich vermute, du möchtest auch ein or statt dem and verwenden. So suchst du nach "Taste <= 42" und gleichzeitig "Taste >= 57", aber der Wert kann ja nicht gleichzeitig kleiner als 43 udn größer als 56 sein. :)

PS.: Für's nächste Mal den Code bitte in delphi-Tags.


Gausi - Do 12.02.09 13:14

Das ist ein Standard-Fehler. Du muss hier nur die Klammern anders setzen. ;-)


Delphi-Quelltext
1:
Keys := (Key <= 42and (Key >= 57);                    


Xentar - Do 12.02.09 13:14
Titel: Re: HILFE
user profile iconbaka0815 hat folgendes geschrieben Zum zitierten Posting springen:
PS.: Für's nächste Mal den Code bitte in delphi-Tags.

Und einen SINNVOLLEN Thread Titel..
Hilfe brauchen viele, die hier posten.

Edit: Btw. wird deine Abfrage niemals zutreffen.
Wie kann eine Zahl kleiner 42 und gleichzeitig größer 57 sein? Eins von beiden ist immer false.


Gausi - Do 12.02.09 13:18

Hinweis: Den Titel habe ich gewählt, als ich die Frage von einem anderen Topic abgetrennt habe. Warum der vom OT auf "HILFE" geändert wurde, ist mir schleierhaft.

Ich habe ihn wieder zurückgesetzt. Bitte so lassen, oder meinetwegen in etwas anderes sinnvolles ändern. - Danke.


Marco117 - Do 12.02.09 13:58

Hi ich bins nochmal
sry wegen dem dämlichen Titel^^
aber mal auf mein problem zurück zukommen das mit dem kleiner 43 und größer 57 muss ich gestehen war en Tippfehler ^^.
aber das mit dem klammern versetzen habe ich auch schon versucht da bekomme ich nur nochmehr
Fehler :

[DCC Warnung] Rechner3Unit1.pas(31): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'ShortString'
[DCC Fehler] Rechner3Unit1.pas(31): E2008 Inkompatible Typen
[DCC Warnung] Rechner3Unit1.pas(31): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'ShortString'
[DCC Fehler] Rechner3Unit1.pas(31): E2008 Inkompatible Typen
ich habe nich eine blasen schimmer wie das geht sry aber ich danke trotzdem jemand ne andre Idee ich selber sitze seit 2 tagen daran ^^
mfG Marco

Ps un ich verstehe nich wie ich diese Delphie codes so poste wie du meintest ^^
bin selten in Foren :).


Delete - Do 12.02.09 14:26

Abgesehen davon sehe ich da ein logisches Problem.
Zitat:

Delphi-Quelltext
1:
Keys := (Key <= 42and (Key >= 57);                    

Das kann doch niemals eintreten :gruebel:


Sinspin - Do 12.02.09 14:39


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var Keyindex : Integer; // wozu?
    Keys : Boolean; // wozu?
begin
Keyindex := Ord (Key); // du verwendest das doch nie!
Keys := (Key <= 42and (Key >= 57); // wozu der umweg? außerdem ist Key von Typ Char was zumindest bedeutet das ein "#" vor deine Zahl muss.
if not Keys then
Edit1.Text := ''// warum willst du den ganzen text platt machen wenn ein zeichen nicht passt?
end;
// über deine Formatierung lässt sich streiten.

// versuch es doch einfach mal so:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not Key in ['0'..'9''+''-''*''/'then
    Key := #0// Key ist VAR also ein I/O Parameter. Liefert man Key = #0 zurück wird die Eingabe ignoriert
end;


PS: Schau mal, wenn du einen Beitrag editierst, auf die Buttons direkt über dem Texteingabefeld. Auf einem steht "Bereiche". Probier dann einfach mal ein bisschen mit den Einstellungen rum und schau dir die Ergebnisse mit dem "Vorschau" Button an (links neben "Absenden")


Marco117 - Fr 13.02.09 02:06

nochmal hi ^^
danke für schnelle Rückmeldungen übrigens habe es gemacht aber ich bekomme immer noch eine Fehler meldung und zwa :

[DCC Fehler] Rechner2Unit1.pas(58): E2015 Operator ist auf diesen Operandentyp nicht anwendbar

sry leute aber ich weiss auch nich was das ist -.-
mfG Marco


jaenicke - Fr 13.02.09 02:36

Was hast du gemacht? :lol:
Deinen aktuellen Code, in dem der Fehler auftritt, musst du schon dazuschreiben. ;-)


Marco117 - Fr 13.02.09 10:34

sry ^^

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not Key in ['0'..'9', '+', '-', '*', '/'] then
Key := #0;
end;
hier das ist der text :)


Nico72 - Fr 13.02.09 10:39


Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9''+''-''*''/']) then
Key := #0;
end;


sonst will er "not Key" im Array suchen, was natürlich nicht geht...


Delete - Fr 13.02.09 10:44

Nur als Anmerkung: über die Zwischenablage bekommt man aber immer noch andere Zeichen hinein.


Marco117 - Fr 13.02.09 10:48

danke für die schnelle Antwort und es klappt :):)

endlich nach mittlerweile 3 tagen ^^

mfG Marco