Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi hex-codes in RGB werte und umgekehrt?? (https://www.delphipraxis.net/96965-hex-codes-rgb-werte-und-umgekehrt.html)

maxmax 2. Aug 2007 10:43


hex-codes in RGB werte und umgekehrt??
 
gibt es in delphi eine funktion, mit der man RotGrünBlau - Farbanteile in die Hexcodes umwandelt und umgekehrt??
also z.B.
#FBF66F = R: 251 G: 246 B: 111
oder andersrum??

und noch eine frage:
kann man in einem delphi programm irgendwie hexadezimalfarben anzeigen, also z.B eine fläche mit der farbe #F123CD oder
mit den RGB anteilen (z.B. 255, 156, 211) füllen???

danke für eure hilfe...

marabu 2. Aug 2007 11:08

Re: hex-codes in RGB werte und umgekehrt??
 
Hallo,

hast du dir schon mal die Funktionen ColorToString() bzw. StringToColor() angesehen?

Grüße vom marabu

dajuhsa 2. Aug 2007 11:34

Re: hex-codes in RGB werte und umgekehrt??
 
IntToHex ?

Delphi-Quellcode:
MyHex := '#' + IntToHex(MyRGB, 2);

Neutral General 2. Aug 2007 11:52

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von dajuhsa
IntToHex ?

Delphi-Quellcode:
MyHex := '#' + IntToHex(MyRGB, 2);

Ich glaube

Delphi-Quellcode:
IntToHex(MyRGB, 6)
oder

Delphi-Quellcode:
IntToHex(MyRGB, 8)
wäre bei Farben die bessere Wahl ;)

bitsetter 2. Aug 2007 12:00

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
gibt es in delphi eine funktion, mit der man RotGrünBlau - Farbanteile in die Hexcodes umwandelt und umgekehrt??
also z.B.
#FBF66F = R: 251 G: 246 B: 111
oder andersrum??

Hi,

Delphi-Quellcode:
Caption:= Format('#%.2x%.2x%.2x', [251, 246,111]);
Mit GetGValue():
Delphi-Quellcode:
var
  Col: Cardinal;
begin
  Col:= $FBF66F;
  Caption:= Format('%d %d %d',[GetBValue(Col), GetGValue(Col),GetRValue(Col)]);
wäre eine Möglichkeit.

maxmax 2. Aug 2007 12:24

Re: hex-codes in RGB werte und umgekehrt??
 
Delphi-Quellcode:
Caption:= Format('#%.2x%.2x%.2x', [251, 246,111]);
das ist von rgb in Hex, oder?

Mit GetGValue():
Delphi-Quellcode:
var
  Col: Cardinal;
begin
  Col:= $FBF66F;
  Caption:= Format('%d %d %d',[GetBValue(Col), GetGValue(Col),GetRValue(Col)]);
wäre eine Möglichkeit.[/quote]

und das von hex in rgb oder???

aber wie kann man jetzt eine fläche im formular mit einer rgb-farbe oder hex farbe füllen?? da gibts doch bloß die normlaen grundfarben, oder?

Zitat:

Zitat von dajuhsa
IntToHex ?

Delphi-Quellcode:
MyHex := '#' + IntToHex(MyRGB, 2);

das ist doch nur für normale zahlen, oder??
weil myRGB muss ja 3 zahlen haben

bitsetter 2. Aug 2007 12:32

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
das ist von rgb in Hex, oder?

Ja
Zitat:

Zitat von maxmax
und das von hex in rgb oder???

Ja mit GetRValue(), GetGValue() und GetBValue() kannst du dir die einzelnen Farben holen.
Zitat:

Zitat von maxmax
aber wie kann man jetzt eine fläche im formular mit einer rgb-farbe oder hex farbe füllen?? da gibts doch bloß die normlaen grundfarben, oder?

Delphi-Quellcode:
Self.Color:= RGB($FF,0,0);//ROT
Self.Color:= RGB($FB,$F6,$6F);//Deine Farbe

maxmax 3. Aug 2007 08:34

Re: hex-codes in RGB werte und umgekehrt??
 
danke für deine antwort...
also:

Zitat:

Zitat von bitsetter
Zitat:

Zitat von maxmax
das ist von rgb in Hex, oder?

Ja
Zitat:

Zitat von maxmax
und das von hex in rgb oder???

Ja mit GetRValue(), GetGValue() und GetBValue() kannst du dir die einzelnen Farben holen.
Und was kommt dann in die Klammern?? die hex werte oder? und die funktion ermittelt dann den Rot/Grün/Blau - anteil und geben ihn in in der normalen zahl an, oder?
Zitat:

Zitat von maxmax
aber wie kann man jetzt eine fläche im formular mit einer rgb-farbe oder hex farbe füllen?? da gibts doch bloß die normlaen grundfarben, oder?

Delphi-Quellcode:
Self.Color:= RGB($FF,0,0);//ROT
Self.Color:= RGB($FB,$F6,$6F);//Deine Farbe

Aber kann man auch RGB($255, $126, $100) schreiben, um die farbe nicht in hexwerten anzugeben?? oder wie schreibt man das dann?

DeddyH 3. Aug 2007 08:36

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
Aber kann man auch RGB($255, $126, $100) schreiben, um die farbe nicht in hexwerten anzugeben?? oder wie schreibt man das dann?

Ohne die Dollarzeichen (dieses Zeichen steht ja gerade für hexadezimale Darstellung).
RGB(255,126,100)

maxmax 3. Aug 2007 08:37

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von DeddyH
Zitat:

Zitat von maxmax
Aber kann man auch RGB($255, $126, $100) schreiben, um die farbe nicht in hexwerten anzugeben?? oder wie schreibt man das dann?

Ohne die Dollarzeichen (dieses Zeichen steht ja gerade für hexadezimale Darstellung).
RGB(255,126,100)

ahh ok, danke...

noch eine frage: man kann doch irgendwie so ein farben-fenster öffnen, indem man seine farbe auswählen kann (so ein fenster wie in paint, wenn man eine neue farbe nimmt) ich kenne das von anderen programmen...
also so ein fenster, indem rechts eine große farbenübersicht ist, in der man seine farben auswäjlen kann, und links ein paar kästchen mit den grundfarben sind...

ich glaube da gibt es doch einen farben-dialog, oder? wie kann man auf den im programm zugreifen??

bitsetter 3. Aug 2007 09:54

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
Und was kommt dann in die Klammern?? die hex werte oder? und die funktion ermittelt dann den Rot/Grün/Blau - anteil und geben ihn in in der normalen zahl an, oder?

Hi,
genau, als Parameter brauchst du der Funktion aber nicht unbedingt Hex werte übergeben.

Zitat:

Zitat von maxmax
noch eine frage: man kann doch irgendwie so ein farben-fenster öffnen, indem man seine farbe auswählen kann (so ein fenster wie in paint, wenn man eine neue farbe nimmt) ich kenne das von anderen programmen...
also so ein fenster, indem rechts eine große farbenübersicht ist, in der man seine farben auswäjlen kann, und links ein paar kästchen mit den grundfarben sind...

ich glaube da gibt es doch einen farben-dialog, oder? wie kann man auf den im programm zugreifen??

Du meinst bestimmt den TColordialog.
Delphi-Quellcode:
  if Colordialog1.Execute then
    self.Color:= Colordialog1.Color;

Svenkan 3. Aug 2007 13:14

Re: hex-codes in RGB werte und umgekehrt??
 
Hier mal 2 Funktionen für dich, die ich selbst auch benutze:

Delphi-Quellcode:
function HtmlColorToColor(AHtmlColor: string): TColor;
begin
 Delete(AHtmlColor, 1, 1);
 Result := StrToInt('$' + Copy(AHtmlColor, 5, 2) + Copy(AHtmlColor, 3, 2) + Copy(AHtmlColor, 1, 2));
end;
function ColorToHTMLColor(Color: TColor): String;
begin
 Color := ColorToRGB(Color);
 Result := Format('#%.2x%.2x%.2x', [GetRValue(Color),GetGValue(Color), GetBValue(Color)]);
end;

maxmax 4. Aug 2007 08:50

Re: hex-codes in RGB werte und umgekehrt??
 
ich hab jetzt noch ein problem:
bei der umwandlung von hex in rgb muss ja die Hexfarbe vom typ Cardinal sein...
wie kann ich einen Inhalt eines Edit's (typ = String) in den typ Cardinal umwandeln??

hier mal mein hex in RGB umwandel-Qelltext:
Bitte auf kommentare antworten!!
Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
Hex1 := Hexcolor.Text;
Col := Hex1; // Hier von String in Cardinal umwandeln!!!!

RGBan.Caption := Format('%d %d %d',[GetBValue(Col), GetGValue(Col),GetRValue(Col)]); // Muss man hier
// auch was wieder in einen String umwandeln???

Panel1.Color:= RGB(GetBValue(Col),GetGValue(Col),GetRValue(Col)); // Funktioniert das so???
end;
Und hier mein RGB in Hex umwandel - quelltext:
Bitte auch auf Kommentare antworten!!
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
R := ran.Text; //String
G := gan.Text; //String
B := ban.Text; //String
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [R,G,B]); // R,G,B hier Float oder Integer sein müssen ???
end;

jfheins 4. Aug 2007 09:46

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
ich hab jetzt noch ein problem:
bei der umwandlung von hex in rgb muss ja die Hexfarbe vom typ Cardinal sein...
wie kann ich einen Inhalt eines Edit's (typ = String) in den typ Cardinal umwandeln??

Delphi-Referenz durchsuchenStringToColor(); ;)

Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
Hex1 := Hexcolor.Text;
Col := Stringtocolor('$00FF0088'); // Hier von String in Cardinal umwandeln!!!!

RGBan.Caption := Format('%d %d %d',[GetBValue(Col), GetGValue(Col),GetRValue(Col)]); // Muss man hier
// auch was wieder in einen String umwandeln??? Mht Format doch ...?

Panel1.Color:= Col; // Funktioniert das so??? -> nein, auch einfacher ;-)
end;
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
R := ran.Text; //String
G := gan.Text; //String
B := ban.Text; //String
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [R,G,B]); // R,G,B hier Float oder Integer sein müssen ??? Weder noch - es müssen imho Byte-Werte sein (Ganzzahlig bis 255)
end;

maxmax 4. Aug 2007 11:04

Re: hex-codes in RGB werte und umgekehrt??
 
danke für die antwort, du hast mir perfekt geholfen... danke

noch eine frage: wie (mit welcher funktion) wandelt man von String in Byte um???
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
R := ran.Text;
G := gan.Text;
B := ban.Text;
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [R,G,B]);
Panel2.Color := RGB (R, G, B); // hier brauche ich bei R, G, B Bytes ... keine Strings wie???
end;
könntet ihr mir nochmal schnell helfen?? danke...

maxmax 4. Aug 2007 11:23

Re: hex-codes in RGB werte und umgekehrt??
 
Kann mir Bitte einer helfen???????????????????????????
Ich bräuchte es dringend...

bitsetter 4. Aug 2007 11:35

Re: hex-codes in RGB werte und umgekehrt??
 
Hi,

du musst aber darauf achten, dass gültige Zahlen in den Feldern sind und dass der Bereich der Zahlen zwischen 0..255 liegt.
Delphi-Quellcode:
RGB(StrToInt(R), StrToInt(G), StrToInt(B));

marabu 4. Aug 2007 11:36

Re: hex-codes in RGB werte und umgekehrt??
 
Hallo Max,

du liest scheinbar die Beiträge in deinem Thread nicht sehr genau. In Beitrag #12 hättest du sonst schon die Funktion StrToInt() kennen gelernt und die Funktion StringToColor() stand bereits in Beitrag #2 - vor zwei Tagen ...

Nachdenkliche Grüße

maxmax 4. Aug 2007 11:39

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von marabu
Hallo Max,

du liest scheinbar die Beiträge in deinem Thread nicht sehr genau. In Beitrag #12 hättest du sonst schon die Funktion StrToInt() kennen gelernt und die Funktion StringToColor() stand bereits in Beitrag #2 - vor zwei Tagen ...

Nachdenkliche Grüße

doch ich lese die beiträge
aber ich habe nicht gewusst, das die funktionen StrToInt und StrToColor auch zum umwandeln in Bytes benützt werden können
bin halt noch ein anfänger... :roll:

danke bitsetter für die antwort

//Edit:

Jetzt funzt alles perfekt, ausser das:
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
try
R := ran.Text;
G := gan.Text;
B := ban.Text;
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [R,G,B]);
Panel2.Color := RGB(StrToInt(R), StrToInt(G), StrToInt(B));
except
ShowMessage('Ungülte Farbenwerte! Bitte überprüfen!');
end;
end;
er meldet das #%.2x% ein ungültiges Format ist!
was muss ich ändern?

maxmax 4. Aug 2007 12:10

Re: hex-codes in RGB werte und umgekehrt??
 
Liste der Anhänge anzeigen (Anzahl: 2)
sry mein 2 post aber:
ich hab noch ein problem!

Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
try
Hex1 := '$'+Hexcolor.Text;
Col := StringToColor(Hex1);
RGBan.Caption := Format('%d %d %d',[GetRValue(Col), GetGValue(Col),GetBValue(Col)]);
Panel1.Color:= Col;
except
ShowMessage ('Ungültige Farbenwerte! Bitte überprüfen!')
end;
end;
wenn ich 95CAFF für Hex1 nehme: kommt als RGB 255 202 149 // es muss 149 202 255 lauten!! Und das Pnael ziegt orange an, obwohl es hellblau ist! (siehe bug1.bmp)

wenn ich DB1B44 nehme kommt: 68 27 219 // Jetzt richtig ausser das es 189 statt 219 heißen muss! Und das Panel zeigt dunkelblau an, obwohl es dunkelrot ist!! (siehe bug2.bmp)

WARUM???

bitsetter 4. Aug 2007 12:52

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
Jetzt funzt alles perfekt, ausser das:
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
try
R := ran.Text;
G := gan.Text;
B := ban.Text;
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [R,G,B]);
Panel2.Color := RGB(StrToInt(R), StrToInt(G), StrToInt(B));
except
ShowMessage('Ungülte Farbenwerte! Bitte überprüfen!');
end;
end;
er meldet das #%.2x% ein ungültiges Format ist!
was muss ich ändern?

Ich nehme mal an, dass die Variablen R, G und B Strings sind, also musst du diese erst in Bytes umwandeln.
Delphi-Quellcode:
begin
R := ran.Text;
G := gan.Text;
B := ban.Text;
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [StrToInt(R),StrToInt(G),StrToInt(B)]);
Auch da musst du wieder darauf achten, dass gültige Zahlen in den Feldern sind und dass der Bereich der Zahlen zwischen 0..255 liegt.

Zitat:

Zitat von maxmax
sry mein 2 post aber:
ich hab noch ein problem!

wenn ich 95CAFF für Hex1 nehme: kommt als RGB 255 202 149 // es muss 149 202 255 lauten!! Und das Pnael ziegt orange an, obwohl es hellblau ist! (siehe bug1.bmp)
[/b]

Du gibst die Werte andersrum ein:
Delphi-Quellcode:
StringToColor('$0000FF');//= ROT;
StringToColor('$00FF00');//= Grün
StringToColor('$FF0000');//= Blau
Wenn du es trotzdem so rum möchtest, dann gibt es hier im Thread schon einiges an Code dafür.

Svenkan 4. Aug 2007 13:22

Re: hex-codes in RGB werte und umgekehrt??
 
Ähm, was ist mit den Funktionen, die ich dir gepostet hab?!

maxmax 4. Aug 2007 13:44

Re: hex-codes in RGB werte und umgekehrt??
 
danke bitsetter so funzt es perfekt:
Delphi-Quellcode:
procedure TForm1.Umwandeln2Click(Sender: TObject);
begin
try
R := ran.Text;
G := gan.Text;
B := ban.Text;
Hexcolor2.Caption := Format('#%.2x%.2x%.2x', [StrToInt(R),StrToInt(G),StrToInt(B)]);
Panel2.Color := RGB(StrToInt(R), StrToInt(G), StrToInt(B));
except
ShowMessage('Ungülte Farbenwerte! Bitte überprüfen!');
end;
end;
@bitsetter:
aber: ich versteh irgendwie deine antwort zu dem nicht, bitsetter! was muss ich da jetzt machen?? :
Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
try
Hex1 := '$'+Hexcolor.Text;
Col := StringToColor(Hex1);
RGBan.Caption := Format('%d %d %d',[GetRValue(Col), GetGValue(Col),GetBValue(Col)]);
Panel1.Color:= Col;
except
ShowMessage ('Ungültige Farbenwerte! Bitte überprüfen!')
end;
end;
Was bewirken eigentlich diese zeichen: %d %d %d

Zitat:

Zitat von bitsetter
Auch da musst du wieder darauf achten, dass gültige Zahlen in den Feldern sind und dass der Bereich der Zahlen zwischen 0..255 liegt.

1. Ich hab sie ja richtig eingegeben...

Zitat:

Zitat von bitsetter
Zitat:

Zitat von maxmax
sry mein 2 post aber:
ich hab noch ein problem!

wenn ich 95CAFF für Hex1 nehme: kommt als RGB 255 202 149 // es muss 149 202 255 lauten!! Und das Pnael ziegt orange an, obwohl es hellblau ist! (siehe bug1.bmp)
[/b]

Du gibst die Werte andersrum ein:
Delphi-Quellcode:
StringToColor('$0000FF');//= ROT;
StringToColor('$00FF00');//= Grün
StringToColor('$FF0000');//= Blau
Wenn du es trotzdem so rum möchtest, dann gibt es hier im Thread schon einiges an Code dafür.

Ich geb die werte aber per Edit - feld ein und ich will sie ganz normal eingeben... Aber warum funzt es nicht?????


@svenkan: ich komm irgendwie nicht mit deiner funktion zurecht...
außerdem hab ich ja selber auch schon angefangen, aber halt mit fehlern...

bitsetter 4. Aug 2007 14:08

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
Was bewirken eigentlich diese zeichen: %d %d %d

Das sind Delphi-Referenz durchsuchenFormatbezeichner Zitat:",D Integer Dezimal. Zeigt Integer als Dezimalzahlen an. Gilt auch für Integer-Werte in Datenstrukturen."

Noch eine Variante
Delphi-Quellcode:
var
  Col: TColor;
begin
 Col:= StringToColor('$0000FF');//jetzt Blau
 Col:= ColorToRGB(Col);
 Panel1.Color:= RGB(GetBValue(Col), GetGValue(Col), GetRValue(Col));

maxmax 4. Aug 2007 15:28

Re: hex-codes in RGB werte und umgekehrt??
 
danke für die antwort... das ist ja viel einfacher...
Könntet ihr mir noch folgenden Kommentar beantworten?
Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
try
Hex1 := '$'+Hexcolor.Text;
Col:= StringToColor(Hex1);
Col:= ColorToRGB(Col);
RGBan.Caption := Col; //Wie Col zu String umwandeln??
Panel1.Color:= RGB(GetBValue(Col), GetGValue(Col), GetRValue(Col));
except
ShowMessage ('Ungültige Farbenwerte! Bitte überprüfen!')
end;
end;

scrat1979 4. Aug 2007 15:39

Re: hex-codes in RGB werte und umgekehrt??
 
Zitat:

Zitat von maxmax
danke für die antwort... das ist ja viel einfacher...
Könntet ihr mir noch folgenden Kommentar beantworten?
Delphi-Quellcode:
procedure TForm1.Umwandeln1Click(Sender: TObject);
begin
try
Hex1 := '$'+Hexcolor.Text;
Col:= StringToColor(Hex1);
Col:= ColorToRGB(Col);
RGBan.Caption := Col; //Wie Col zu String umwandeln??
Panel1.Color:= RGB(GetBValue(Col), GetGValue(Col), GetRValue(Col));
except
ShowMessage ('Ungültige Farbenwerte! Bitte überprüfen!')
end;
end;

Hallo!!

Col(or) müsste ein Integer-Wert sein. Daher müsste Dir auch hier die Funktion IntToStr(Col) weiterhelfen können. Die Hex/Integer/String - Umwandlungen kannst Du ja aus den obigen Posts entnehmen - falls nötig. Hoffe es funktioniert so!

SCRaT

marabu 4. Aug 2007 17:20

Re: hex-codes in RGB werte und umgekehrt??
 
Hallo,

die Farbzerlegung muss nicht zeitraubend über Funktionen erfolgen, Windows kennt einen speziellen Datentyp dafür:

Delphi-Quellcode:
var
  clr: TColor;
  pe: TPaletteEntry absolute clr; // Redefinition
begin
  clr := clRed; // interner Farbname
  clr := StringToColor('clRed'); // externer Farbname
  clr := StringToColor('$0000FF'); // alternativer Code für clRed
  with pe do
  begin
    peRed := 255; // volle Intensität bei Rot
    peGreen := StrToInt('$80'); // halbe Intensität bei Grün
  end;
  pe.peBlue := $40; // geringe Intensität bei Blau

  clr := ColorToRGB(clr); // Paletten-Flag entfernen
  ShowMessage('$' + IntToHex(clr, 6)); // Ausgabe $BBGGRR

  with TPaletteEntry(clr) do // type cast
    ShowMessage(Format('$%.2x%.2x%.2x', [peBlue, peGreen, peRed]));
end;
Freundliche Grüße

maxmax 5. Aug 2007 08:33

Re: hex-codes in RGB werte und umgekehrt??
 
danke marabu, aber ich hab es jetzt auch mit meiner version geschafft...
danke nochmal


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz