[CodeSnippet] Delphi -> CBuilder

Katsumi

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.336
Hallöle.

Kann mir einer sagen wie das in CBuilder Code aussehen müsste?

Button->Color := Button->Color and not $FF000000 or (Round(((10 - FillAlpha.ItemIndex)) / 10 * $FF) shl 24);


Ich peile dieses "and not" und "or" mitten drin nicht, auch wenn ich natürlich weiss was es heissen soll.
Also das hier ist es nicht :)

Button->Color = (Button->Color != 0xFF000000) || (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 24);


:rolleyes:
 
Vielleicht so?

Button->Color = (Button->Color & ~(0xFF000000)) || (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 24);

Wobei ich solche Konstruktionen allgemein für böses Voodoo halte.
 
Danke. Aber das bewirkt leider das gleiche wie mein Code. Statt der Transparenz ist es komplett durchsichtig. Das Pascal Beispiel arbeitet aber Korrekt in Delphi7.
 
Hallo,

Ich habe den Eindruck das hier logische mit mathematischen Operatoren vermischt werden.

D.h. so wäre es wohl korrekt:

Button->Color = (Button->Color & ~(0xFF000000)) | (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 24);

Der Sinn soll doch wohl sein die obersten 8 Bit sprich den Alpha Wert zu setzen?
Jetzt könnte ich mir noch vorstellen das hier die Byteorder eine Rolle spielt.

D.h. einfach mal folgende Konstrukte nacheinander ausprobieren:

Button->Color |= (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 24);
Button->Color |= (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 16);
Button->Color |= (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF) << 8);
Button->Color |= (abs(((10 - FillAlpha.ItemIndex)) / 10 * 0xFF));

Oder alternativ die Struktur RGBQUAD verwenden. Sofern wir von C++ und Windows reden.

MfG

Arnd
 
Danke für deine Hilfe und es ist schon fast richtig ;)

Button->Color = (Button->Color & ~0xFF000000) | (abs(((float)(10 - FillAlpha.ItemIndex)) / 10.0 * 0xFF) << 24);

Damit daraus float werden, da sonst der hintere Teil immer 0 ist :)
 
Zurück
Oben