| Autor |
Beitrag |
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 12:30
Hi,
ich brauche eine Abstufung nach Farben. Sagen wir mal ich fange mit hell an und mache dann nach und nach alles etwas dunkler. Gerade soviel, daß man den Unterschied sieht. Ich habe jetzt mal clInfoBK als Anfangswert genommen. Addiere ich da 10 dazu wird es Schwarz. Also mache ich es nicht richtig. Und aus der Hilfe werde ich auch nicht recht schlau. Und Picasso bin ich auch nicht.
Moderiert von tommie-lie: Topic verschoben
_________________ Gruß
Hansa
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 12.07.03 13:36
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 13:52
Thx,
aber es geht um folgendes: ich muß einen Zahlenwert dazuaddieren / abziehen, also eine Konstante, um die Farbe zu ändern. Ich kann nicht hingehen und zu jeder Farbe den Wert aufschreiben und eingeben. Das ist übrigens nicht für ein Spiel oder so was, falls das jemand glaubt.
P.S.: sehe gerade, in dem Link geht es um einen Farbverlauf, ich brauche halt die Werte Farbe 1: hellgelb, Farbe 2 : etwas dunkler, Farbe 3: noch dunkler usw. D.h., ich fange mit einer Farbe an.
_________________ Gruß
Hansa
|
|
tommie-lie
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 12.07.03 14:55
ähh, wieso?
Wenn du von Gelb nach schwarz einen Verlauf machst, hast du auf der einen Seite gelb, dann ein wenig dunkler, noch dunkler, usw, bis letztendlich schwarz.
Ich hab' zwar den Code aus dem FAQ-Beitrag nicht ausprobiert, aber so sollte es zumindest theoretisch funktionieren, wenn ich den dazugehörigen Text richtig überflogen habe.
Nachtrag: Quellcode dazu gibt's auch, da kannst du dir anschauen wie man von einer Farbe zu anderen die dazwischenliegenden interpoliert.
_________________ Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 12.07.03 17:05
wie werst wenn du in einer for schleife die von hell anfängt bis hin zu schwars alles -10 nimmst oder was genau willst du damit erreichen ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 18:52
genau das will ich eben wissen. Wie soll ich das hinkriegen? Ich habe eine eigene Komponente und der will ich eine Farbe geben, allerdings anhand eines im OI einstellbaren Parameters. Das ist ein Feld, Ebene 1,2,3,4,5... Anhand der Zahl will ich die Farbe wählen. Also : Bei 1 Grundfarbe, die anderen etwas dunkler, je höher die Zahl ist.
_________________ Gruß
Hansa
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Sa 12.07.03 19:06
Also ich würde es so realisieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| function farbe (basisfarbe : integer; stufe :byte) : integer; var hexcol : string; r,g,b : integer; rn,gn,bn : integer; const factor = 10; begin hexcol := inttohex(basisfarbe,6); r := strtoint('$'+copy(hexcol,5,2)); g := strtoint('$'+copy(hexcol,3,2)); b := strtoint('$'+copy(hexcol,1,2)); rn := r-(factor*stufe); gn := g-(factor*stufe); bn := b-(factor*stufe); if rn < 0 then rn := 0; if gn < 0 then gn := 0; if bn < 0 then bn := 0; result := strtoint('$' + inttohex(bn,2) + inttohex(gn,2) + inttohex(rn,2)); end; |
Aufrufen könnte man das ganze dann z.b. so:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin form1.color := farbe(clred,3); end; |
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 19:58
Der Ansatz sieht plausibel aus, geht aber nicht.
_________________ Gruß
Hansa
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Sa 12.07.03 20:10
Was funzt daran denn nicht?
Meine Test mit den Farben clyellow und clred funzten ziemlich gut (habe dabei mithilfe einer Trackbar die Farbe meines Formulars verstellt...)
Oder was stört dich daran?
Edit: Mit clInfoBk ging es bei mir auch... bei der Farbe würde ich aber die Abstufungsbreite (in der prozedur als constant 10 angegeben) etwas niedriger einstellen, weil das ganze bereits bei Stufe 9 fast schwarz ist....... (Ok, alles eine Frage des Monitor-Kontrastes  )
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Sa 12.07.03 20:14
Man könnte das ganze auch so umgestalten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function farbe (basisfarbe : integer; stufe : integer) : integer; var hexcol : string; r,g,b : integer; rn,gn,bn : integer; begin hexcol := inttohex(basisfarbe,6); r := strtoint('$'+copy(hexcol,5,2)); g := strtoint('$'+copy(hexcol,3,2)); b := strtoint('$'+copy(hexcol,1,2)); rn := r-stufe); gn := g-stufe); bn := b-stufe); if rn < 0 then rn := 0; if gn < 0 then gn := 0; if bn < 0 then bn := 0; result := strtoint('$' + inttohex(bn,2) + inttohex(gn,2) + inttohex(rn,2)); end; |
Das würde am ehesten zu deiner Beschreibung "Zehn dazuzählen bzw. abziehen" passen, obgleich das in diesem Falle ja nur ne Minimale Änderung ausmacht :~/
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 20:18
Habe 3 genommen, also clInfo BK -3. Ergebnis : dunkelblau
_________________ Gruß
Hansa
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Sa 12.07.03 20:26
Hmmm?
ich kann den fehler irgendwie nicht nachfollziehen...
wenn ich meine erste Prozedur (in der zweiten habe ich im übrigen versehendlich drei klammern stehen gelassen.....) so aufrufe:
"farbe(clInfoBK,3);", dann kommt auch ein dunkelblau dabei raus... soll es doch auch... oder habe ich dich falsch verstanden?
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 20:35
| Mr_T hat folgendes geschrieben: | | ...ich im übrigen versehendlich drei klammern stehen gelassen.....) |
Das fiel mir schon auf, keine Angst. Weiß schon, wie die Syntax aussehen soll und verbessere das eben.
["quote="Mr_T"]...farbe(clInfoBK,3);", dann kommt auch ein dunkelblau dabei raus... soll es doch auch... oder habe ich dich falsch verstanden?[/quote]
Ja, das soll eben, wie der Titel sagt, schattiert sein. Damit meine ich: Oberste Ebene hell (ob gelb oder grün, rot, blau) und dann immer dunkler. Also der weiße Anteil. Und deshalb ist Dein Beispiel auch gut, weil Du alle drei RGB Farben veränderst.
_________________ Gruß
Hansa
|
|
Mr_T
      
Beiträge: 73
Win XP, Fedora Core RC 1
|
Verfasst: Sa 12.07.03 20:43
*Nun ralle ich gar nichts mehr*
Ich denke das Problem ist, dass ich nicht wirklich verstehe, was du mit Ebenen meinst....
Ich habe das ganze bislang so aufgefasst:
Du willst ne Kompo bauen, in der es verschiedene ebenen gibt - was diese Ebenen auch nun immer sein mögen - welche alle eine andere farbe verpasst bekommen sollen - undzwar eine verdunkelte Farbe von der Ausgangsfarbe....
Habe ich das nun richtig verstanden, oder nicht? Deine post irritieren mich leicht... erst soll mein Anzatz nicht gehen und dann soll eine Methode gut sein... *die Logik leider nicht sehe*
_________________ Es gibt 10 Arten Binäre Zahlen zu interpretieren: 0 und 1
Wer nicht kämpft, hat schon verloren!
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 12.07.03 20:52
mach mal am besten ein grafisches beispiel wie du das jetzt meinst, man könntes es auch anders lösen wenn du das meinst was Mr_t meint...
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 20:58
Was ist da nicht zu verstehen? Also gut, Holzhammermethode. Lege mal drei Forms in ein Projekt. Die erste soll hellgrün sein, die nächste etwas dunkler und die dritte nochmals dunkler. Da ich das über ca. 10 Stufen machen muß und für 250 Forms, habe ich eine eigene Komponente gebastelt die im OI ein entsprechendes Feld hat. Motzi sei Dank, der hat mir geholfen. Aber ich hänge nun an den Farben fest.
_________________ Gruß
Hansa
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 12.07.03 21:36
du willst also jedes formual dunklar machen. erstes from startet bei
Gelb und dann wird es immer dunkler oder wie genau ?
also jedes form hat dann ist dann dunkler.
werde mal selbst versuchen es hinzubekommen:)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
hansa 
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 12.07.03 21:42
Mimi hat es verstanden 
_________________ Gruß
Hansa
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 12.07.03 21:49
ok, werde mal sehe was ich hinbekomme... wenn ich dich wirklich verstanden habe....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 12.07.03 22:12
habej jetzt folgenden code eingetnlich müsste er funktionieren tut er aber nicht und ich weiß auch nicht warum:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| function Min(a, b: Longint): Longint; begin if a > b then Result := b else Result := a; end;
function Max(a, b: Longint): Longint; begin if a > b then Result := a else Result := b; end;
function GetHighlightColor(BaseColor: TColor): TColor; begin Result := RGB(Min(GetRValue(ColorToRGB(BaseColor)) + 64, 255), Min(GetGValue(ColorToRGB(BaseColor)) + 64, 255), Min(GetBValue(ColorToRGB(BaseColor)) + 64, 255)); end;
function GetShadowColor(BaseColor: TColor): TColor; begin Result := RGB(Max(GetRValue(ColorToRGB(BaseColor)) - 64, 0), Max(GetGValue(ColorToRGB(BaseColor)) - 64, 0), Max(GetBValue(ColorToRGB(BaseColor)) - 64, 0)); end;
procedure ShowForms; var i:Integer; begin for i:=0 to Screen.FormCount -1 do begin Screen.Forms[i].Show; if i >= 1 then begin Screen.Forms[i-1].Color:=GetShadowColor(Screen.Forms[i-1].Color); end; end;
end;
procedure TForm1.FormShow(Sender: TObject); begin ShowForms end; |
wenn du jetzt nach .show also in der if abfrage die showmessage einbaust sieht du es aber nur in einem form, wo ist da der fehler ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|