![]() |
TRectangle ändert in D10.4 die Farbe nicht
Mal ein ganz triviales Problem:
in Delphi-FMX (Android-Platform) benutze ich u.a. ein Rectangle, das, wenn ich drauf tippe, kurz die Farbe wechseln soll. Quasi als primitive Animation, so dass man sieht, dass das Element auch tatsächlich angeklickt wurde.
Delphi-Quellcode:
Falsch kann der Code ja nicht sein - denn in Delphi 10.2 funzt das!var: rectangle: TRectangle; TForm1.rectangleClick(Sender: TObject); begin ... rectangle.Fill.Color := TAlphaColorRec.Green;// kurze Farbänderung sleep(500); rectangle.Fill.Color := TAlphaColorRec.White;// wieder die ursprüngliche Farbe setzen ... end; Aber jetzt benutze ich Delphi 10.4. Da funktioniert das leider nicht. Auch application.ProcessMessages vor und nach dem sleep() nutzt nichts. Gibt es für Delphi 10.4 vielleicht eine einfache Entsprechung? |
AW: TRectangle ändert in D10.4 die Farbe nicht
Delphi-Quellcode:
Aber besser, wenn man rausbekommt, wie man der Komponente oder der Form direkt sagen könnte "Das" jetzt zu machen.
procedure TForm2.Rectangle1Click(Sender: TObject);
begin Rectangle1.Fill.Color := TAlphaColorRec.Green; Rectangle1.Repaint; // male dich "demnächst" neu (hier wird sowas wie ein PostMessage+WM_PAINT abgesetzt) Application.ProcessMessages; // jetzt (und nun wird das verarbeitet) Sleep(2000); Rectangle1.Fill.Color := TAlphaColorRec.White; end; [add]
Delphi-Quellcode:
procedure TForm2.Rectangle1Click(Sender: TObject);
begin Self.Canvas.BeginScene; Rectangle1.Fill.Color := TAlphaColorRec.Green; Rectangle1.PaintTo(Self.Canvas, Rectangle1.UpdateRect, nil); // du willst nicht wissen, wie ich hierfür auf BeginScene gekommen bin. (Tipp: kommentiere mal BeginScene/EndScene aus) Self.Canvas.EndScene; Sleep(2000); Rectangle1.Fill.Color := TAlphaColorRec.White; end; |
AW: TRectangle ändert in D10.4 die Farbe nicht
Zitat:
![]() ![]() |
AW: TRectangle ändert in D10.4 die Farbe nicht
Ja vielen Dank, ich werde in dieser Richtung mal rumexperimentieren. Eigentlich ist das Programm ja schon fertig. Ich hatte es in Delphi 10.2 programmiert und auf Delphi 10.4 übertragen. Diese Primitiv-Ani war der einzige Punkt, der nur in 10.4 rumgezickt hat. Alles andere ist in Ordnung (oder sogar noch besser geworden).
|
AW: TRectangle ändert in D10.4 die Farbe nicht
Das mit der TColorAnimation war genau der richtige Tipp. Jetzt kann ich auch noch andere Komponenten damit beglücken. Vielen Dank nochmal.
|
AW: TRectangle ändert in D10.4 die Farbe nicht
Ich hab jetzt für mich die ideale Lösung gefunden. Hier ein kleines Beispiel für alle Interessierten:
Delphi-Quellcode:
unit Unit1;
interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Edit, FMX.Objects, FMX.Ani; type TForm1 = class(TForm) Rectangle1: TRectangle; Rectangle2: TRectangle; Rectangle3: TRectangle; procedure Rectangle2Click(Sender: TObject); procedure Rectangle1Click(Sender: TObject); procedure Rectangle3Click(Sender: TObject); private procedure ani(Sender: TObject; Color: TAlphaColor); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.Rectangle1Click(Sender: TObject); begin ani(Rectangle1,TAlphaColorRec.Red); end; procedure TForm1.Rectangle2Click(Sender: TObject); begin ani(Rectangle2,TAlphaColorRec.Green); end; procedure TForm1.Rectangle3Click(Sender: TObject); begin ani(Rectangle3,TAlphaColorRec.Blue); end; procedure TForm1.ani(Sender: TObject; Color: TAlphaColor); var origColor : TAlphaColor; begin if sender is TRectangle then begin // welche Farbe hatte TRectangle vor der Animation? origColor := (sender as TRectangle).Fill.Color; // set animation Color (sender as TRectangle).AnimateColor('Fill.Color', Color, 0.5, TAnimationType.InOut, TInterpolationType.Linear); // reset original Color (sender as TRectangle).AnimateColor('Fill.Color', origColor, 0.5, TAnimationType.InOut, TInterpolationType.Linear); end; end; end. |
AW: TRectangle ändert in D10.4 die Farbe nicht
Im FormDesigner, bei Fill.Color, die Liste aufklappen und gaaaaaaaaanz unten z.B. eine ColorAnimation erstellen.
Dort gibt es auch ein StartFromCurrent. * eine Animation mit dem selben Start- und End-Wert, aber mit einem Zwischenwert (also hin und zurück als eine Animation) * oder eine Animation mit AutoRevert, also anschließend wieder zurück zum Ausgangswert Nur bei Trigger "IsPressed=true" startet bei mir leider keine Animation, wenn ich mit der Maus draufdrück. |
AW: TRectangle ändert in D10.4 die Farbe nicht
Zitat:
|
AW: TRectangle ändert in D10.4 die Farbe nicht
OK, dann ist es nur etwas unpraktisch, dass es hier im Designer zur Auswahl steht. :freak:
|
AW: TRectangle ändert in D10.4 die Farbe nicht
Tipp:
Zitat:
und mußt dann in der Methode nichts prüfen oder casten. (macht der Compiler beim Aufruf der Funktion) TShape wegen dem .Fill, der Rest (AnimateColor) wäre schon ab TFmxObject verfügbar (also für praktisch alle Komponenten) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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