Ach ja, wie hast du denn geprüft, ob sich was verändert?
Eine Farbänderung von 1 ist mit blosem Auge nicht unbedingt erkennbar.
Und wenn man sich nochmal diesen Code vornimmt.
Delphi-Quellcode:
if (r mod 2) <> (strtoint(memo2.lines.text[letter])) then
begin
if r mod 2 = 1 then
r := r-1
else
r := r+1;
end;
PS: um eine größere/sichtbarere Änderung zu erziehlen
Delphi-Quellcode:
if (r mod 2) <> (strtoint(memo2.lines.text[letter])) then
begin
if (r div 32) mod 2 = 1 then
r := r - 32
else
r := r + 32;
end;
(oder 64, bzw. 128)
und nochmal verkürtzt (mit 1);
Delphi-Quellcode:
if (r mod 2) <> (strtoint(memo2.lines.text[letter])) then
begin
if r mod 2 = 1 then
r := r-1
else
r := r+1;
end;
// inneres IF rausgekürzt
if (r mod 2) <> strtoint(memo2.lines.text[letter]) then
begin
r := r xor 1;
end;
// nun das äußere IF
r := (r and not 1) or (strtoint(memo2.lines.text[letter]) and 1);
// und da in Memo2 eh nur 0 oder 1 drinsteht
r := (r and not 1) or strtoint(memo2.lines.text[letter]);
PS:
das mathematische "r mod 2" entspricht dem binären "r and 1"
Da es sich hier um Bitmanipilationen handelt, ist es eigentlich passender, wenn man auch Bitoperationen verwendet, anstatt von Mathematischen.
"r xor 1", "r and 1" oder "r or 1" verändern nur das letzte Bit
"r and NOT 1" verändert alle Bits, bzw. läßt nur das letzte Bit übrig und löscht den Rest
Aktuell fragt ihr ab ob sich das letzte Bit enes Farbwertes von dem gewünschten Bit unterscheidet, wenn ja, dann wird nochmal nachgesehn, ob das Bit an oder aus ist und wird dann umgeschaltet ... kürzer geht es, wenn man einfach direkt das letzte Bit auf den gewünschten Wert setzt.