![]() |
AW: Delphi verändern
Liste der Anhänge anzeigen (Anzahl: 1)
@Harry Stahl gaaaaanz so komplex muss es nun auch nicht sein ;D
also ich kann hier mal ein Bsp ran hängen wie ich mir das ungefähr vorgestellt habe. Nur bei mir ist es halt noch nicht ganz "ausgereift" das kann man bestimmt noch kürzen oder optimieren. @Popov Ihr Quelltext ist (da ich noch Delphi Anfänger bin :D) echt kompliziert... Ich blicke da leider nicht ganz durch :/. Ich habe aber jetzt einige Tage frei und werde mal eine kleine Recherche betreiben und gucken ob mir Ihr Quelltext weiterhilft. Trotzdem schon jetzt mal ein großes Danke an alle Helfer mfg |
AW: Delphi verändern
Zitat:
Das "Problem" mit der TColor Farbe ist nicht, dass die Farbe Rot den Wert 255 hat und die Farbe Blau den Wert 16711680 und man mit einer For-Schleife einfach nur den Wert von dem einen zum anderen erhöhen muss, um einen Wechsel von rot zu blau zu bekommen. Das klappt nicht. Bei der Farbe TColor, die aus 4 Bytes besteht, wobei was 1 Byte eine spezielle Bedeutung hat, stehen die anderen drei Bytes für die drei RGB-Farben rot, grün und blau. Ein Byte für rot, ein für Grün, usw. Ein Byte kann zwischen 0 und 255 256 Zustände annehmen. Somit ist 0 0% rot und 255 100% rot. Dazwischen gibt es 256 Abstufungen. Kombiniert man alle drei Farben mit 256 Abstufungen, ergibt das 256 * 256 * 256 = 16.777.216 mögliche Farben. Um nun von einer Farbe zu anderen Zwischenschritte zu berechnen, muss man die TColor Farbe zuerst in die einzelnen RGB Farben zerlegen, die Zwischenschritte für jede einzelne Farbe berechnen, und dann alle drei wieder zu einer Zahl zusammenfügen. Der TColor Zahl. Und das passiert in der ColorMix Funktion. |
AW: Delphi verändern
In deinen Repeat until-Schleifen tut sich ja gar nichts.
statt
Delphi-Quellcode:
kannst du auch gleich schreiben
repeat
a:=a+1; until a>123;
Delphi-Quellcode:
; mehr macht diese Schleife nicht. Du muss innterhalb jeder dieser Repeat-Schleifen nochmal
a:=124
Delphi-Quellcode:
machen und die äußere Repeat-Schleife weglassen. Dann werden die RGB-Werte getrennt voneinander nacheinander aminiert geändert. Ist das so gewollt? Andernfalls muss du den Beitrag von Popov berücksichtigen.
Paintbox1.Canvas.Brush.Color:=rgb(a, b, c);
Paintbox1.Canvas.Pie(60, 160, 100, 200, 60, 180, 100, 180); sleep(10); Ein Timer wäre eleganter, aber so geht's auch. Denk aber dran, dass das Reagenzglas nochmal mit der aktuellen Farbe im OnPaint das Paintbox gemalt werden muss, sonst ist es weg, wenn dein Fenster mal verkleiner und wiederhergestellt wird. Noch ein par Tips: - Quelltext ist Text, wie der Name schon sagt, also postet man den auch als Text und nicht als Screenshot. - Wenn du schon Integer-Variablen für RGB-Werte hast, warum heißen die a,b,c und nicht r,g,b? - Lass das With weg. Später schreibst du ja Paintbox1.Canvas.Brush.Color sowieso aus, dann kannst du dir das with doch sparen. Ohne with weiß man immer genau, was gemeint ist. |
AW: Delphi verändern
Zitat:
Delphi-Quellcode:
Das würde ich nicht unbedingt als komplex berzeichnen:wink:. Aber man kann das natürlich auch auf die "harte Tour" machen, zum Lernen ist das sicher nicht verkehrt.
procedure TForm11.Button1Click(Sender: TObject);
begin ColorAnimation1.Enabled := false; ColorAnimation1.Enabled := true; end; procedure TForm11.ColorAnimation1Process(Sender: TObject); begin Ellipse1.Fill.Color := Rectangle2.Fill.Color; Ellipse4.Fill.Color := Rectangle2.Fill.Color; end; Zu Deiner Vorstellung für die VCL-Lösung: Du solltest das Zeichnen der Grafik im OnPaint-Event der Paintbox vornehmen. Denn was Du derzeit malst, ist nur "flüchtig" (minimiere mal nach dem Klick auf den Button das Formular, Deine Zeichnung ist dann verschwunden). Besser wäre es hier Variabeln anzulegen, diese in gewissen Zeitabständen zu aktualisieren und dann jeweils auch die Paintbox aktualisieren zu lassen. Und zu TColor hat Dir Popov gerade die entscheidenden Hinweise gegeben. |
AW: Delphi verändern
Hier etwas ganz simples. Noch einfacher geht es nicht:
Delphi-Quellcode:
Die Konstante Farben beinhaltet 10 Farben in einem Array. Die erste Farbe ist blau, die letzte ist rot. Die anderen Farben dazwischen sind Abstufungen. Dann nur noch die Farben in Reihe aufrufen.
procedure TForm1.Button1Click(Sender: TObject);
const Farben: array[0..9] of TColor = ($00FF0000, $00E6001A, $00CC0033, $00B2004C, $00990066, $00800080, $00660099, $004C00B2, $003300CC, $001A00E6); var i: Integer; begin for i := 0 to 9 do begin Panel1.Color := Farben[i]; Sleep(100); Application.ProcessMessages; end; end; Die Version verlangt am Anfang mehr Arbeit, da man die Farben erst von Hand berechnen muss, später ist es dafür ganz simpel. |
AW: Delphi verändern
Danke an alle für die vielen Versuche mir zu helfen!
Popov mir gefällt deine "ganz simple" Lösung echt gut ich werde die auch verwenden! mfg |
AW: Delphi verändern
Zitat:
|
AW: Delphi verändern
Wenn man es später aber evtl. für verschiedene Farben benötigt oder die Stufen feiner braucht, dann wird man es berechnen müssen.
|
AW: Delphi verändern
Zitat:
Denn Substanz A mit B gibt eine andere Farbübergangstabelle als A mit C oder B mit C oder B mit C und A. |
AW: Delphi verändern
Ok das macht Sinn.
Ich hatte es ursprünglich so verstanden, dass ein fließender Wechsel von Farbe A zu B gewünscht ist. Und das könnte man m.E. durch Zerlegung in Rot, Grün und Blau und prozentuale Annäherung zur Zielfarbe hin erreichen. [EDIT] Diesen fließenden Wechsel könnte man natürlich benutzen, um von einer Array-Farbe zur nächsten zu wechseln. Dann hätte man einen sehr fließenden optischen Farbwechsel und keine Farbsprünge. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:13 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-2025 by Thomas Breitkreuz