Autor Beitrag
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. :lol:

Moderiert von user profile icontommie-lie: Topic verschoben

_________________
Gruß
Hansa
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: Sa 12.07.03 19:06 
Also ich würde es so realisieren:

ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 12.07.03 19:58 
Der Ansatz sieht plausibel aus, geht aber nicht.

_________________
Gruß
Hansa
Mr_T
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: Sa 12.07.03 20:14 
Man könnte das ganze auch so umgestalten:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 12.07.03 20:18 
Habe 3 genommen, also clInfo BK -3. Ergebnis : dunkelblau

_________________
Gruß
Hansa
Mr_T
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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. :lol:

["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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 73

Win XP, Fedora Core RC 1

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 12.07.03 21:42 
Mimi hat es verstanden :lol:

_________________
Gruß
Hansa
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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)) + 64255), 
    Min(GetGValue(ColorToRGB(BaseColor)) + 64255), 
    Min(GetBValue(ColorToRGB(BaseColor)) + 64255)); 
end


function GetShadowColor(BaseColor: TColor): TColor; 
begin 
  Result := RGB(Max(GetRValue(ColorToRGB(BaseColor)) - 640), 
    Max(GetGValue(ColorToRGB(BaseColor)) - 640), 
    Max(GetBValue(ColorToRGB(BaseColor)) - 640)); 
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
//      ShowMessage(IntTostr(i));
      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...."