Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Animierter Farbverlauf (https://www.delphipraxis.net/126070-animierter-farbverlauf.html)

Larsi 17. Dez 2008 12:40


Animierter Farbverlauf
 
Hi,
ich möchte in meinem Programm als Hintergrund einen animierten Farbverlauf haben. Für den Farbverlauf verwende ich JvGradient welches die Eigenschaft StartColor hat wo man die einstellen kann. Ich möchte jetzt haben, dass das Ding in weichen Übergängen seine Farbe ändert. Natrülich könnte man es mit Random machen also eine Zufallsfarbe erstellen aber die erstellt ja auch Farben, die ich nicht schön finde wie grau. Also ich hätte gerne alle "schönen" Farben wie Blau, Gelb, Grün, Rot z.B. Diese sollen weich ineinander übergehen. Wie macht man das? Ich habe schon eine ganze Menge ausprobiert aber es kamen halt auch immer hässliche Farben raus. Hoffe Ihr wisste weiter.

MFG Lars Wiltfang

DeddyH 17. Dez 2008 13:23

Re: Animierter Farbverlauf
 
Ich habe zwar nicht ganz verstanden, was Du eigentlich willst, aber eine schöne Gradient-Kompo findest Du hier: http://www.delphiarea.com/products/d...ents/gradient/

Sherlock 17. Dez 2008 13:32

Re: Animierter Farbverlauf
 
Ich glaube der Lars will Color Cycling haben.
http://upload.wikimedia.org/wikipedi...or_cycling.gif

Sherlock

DeddyH 17. Dez 2008 13:34

Re: Animierter Farbverlauf
 
Ich glaube, außer Lars weiß niemand, was er haben will :mrgreen:

Larsi 17. Dez 2008 13:42

Re: Animierter Farbverlauf
 
Ich möchte einfach ineinander übergehende Farben haben.

SirThornberry 17. Dez 2008 13:45

Re: Animierter Farbverlauf
 
das wäre ein Farbverlauf. Aber was meinst du mit animiert?

DeddyH 17. Dez 2008 13:50

Re: Animierter Farbverlauf
 
Unter einem animierten Farbverlauf stelle ich mir so etwas vor wie die Demo aus meinem obigen Link. Aber vielleicht meint Larsi etwas ganz anderes, nämlich einen Übergang von einer Füllfarbe in eine andere.

Larsi 17. Dez 2008 13:58

Re: Animierter Farbverlauf
 
Genau.

DeddyH 17. Dez 2008 14:04

Re: Animierter Farbverlauf
 
Wenn Du Dir einmal den Code für einen Farbverlauf anschaust, wird dort von Startfarbe bis Endfarbe berechnet und zeilenweise (oder spaltenweise) gezeichnet. Das musst Du doch nur übernehmen und die komplette Zeichenfläche mit der errechneten aktuellen Farbe füllen (mit einer kleinen zeitlichen Verzögerung, damit man es auch sieht).

Sherlock 17. Dez 2008 14:07

Re: Animierter Farbverlauf
 
Zitat:

Zitat von DeddyH
Unter einem animierten Farbverlauf stelle ich mir so etwas vor wie die Demo aus meinem obigen Link. Aber vielleicht meint Larsi etwas ganz anderes, nämlich einen Übergang von einer Füllfarbe in eine andere.

Zitat:

Zitat von Larsi
Genau.

Häh? :)

Also willst Du einfach nur einen normalen Farbverlauf. Das können 90% aller modernen Komponenten (behaupte ich einfach mal). Das Finden "schöner" Farben, bzw. Farbkombinationen ist eine hohe Kunst :) Aber dafür gibt es Helfer: http://www.colorschemer.com/online.html

Sherlock

DeddyH 17. Dez 2008 14:30

Re: Animierter Farbverlauf
 
Liste der Anhänge anzeigen (Anzahl: 1)
Nochmal, ich denke er möchte so etwas wie im Anhang (schnell dahergetippt und keineswegs ausgereift).

SirThornberry 17. Dez 2008 14:36

Re: Animierter Farbverlauf
 
ich dachte eher er will ein Bild von einem Verlauf (von Farbe1 zu Farbe2) und dann soll sich langsam Farbe1 und/oder Farbe2 zu einer anderen Farbe hinn ändern

Larsi 17. Dez 2008 17:20

Re: Animierter Farbverlauf
 
@Deddyh: Kann ich den Code davon haben?

DeddyH 17. Dez 2008 17:25

Re: Animierter Farbverlauf
 
Den kompletten nicht, da er einfach nur Sch...e ist, aber die Basis (die originale unmodifizierte Gradient-Prozedur) kann ich gerne mal posten:
Delphi-Quellcode:
type TDirection = (dVert,dHorz);

procedure DrawGradientFillRect(Canvas: TCanvas; Rect: TRect;
                StartColor, EndColor: TColor; Direction: TDirection);
var
  Steps: Integer;
  StartR, StartG, StartB, EndR, EndG, EndB: Byte;
  CrrR, CrrG, CrrB: Double;
  IncR, IncG, incB: Double;
  i: integer;
begin
  case Direction of
    dVert: Steps := Rect.Bottom - Rect.Top;
    dHorz: Steps := Rect.Right - Rect.Left;
    else
      Steps := 0;
  end;

  if Steps = 0 then Exit;
 
  StartR := GetRValue(StartColor); EndR := GetRValue(EndColor);
  StartG := GetGValue(StartColor); EndG := GetGValue(EndColor);
  StartB := GetBValue(StartColor); EndB := GetBValue(EndColor);

  IncR := (EndR - StartR) / steps;
  IncG := (EndG - StartG) / steps;
  IncB := (EndB - StartB) / steps;

  CrrR := StartR;
  CrrG := StartG;
  CrrB := StartB;

  for i := 0 to Steps do
    begin
      Canvas.Pen.Color := RGB(Round(CrrR), Round(CrrG), Round(CrrB));
      case Direction of
        dVert: begin
                 MoveToEx(Canvas.Handle,Rect.Left,i,nil);
                 LineTo(Canvas.Handle,Rect.Right + Rect.Left, i);
               end;
        dHorz: begin
                 MoveToEx(Canvas.Handle,i,Rect.Top,nil);
                 LineTo(Canvas.Handle,i,Rect.Top + Rect.Bottom);
               end;
      end;
      CrrR := CrrR + IncR;
      CrrG := CrrG + IncG;
      CrrB := CrrB + IncB;
    end;
end;

Larsi 17. Dez 2008 17:32

Re: Animierter Farbverlauf
 
Die hilft mir aber nicht weiter. Ich benutze die TJvGradient Komponente von den Jedis, die funkioniert auch super. Mir geht es um den Teil des Codes der die Farbe verändert.

DeddyH 17. Dez 2008 17:38

Re: Animierter Farbverlauf
 
Guck Dir den geposteten Code nochmal in Ruhe an, da werden auch Farben verändert.

Larsi 17. Dez 2008 17:45

Re: Animierter Farbverlauf
 
Ich brauch aber eine Funktion, die sich um das ändern der Farbe wie in deinem Beispiel ändert. Deine Funktion erstellt ja einen Farbverlauf. Den brauch ich ja nicht, das macht die JvGradient Komponente. Da muss ich der StartColor nur einen TColor Wert übergeben mehr nicht.

DeddyH 17. Dez 2008 17:51

Re: Animierter Farbverlauf
 
Herrgott, Larsi, ich habe doch hier bereits beschrieben, was zu tun ist, das hab ich in dem Beispiel nur umgesetzt. Wie willst Du etwas lernen, wenn man Dir alles vorkauen soll?

EWeiss 17. Dez 2008 17:56

Re: Animierter Farbverlauf
 
Dann geht nur mit einem vordefinierten Array wie willst sonst
bestimmen welche Farben angezeigt werden sollen und welche nicht ?

Du erstellst ein Array mit Farben und übergibst immer Stepweise die nächste Farbe aus diesen.
Anfangsfarbe wäre dann die welche du deiner komponente übergibst.

Beispiel von SoundMachine

Delphi-Quellcode:
procedure ColorInit;
begin
    gColor[1] := RGB(32,32,32);
    gColor[2] := RGB(0,44,233);
    gColor[3] := RGB(0,67,210);
    gColor[4] := RGB(0,89,187);
    gColor[5] := RGB(0,112,164);
    gColor[6] := RGB(0,135,142);
    gColor[7] := RGB(0,159,117);
    gColor[8] := RGB(0,183,88);
    gColor[9] := RGB(0,207,58);
    gColor[10] := RGB(0,231,29);
    gColor[11] := RGB(26,234,26);
    gColor[12] := RGB(52,237,23);
    gColor[13] := RGB(79,240,20);
    gColor[14] := RGB(105,243,17);
    gColor[15] := RGB(126,245,14);
    gColor[16] := RGB(147,248,11);
    gColor[17] := RGB(168,250,8);
    gColor[18] := RGB(189,253,5);
    gColor[19] := RGB(210,255,2);
    gColor[20] := RGB(233,255,0);
    gColor[21] := RGB(255,255,0);
    gColor[22] := RGB(255,251,0);
    gColor[23] := RGB(255,235,0);
    gColor[24] := RGB(255,215,0);
    gColor[25] := RGB(255,196,0);
    gColor[26] := RGB(255,176,0);
    gColor[27] := RGB(255,156,0);
    gColor[28] := RGB(253,137,0);
    gColor[29] := RGB(255,117,0);
    gColor[30] := RGB(255,97,0);
    gColor[31] := RGB(255,78,0);
    gColor[32] := RGB(255,58,0);
    gColor[33] := RGB(255,0,0);
end;
gruss Emil

Larsi 18. Dez 2008 12:14

Re: Animierter Farbverlauf
 
Wie muss ich die Prozedur aufrufen?

DeddyH 18. Dez 2008 12:16

Re: Animierter Farbverlauf
 
Delphi-Quellcode:
ColorInit;
:stupid:

taaktaak 18. Dez 2008 12:16

Re: Animierter Farbverlauf
 
Delphi-Quellcode:
ColorInit;
// :cry: shit

Larsi 18. Dez 2008 12:17

Re: Animierter Farbverlauf
 
Und wie übergebe ich den Farbwert? Wie könnte ich bspw. ein Panel so färben?

taaktaak 18. Dez 2008 12:18

Re: Animierter Farbverlauf
 
Du verwendest gColor[x]

Larsi 18. Dez 2008 12:22

Re: Animierter Farbverlauf
 
Und wie deklariere ich die Werte? Global all die Variablen oder geht das auch anders wenn ja wie?

taaktaak 18. Dez 2008 12:24

Re: Animierter Farbverlauf
 
Joo, sollte man wohl anders machen. Werte lokal in der Methode festlegen, daraus eine Funktion machen. Als Parameter den Index übergeben und als Ergebnis den Farbwert zurückliefern.

DeddyH 18. Dez 2008 12:24

Re: Animierter Farbverlauf
 
Einfach mal die Masse zwischen den Ohren einschalten. Du hast nun 2 mögliche Lösungsansätze, die musst Du Dir nur einmal in Ruhe anschauen und nachvollziehen, der Rest geht dann fast von alleine.

Larsi 18. Dez 2008 12:29

Re: Animierter Farbverlauf
 
Hab was gefunden:
Delphi-Quellcode:
var gcolor: array [0..33] of TColor;
Wie weise ich das jetzt dem Panel zu?

DeddyH 18. Dez 2008 12:33

Re: Animierter Farbverlauf
 
Wie weist man denn einem Panel eine Color zu? *Maaann Maaann*

Larsi 18. Dez 2008 12:38

Re: Animierter Farbverlauf
 
Habs hingekriegt :)

Die Muhkuh 18. Dez 2008 13:10

Re: Animierter Farbverlauf
 
:hello:

EWeiss 20. Dez 2008 10:36

Re: Animierter Farbverlauf
 
Zitat:

Zitat von Larsi
Habs hingekriegt :)

Hoffe du weist auch wie man andere Farben festlegt..
aber sonst top das du es geschaft hast. :-D

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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