![]() |
[Delphi]Farben
Hallo, wollte ein Farbcode Programm machen und habe drei Scrollbars, die jeweils von 0-255 gehen, also ein Byte. Ich habe jetzt den Wert den Scrollbars zugeordnet, der Rote Anteil funktioniert perfekt. Der Grüne und der Blaue, bei diesen beiden weiß ich nicht welche Werte ich zuordnen muss, könnt ihr mir helfen, vielen Dank.
|
Re: [Delphi]Farben
Es gibt eine Funktion namens RGB, damit sollte es am Einfachsten gehen.
|
Re: [Delphi]Farben
Sry, ich programmier noch nicht lange mit Delphi, wie kann man denn diese Funktion anwenden?
|
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
|
Re: [Delphi]Farben
Delphi-Quellcode:
var
Farbe: TColor; begin Farbe := RGB(ScrollbarRot.position, ScrollbarGruen.Position, ScrollbarBlau.Position); // Im Shape anzeigen Shape.Color := Farbe; end; |
Re: [Delphi]Farben
Ich versteh das nicht so ganz, dass ist was ich bisher gemacht habe.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) FRot: TPanel; SRot: TScrollBar; ZRot: TLabel; FGruen: TPanel; ZGruen: TLabel; SGruen: TScrollBar; FBlau: TPanel; ZBlau: TLabel; SBlau: TScrollBar; FarbenPanel: TPanel; procedure SRotChange(Sender: TObject); procedure SGruenChange(Sender: TObject); procedure SBlauChange(Sender: TObject); private { Private declarations } public { Public declarations } Farben,rot,gruen,blau:Integer; Farbe:TColor; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.SRotChange(Sender: TObject); begin rot:=SRot.Position; Zrot.Caption:=IntToStr(rot); FRot.Color:=rot; end; procedure TForm1.SGruenChange(Sender: TObject); begin Gruen:=SGruen.Position; ZGruen.Caption:=IntToStr(Gruen); FGruen.Color:=Gruen; end; procedure TForm1.SBlauChange(Sender: TObject); begin Blau:=SBlau.Position; ZBlau.Caption:=IntToStr(Blau); FBlau.Color:=Blau; end; end. |
Re: [Delphi]Farben
Hi,
du weist der Farbe des Panels den integer Wert von der Scrollbar-Position zu. Das geht nicht. Und selbst wenn doch, dann würdest du ja nur eine der drei Grundfarben berücksichtigen. Du solltest nicht diesen integer Wert zuweisen, sondern die Farbe, die du mittels RGB() erhälst. Gruß, Stefan. |
Re: [Delphi]Farben
So funktioniert es aber auch, ich weiß nur nicht die Werte für Gruen und Blau, mit Rot geht es. Wie müsste es denn genau mit RGB aussehen?
|
Re: [Delphi]Farben
Delphi-Quellcode:
So ungefähr ;-)
procedure TForm1.SRotChange(Sender: TObject);
begin rot:=SRot.Position; Zrot.Caption:=IntToStr(rot); FRot.Color:=rot; FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; procedure TForm1.SGruenChange(Sender: TObject); begin Gruen:=SGruen.Position; ZGruen.Caption:=IntToStr(Gruen); FGruen.Color:=Gruen; FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; procedure TForm1.SBlauChange(Sender: TObject); begin Blau:=SBlau.Position; ZBlau.Caption:=IntToStr(Blau); FBlau.Color:=Blau; FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; |
Re: [Delphi]Farben
Wie der Name RGB schon sagt:
Maximum R=255 Maximum G=255 Maximum B=255 Gruß Wolgang |
Re: [Delphi]Farben
achso, ja, das panel soll offenbar gar nicht die gemischte Farbe bekommen.
Delphi-Quellcode:
procedure TForm1.SBlauChange(Sender: TObject);
begin Blau:=SBlau.Position; ZBlau.Caption:=IntToStr(Blau); FBlau.Color := RGB(0, 0, ScrollbarBlau.Position); Farbe := RGB(ScrollbarRot.position, ScrollbarGruen.Position, ScrollbarBlau.Position); end; |
Re: [Delphi]Farben [Erledigt]
Habs jetzt, weiß jetzt wies geht, vielen Dank für eure Hilfe.
|
Re: [Delphi]Farben
Delphi-Quellcode:
procedure TForm1.SRotChange(Sender: TObject);
begin rot:=SRot.Position; Zrot.Caption:=IntToStr(rot); FRot.Color:=RGB(rot,0,0); FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; procedure TForm1.SGruenChange(Sender: TObject); begin Gruen:=SGruen.Position; ZGruen.Caption:=IntToStr(Gruen); FGruen.Color:=RGB(0,Gruen,0); FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; procedure TForm1.SBlauChange(Sender: TObject); begin Blau:=SBlau.Position; ZBlau.Caption:=IntToStr(Blau); FBlau.Color:=RGB(0,0,Blau); FarbenPanel.Color := RGB(Rot, Gruen, Blau); end; |
Re: [Delphi]Farben
Hab noch ne kleine Frage, wie kann ich jetzt diese zusammengemischte Farbe im Hexadezimalsystem ausgeben lassen?
|
Re: [Delphi]Farben
Mit IntToHex und GetRValue/GetGValue/GetBValue.
|
Re: [Delphi]Farben
Bin mal wieder zu blöd das zu machen, könnt ihr mir bitte helfen?
|
Re: [Delphi]Farben
RGB() mischt Dir aus den 3 Grundfarben einen Farbton. GetXValue (X für R, G, oder B) holt daraus dann wieder den entsprechenden Farbanteil. Das ist ein Byte, das Du mit IntToHex in einen String umwandeln kannst. Nun fügst Du die Teilstrings mit + wieder zusammen und fertig. Wo hängt es denn?
|
Re: [Delphi]Farben
Wie muss ich das genau machen?
GetRValue:=r; Label1.Caption:=IntToHex(r); Das Wollte nicht gehen. Hatte erst eine Schuldoppelstunde Delphi, bitte um Verzeihung. |
Re: [Delphi]Farben
Delphi-Quellcode:
Ungetestet.
DeinString := IntToHex(GetRValue(Farbe),2) + IntToHex(GetGValue(Farbe),2) + IntToHex(GetBValue(Farbe),2);
[edit] Ich hatte die Digits vergessen. [/edit] |
Re: [Delphi]Farben
Delphi-Quellcode:
Da kommt [Error] Unit1.pas(49): Incompatible types: 'Cardinal' and 'TPanel'
procedure TForm1.SRotChange(Sender: TObject);
begin rot:=SRot.Position; Zrot.Caption:=IntToStr(Rot); FRot.Color:=rot; FRot.Color:=RGB(rot,0,0); FarbenPanel.Color := RGB(Rot, Gruen, Blau); Label1.Caption:= IntToHex(GetRValue(Farbenpanel)) + IntToHex(GetGValue(Farbenpanel)) + IntToHex(GetBValue(Farbenpanel)); end; |
Re: [Delphi]Farben
Delphi-Quellcode:
Du brauchst ja die Farbe und nicht das Panel selbst.
Label1.Caption:= IntToHex(GetRValue(Farbenpanel.Color),2) + IntToHex(GetGValue(Farbenpanel.Color),2) + IntToHex(GetBValue(Farbenpanel.Color),2);
|
Re: [Delphi]Farben
Vielen Dank, aber ist Rot nicht immer hinten? Und wie kommst du auf die 2?
|
Re: [Delphi]Farben
Wie willst Du es denn dargestellt haben? Ich habe das so gedacht, dass das RGB-Format angezeigt werden soll, Delphi definiert seine Farben aber im BGR-Format. Wenn Du Letzteres willst, würde auch ein
Delphi-Quellcode:
genügen. Und die 2 heißt einfach 2 Stellen, also FF für 255 und nicht 00FF oder sowas.
IntToHex(Panel.Color)
|
Re: [Delphi]Farben
Das Hexadezimalsystem besteht doch normalerweiße aus 4Bytes und soweit ich weiß bestimmt das letzt die Transparenz, wie kann man das machen?
|
Re: [Delphi]Farben
In der "normalen" TColor gibt es kein Byte für die Transparenz, das 4. Byte wird als Flag für Systemfarben verwendet. Du müsstest also auf TBitmap32 oder ähnliches ausweichen.
|
Re: [Delphi]Farben
Was ist Flag?
|
Re: [Delphi]Farben
Ein Bit, das gesetzt wird oder eben nicht.
|
Re: [Delphi]Farben
Sprich man könnte es für alles mögliche verwenden?
|
Re: [Delphi]Farben
Schau mal hier:
![]() |
Re: [Delphi]Farben
Hier sind mal ein paar Links über
![]() |
Re: [Delphi]Farben
Zitat:
In der Unit "Graphics" sind die Farbkonstanten für die Systemfarben so deklariert:
Delphi-Quellcode:
COLOR_BTNFACE ist in der Unit "Windows" deklariert:
const
clSystemColor = $FF000000; ... clBtnFace = TColor(clSystemColor or COLOR_BTNFACE); ...
Delphi-Quellcode:
Durch den bitweisen OR-Operator werden die beiden Konstanten $FF000000 und 15 (hexadezimal = F) verknüpft zu dem Wert $FF000000F. Die beiden höchstwertigen Stellen werden also mit $FF "markiert", was binär bedeutet, dass dieses Byte komplett mit Einsen gefüllt ist.
COLOR_BTNFACE = 15;
Das ist aber nur so lange interessant, wie es um die grafische Ausgabe mit der GDI (der sich auch die Delphiklassen bedienen) geht. Solange du nur intern damit rechnest, kannst du in TColor reinschreiben, was du willst, und z.b: das vierte Byte auch als Alphaknal benutzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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 by Thomas Breitkreuz