Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Erhalte richtige Bytes, das if wird nicht durchlaufen (https://www.delphipraxis.net/3280-erhalte-richtige-bytes-das-if-wird-nicht-durchlaufen.html)

Daniel B 4. Mär 2003 20:14


Erhalte richtige Bytes, das if wird nicht durchlaufen
 
Hallöchen,

ich erhalte zwar die richtigen Bytes, aber ins else if komme ich trotzdem nicht rein! Warum?
Delphi-Quellcode:
ShowMessage(IntToStr(Byte(sCom[1])) + IntToStr(Byte(sCom[2])));
if ((sCom[1] = #106) and ((Byte(sCom[2]) and 0) = 0)) then
begin
  ShowMessage('Falsches Byte');
end
else if ((sCom[1] = #106) and ((Byte(sCom[2]) and 32) = 32)) then
begin
 ShowMessage('Richtiges Byte');
end; //if
Ich erhalte auch die Bytes #106#32, aber in den else Teil komme ich einfach nicht rein, sondern in den if Teil mit der Message, Falsches Byte.
Es macht auch keinen Unterschied ob ich es mit
((Byte(sCom[2]) and 32) = 32))
oder
((Byte(sCom[2]) and 32) <> 0))
mache!
Was ist nur Falsch?
Vielen Dank.

Grüsse, Daniel :hi:

CalganX 4. Mär 2003 20:17

Wenn ich dich richtig verstanden habe, dann musst du nur das else wegnehmen...

Chris

Daniel B 4. Mär 2003 20:21

Zitat:

Zitat von Chakotay1308
Wenn ich dich richtig verstanden habe, dann musst du nur das else wegnehmen...

Nee, wenn ich zwei einzelne Ifs mache, dann komme ich in gar keinem rein. :shock:

Grüsse, Daniel :hi:

jbg 4. Mär 2003 20:45

Zitat:

Delphi-Quellcode:
(Byte(sCom[2]) and 0) = 0)

Was willst du den damit machen?

Mal ein kleines Beispiel:
Delphi-Quellcode:
AND 1  0
  1  1  0
  0  0  0

Daraus ergibt sich:
1010101
0000000
-------
0000000
Die Bedingung (irgendwas AND 0) = 0 ist also immer True.

Daniel B 4. Mär 2003 20:58

Jetzt wo Du es sagst. :)
Aber trotzdem, ich muss einmal prüfen ob die Bytes #106#0 sind, dann soll die Message kommen, oder wenn die Bytes #106#32 lauten, dann die andere Message. Oder besser gesagt, Das Bit 6 der Adresse 106 auf 1 ist oder nicht!
Hab das oben geändert, jedoch bringt mir das jetzt andere Probleme.
Das
ShowMessage(IntToStr(Byte(sCom[1])) + IntToStr(Byte(sCom[2])));
kommt ständig, mit der Ausgabe 1060. Jedoch wird kein If ausgeführt.

Grüsse, Daniel :hi:

janjan 4. Mär 2003 21:46

Probiers mal so:
Delphi-Quellcode:
ShowMessage(IntToStr(Byte(sCom[1])) + IntToStr(Byte(sCom[2])));
if (sCom[1] = #106) and (Byte(sCom[2]) = #0) then
begin
  ShowMessage('Falsches Byte');
end
else if ((sCom[1] = #106) and ((Byte(sCom[2]) and 32) <> 0)) then
begin
ShowMessage('Richtiges Byte');
end; //if
Oder mach sowas in die Richtung:
Delphi-Quellcode:
if (sCom[1] = #106) then
  begin
    if Byte(sCom[2]) = #0 then
      begin
        ShowMessage('Falsch');
      end;
    if (Byte(sCom[2]) and 32) <> 0 then
      begin
        ShowMessage('Richtig');
      end;
  end;

Daniel B 4. Mär 2003 21:57

Ich hab mal die Reihenfolge der if geändert und jetzt geht es.
Delphi-Quellcode:
        if ((sCom[1] = #106) and ((Byte(sCom[2]) and 32) <> 0)) then
        begin
          ShowMessage('Richtiges Byte!');
        end
        else
        begin
          ShowMessage('Falsches Byte!');
        end; //if
Das klappt wunderbar, aber die Idee mit den Verschachtelten Ifs würde warscheinlich auch gehen.
Danke Euch!

Grüsse, Daniel :hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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