Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem mit ''if'' *FERTIG*
G-McKree - Do 15.05.03 19:42
Titel: problem mit ''if'' *FERTIG*
also ich hab eine Stelle im Quelltext und die sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5:
| if BlueDirection = 0 or 2 or 3 or 4 or 5 or 6 or 7 then begin BlueDirection:= 1; Blue.Picture.LoadFromFile(Path + 'BlueUP-LE.bmp'); end; |
BlueDirection (ne real variable) ist aber 0, was bedeutet, das delphi das ausführen muss, was nach ''then'' kommt, macht es aber nicht. Undich wüsste gern warum
Moderiert von
Tino: Delphi-Tags hinzugefügt.
Christian S. - Do 15.05.03 20:27
Auch wenn sich die Sache erledigt hat, könnte es Dir vielleicht helfen, Dir den Beitrag zu IF-Anweisungen in den FAQs zu Object Pascal hier im Forum anzuschauen!
MfG,
Peter
G-McKree - Do 15.05.03 20:49
die frage gilt noch, nur das 2. post war n fehler
wo gibts denn das FAQ? kanns nich finden
Christian S. - Do 15.05.03 20:58
Komisch, der FAQ-Beitrage wurde in die Tutorials verschoben.
Hier [
http://www.delphi-forum.de/viewtopic.php?t=2971] ist er.
Zu Deiner Frage (die auch in dem Beitrag, der so tut, als wäre er ein FAQ-Beitrag beantwortet wird): mit dem logischen Operator "OR" werden Bool'sche Ausdrücke verknüpft. Also nur Ausdrücke, die zu einem True oder eine False ausgewertet werden können.
Du verknüpfst einen Bool'schen Ausdruck (BlueDirection = 0) mit Integer-Werten (2,3,4, ...). Um dieses Problem zu umgehen, musst Du zusehen, dass Deine gesamte IF-Anweisung nur aus Bool'schen Ausdrücken besteht.
Das Äquivalent zu dem, was Du geschrieben hast, wäre folgendes:
Delphi-Quelltext
1:
| if (BlueDirection = 0) Or (BlueDirection = 2) ... then |
Besser wäre aber:
Delphi-Quelltext
1:
| IF BlueDirection IN [0,2,3,4,5,6,7] then |
Noch besser:
Delphi-Quelltext
1:
| IF BlueDirection IN [0,2..7] then |
MfG,
Peter
//edit: ach ja, könntest Du in Deinem ersten Posting die "quote"-Tags durch "Delphi"-Tags ersetzen? Dann wird der Quellcode besser angezeigt!
Simon Joker - Fr 16.05.03 09:20
@Peter
es ist nicht korrekt, das die logischen Operatoren NUR für bool'sche Ausdrücke gelten. Viel API-Funktionen verwenden Integer-Flags, bei denen jedes Bit eine Bedeutung hat. Um jetzt einzelne Werte zu kombinieren ist es möglicht diese mit OR zu verknüpfen. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| const Flag1=1; Flag2=2; Flag3=4; Flag4=8; ... MacheWas(Flag1 or Flag3); ... |
Christian S. - Fr 16.05.03 11:53
@Simon Joker: zum einen ging es hier ja um IF-Abfragen. Zum anderen ist die bitweise Verknüpfung, wie Du sie beschreibst, eine Verwendung von OR bei Bool'schen Ausdrücken, eben den einzelnen Bits!
Delete - Sa 17.05.03 07:24
| Simon Joker hat folgendes geschrieben: |
| es ist nicht korrekt, das die logischen Operatoren NUR für bool'sche Ausdrücke gelten. |
Doch eigentlich schon. Bei C sieht man den Unterschied. Ein Vergleich wird dort nämlich mit
&& (and) bzw.
|| (or) ausgeführt, während du bitweise mit
& bzw.
| arbeitest.
Bei Delphi heißen die Operatoren zufälligerweise in beiden Fällen
and bzw.
or, was aber an der Sprache liegt. Den Unterschied gibt es streng genommen also auch hier, man sieht ihn nur nicht. :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!