Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   [Delphi]Farben (https://www.delphipraxis.net/141419-%5Bdelphi%5Dfarben.html)

netmario 8. Okt 2009 16:44


[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.

DeddyH 8. Okt 2009 16:48

Re: [Delphi]Farben
 
Es gibt eine Funktion namens RGB, damit sollte es am Einfachsten gehen.

netmario 8. Okt 2009 16:52

Re: [Delphi]Farben
 
Sry, ich programmier noch nicht lange mit Delphi, wie kann man denn diese Funktion anwenden?

DP-Maintenance 8. Okt 2009 16:55

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.

Die Muhkuh 8. Okt 2009 16:55

Re: [Delphi]Farben
 
Delphi-Quellcode:
var
  Farbe: TColor;
begin
  Farbe := RGB(ScrollbarRot.position, ScrollbarGruen.Position, ScrollbarBlau.Position);

// Im Shape anzeigen
  Shape.Color := Farbe;
end;

netmario 8. Okt 2009 17:03

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.

changlee 8. Okt 2009 17:08

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.

netmario 8. Okt 2009 17:11

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?

Die Muhkuh 8. Okt 2009 17:12

Re: [Delphi]Farben
 
Delphi-Quellcode:
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;
So ungefähr ;-)

Wolfgang Mix 8. Okt 2009 17:13

Re: [Delphi]Farben
 
Wie der Name RGB schon sagt:
Maximum R=255
Maximum G=255
Maximum B=255

Gruß

Wolgang

changlee 8. Okt 2009 17:15

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;

netmario 8. Okt 2009 17:17

Re: [Delphi]Farben [Erledigt]
 
Habs jetzt, weiß jetzt wies geht, vielen Dank für eure Hilfe.

DeddyH 8. Okt 2009 17:17

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;

netmario 8. Okt 2009 17:22

Re: [Delphi]Farben
 
Hab noch ne kleine Frage, wie kann ich jetzt diese zusammengemischte Farbe im Hexadezimalsystem ausgeben lassen?

DeddyH 8. Okt 2009 17:25

Re: [Delphi]Farben
 
Mit IntToHex und GetRValue/GetGValue/GetBValue.

netmario 8. Okt 2009 17:35

Re: [Delphi]Farben
 
Bin mal wieder zu blöd das zu machen, könnt ihr mir bitte helfen?

DeddyH 8. Okt 2009 17:41

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?

netmario 8. Okt 2009 18:22

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.

DeddyH 8. Okt 2009 18:24

Re: [Delphi]Farben
 
Delphi-Quellcode:
DeinString := IntToHex(GetRValue(Farbe),2) + IntToHex(GetGValue(Farbe),2) + IntToHex(GetBValue(Farbe),2);
Ungetestet.

[edit] Ich hatte die Digits vergessen. [/edit]

netmario 8. Okt 2009 18:26

Re: [Delphi]Farben
 
Delphi-Quellcode:
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;
Da kommt [Error] Unit1.pas(49): Incompatible types: 'Cardinal' and 'TPanel'

DeddyH 8. Okt 2009 18:28

Re: [Delphi]Farben
 
Delphi-Quellcode:
Label1.Caption:= IntToHex(GetRValue(Farbenpanel.Color),2) + IntToHex(GetGValue(Farbenpanel.Color),2) + IntToHex(GetBValue(Farbenpanel.Color),2);
Du brauchst ja die Farbe und nicht das Panel selbst.

netmario 8. Okt 2009 18:30

Re: [Delphi]Farben
 
Vielen Dank, aber ist Rot nicht immer hinten? Und wie kommst du auf die 2?

DeddyH 8. Okt 2009 18:33

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:
IntToHex(Panel.Color)
genügen. Und die 2 heißt einfach 2 Stellen, also FF für 255 und nicht 00FF oder sowas.

netmario 8. Okt 2009 18:39

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?

DeddyH 8. Okt 2009 18:41

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.

netmario 8. Okt 2009 18:43

Re: [Delphi]Farben
 
Was ist Flag?

DeddyH 8. Okt 2009 18:47

Re: [Delphi]Farben
 
Ein Bit, das gesetzt wird oder eben nicht.

netmario 8. Okt 2009 18:48

Re: [Delphi]Farben
 
Sprich man könnte es für alles mögliche verwenden?

DeddyH 8. Okt 2009 18:51

Re: [Delphi]Farben
 
Schau mal hier: Effizientes Arbeiten mit Bitmasken

stahli 8. Okt 2009 19:02

Re: [Delphi]Farben
 
Hier sind mal ein paar Links über Farbsysteme und Helligkeitsänderungen.

Namenloser 8. Okt 2009 19:39

Re: [Delphi]Farben
 
Zitat:

Zitat von netmario
Sprich man könnte es für alles mögliche verwenden?

Prinizipiell ja. Unter Windows (zumindest unter der "alten" GDI32) wird es als Kennzeichnung für Systemfarben (z.B. die Hintergrundfarbe eines Buttons) verwendet. Deshalb passen sich alle Oberflächen automatisch an die im System eingestellten Farbschemen an und der Programmierer braucht die Farben nicht hartzucoden.
In der Unit "Graphics" sind die Farbkonstanten für die Systemfarben so deklariert:
Delphi-Quellcode:
const
  clSystemColor = $FF000000;
...
  clBtnFace = TColor(clSystemColor or COLOR_BTNFACE);
...
COLOR_BTNFACE ist in der Unit "Windows" deklariert:
Delphi-Quellcode:
  COLOR_BTNFACE = 15;
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.
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 13:58 Uhr.

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