Autor Beitrag
G-McKree
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: Do 15.05.03 19:42 
also ich hab eine Stelle im Quelltext und die sieht so aus:
ausblenden 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 user profile iconTino: Delphi-Tags hinzugefügt.


Zuletzt bearbeitet von G-McKree am So 18.05.03 14:29, insgesamt 2-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
G-McKree Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 178



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 15.05.03 20:58 
Komisch, der FAQ-Beitrage wurde in die Tutorials verschoben. Hier 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:
ausblenden Delphi-Quelltext
1:
if (BlueDirection = 0Or (BlueDirection = 2) ... then					


Besser wäre aber:
ausblenden Delphi-Quelltext
1:
IF BlueDirection IN [0,2,3,4,5,6,7then					


Noch besser:
ausblenden Delphi-Quelltext
1:
IF BlueDirection IN [0,2..7then					



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!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Simon Joker
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 236
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
const
  Flag1=1//bin -> 0001
  Flag2=2//bin -> 0010
  Flag3=4//bin -> 0100
  Flag4=8//bin -> 1000

//Aufruf irgendeiner Funktion mit diesen Flags
...
  MacheWas(Flag1 or Flag3);
  //Die Flags werden bitweise kombiniert:
  //     0001
  // or  0100
  // =   0101
...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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: