Autor Beitrag
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Mi 24.02.10 20:53 
Huhu.

Ich habe mal wieder eine Knacknuss, bei der ich nicht weiterkomme.

Wenn ich mir Screen.HintFont.Color, dann hat das einen negativen Wert bei mir unter Windows XP (Delphi 7): -16777193 = $FFFFFFFFFF000017
Soweit so gut.

Doch, wenn ich nun die Komplimentärfarbe davon errechnen möchte, dann ergibt folgendes Konstrukt:

Canvas.Font.Color := Screen.HintFont.Color xor $FFFFFF;

-24 = $FFFFFFFFFFFFFFE8

Dadurch, weil der Wert Negativ ist, erhelte ich letztenendes wieder fast die gleiche Farbe wie der Originalwert.

Gibt es einen Weg (den ich nicht gefunden habe, ohne etliche if/case - Prüfungen), diesen Windowsfarbwert in einen Delphifarbwert umzurechnen?
Eigentlich müsste ich ja nur vom Original oder vom Ergebnis $FFFFFFFFFF000000 subtrahieren, damit es stimmt, oder gibt es wirklich eine Funktion, die bei Delphi 7 schon nutzbar ist?

Viele Grüße
~Mathias
Reinhard Kern
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mi 24.02.10 23:46 
user profile icontrm hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mir Screen.HintFont.Color, dann hat das einen negativen Wert bei mir unter Windows XP (Delphi 7): -16777193 = $FFFFFFFFFF000017 ...


Hallo,

TColor ist KEIN RGB-Wert, muss es jedenfalls nicht sein. Siehe mal da:

www.delphipraxis.net/post600828.html

Gruss Reinhard
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 25.02.10 00:32 
Hallo Reinhard,

danke für Deinen Tipp. Jedoch weiss ich nicht, wie ich das anwenden soll, da ich ja einen riesengroßen Wert habe.

Hier ist jetzt mein aktuelles Konstrukt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
    Canvas.Font.Assign(Screen.HintFont);
    Canvas.Brush.Color := (Canvas.Font.Color xor $00FF77); // ist zwar keine Koplimentärfarbe, aber so will ich es haben.
    if Canvas.Brush.Color < 0 then
      Canvas.Brush.Color := Canvas.Brush.Color and $FFFFFFFFFF000000;


Meinst Du, das ist ok so?
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Do 25.02.10 10:24 
Du arbeitest da mit Systemfarben.. die kann man nicht einfach so invertieren, da der Farbwert erst von Windows, abhängig vom aktuellen Theme, zugewiesen wird.
Soweit ich weiß gibt es aber eine Funktion, um diese Systemfarbe zur Laufzeit als RGB Wert zu erhalten. Weiß leider den Namen nicht mehr, aber vielleicht hilft das schon als Suchbegriff?

_________________
PROGRAMMER: A device for converting coffee into software.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Do 25.02.10 12:42 
ausblenden Delphi-Quelltext
1:
2:
Form1.Color:=clRed;
Form1.Color:=RGB( 255-GetRValue(Form1.Color),255-GetGValue(Form1.Color),255-GetBValue(Form1.Color) );


Ok, ob das jetzt die Komplementärfarbe ist...für rot ist es türkis, könnte hinkommen, aber ich weiß nicht wie z.B. die Komplementärfabre von (128,128,128)=grau(?) ist...weil das wäre sie mit dem Code wieder selbst.
So kann man auf jeden Fall Color nach RGB wandeln ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
trm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: Do 25.02.10 17:22 
hallo Xion,

danke für Deine Hilfe.

Nebenbei: Glückwunsch zur 1200 :D

~Liebe Grüße
Mathias