Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Hintergrundfarbe eines Objekts stetig ändern (https://www.delphipraxis.net/84122-hintergrundfarbe-eines-objekts-stetig-aendern.html)

dadark 11. Jan 2007 16:53


Hintergrundfarbe eines Objekts stetig ändern
 
Hallo!
Wir arbeiten in der Schule im Moment mit Delphi, und da es stinkelangweilig ist, muss ichs mir irgendwie interessanter machen :p
Die Idee der letzten Stunde war, die Hintergrundfarbe der ListBox in der wahnsinnig spannende Berechnungen standen, ständig wechseln zu lassen.

Mein Ansatz war (nachdem ich im Internet schon ein wenig recherchiert hatte) in etwa dieser hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  while true do begin
    ListBox1.Color := clRed;
    ListBox1.Refresh;
    sleep(500);
    ListBox1.Color := clBlue;
    ListBox1.Refresh;
    sleep(500);
    Application.ProcessMessages;
  end;
end;
Wenigstens mit Lazarus unter Linux tut das aber nicht (ich konnte es in der Schule in der Version noch nicht ausprobieren, wollte aber zu Hause mal schauen obs klappt), sondern hängt nur.
Seht ihr einen Fehler?

Vielen Dank schonmal
Pascal

[edit=SirThornberry]Code-Tags durch Delphi-Tags ersetzt - Mfg, SirThornberry[/edit]

ste_ett 11. Jan 2007 16:58

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Zitat:

Zitat von dadark
... tut das aber nicht ...

Gehts etwas genauer? :)

dadark 11. Jan 2007 17:00

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Hast du den Satz zuende gelesen? :p
Wie schon gesagt, er hängt halt, es passiert garnix und ich muss den Prozess killen, weil ich ihn auch nicht mehr normal beenden kann.
Er reagiert einfach nicht mehr.

TurboMartin 11. Jan 2007 17:28

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Mit Sleep hällst du doch gie ganze Anwendung an?!
Wie wäre es mit DelayDelay?

dr. love 12. Jan 2007 11:54

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Ich würd nen Timer nehmen! Der wechselt dann ganz automatisch nach einer von dir bestimmten Zeit (Interval) immer wieder die Farbe des Editfeldes. Also z.B. rot, grün, blau, gelb,...
eleganter wäre natürlich ein dynamischer farbübergang, also etwas, wo man die einzelfarben gar nicht sieht, sonder nur den übergang vom roten ins blaue oder so, quasi ne farbüberblendung... dann müsstest du schleifen bauen in denen stetig die rgb werte verändert werden... also wenn du da bedarf hast sag nochma bescheid... will jetz auch nich ewig posten un dann interessierts nich

daschaos 23. Mai 2007 16:40

Re: Hintergrundfarbe eines Objekts stetig ändern
 
hey, daran hätte ich großes Interesse :-D

Prototypjack 23. Mai 2007 16:47

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Moin,

(Mal abgesehen davon, dass ich von Farb-Wechselnden Eingabeelementen nichts halte).

Das mit den "weichen" Farbänderungen kannst du erreichen, indem du die Differenzen der Farben errechnest und dabei einen Alpha-Wert benutzt, diesen dann in einem regelmäßigen Intervall inkrementierst. (0..10..20 usw.)
Dann kommst bei jedem Intervall der Ziel-Farbe näher und schließlich nimmt das Feld die Zielfarbe selbst an, das ganze kann leicht über Timer (Wenn du willst, ist hier wohl der einfachste und problemloseste Weg) realisieren.

Wie du das machst, entnimmst du am besten der Forumssuche mit dem Suchwort "Alpha*", ich bin mir ziemlich sicher, dass es dazu schon einmal was zu lesen gab.

Gruß,
Max

shmia 23. Mai 2007 17:42

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Nach jedem .Refresh müssen Paint-Message von Windows mit ProcessMessages verarbeitet werden.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
  xcolor : TColor;
begin
  xcolor := clRed;
  for i:=0 to 50 do
  begin
    ListBox1.Color := xcolor;
    ListBox1.Refresh;
    Application.ProcessMessages;
    // Farbe ändern
    case xcolor of
       clRed: xcolor := clGreen;
       clGreen: xcolor := clblue;
       clBlue: xcolor := clRed;
    end;
    Sleep(200);
    if Application.Terminated then Exit;
  end;
end;

SirThornberry 23. Mai 2007 17:45

Re: Hintergrundfarbe eines Objekts stetig ändern
 
diese Variante ist in dem Fall nicht praktikabel weil die Berechnung dann nicht weiter ausgeführt wird.

daschaos 24. Mai 2007 08:49

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Mir gehts auch nich so sehr um eine wechselnde Hintergrundfarbe für Buttons, sondern vielmehr um eine Idee, wie ich Farben irgendwie sinnvoll inkrementieren kann. Ich zeichne eine Treemap und ich würde gerne haben, das jedes Rechteck eine andere Farbe hat...

shmia 24. Mai 2007 10:08

Re: Hintergrundfarbe eines Objekts stetig ändern
 
Zitat:

Zitat von daschaos
... sondern vielmehr um eine Idee, wie ich Farben irgendwie sinnvoll inkrementieren kann. Ich zeichne eine Treemap und ich würde gerne haben, das jedes Rechteck eine andere Farbe hat...

Code-Library: Farbverlauf berechnen


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 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 by Thomas Breitkreuz