AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRectangle ändert in D10.4 die Farbe nicht

Ein Thema von dynamo · begonnen am 10. Apr 2023 · letzter Beitrag vom 12. Apr 2023
Antwort Antwort
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#1

TRectangle ändert in D10.4 die Farbe nicht

  Alt 10. Apr 2023, 16:51
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:

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;
Falsch kann der Code ja nicht sein - denn in Delphi 10.2 funzt das!
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?
Jörg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#2

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 10. Apr 2023, 18:27
Delphi-Quellcode:
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;
Aber besser, wenn man rausbekommt, wie man der Komponente oder der Form direkt sagen könnte "Das" jetzt zu machen.


[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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (10. Apr 2023 um 18:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#3

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 10. Apr 2023, 21:16
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.
Kann man das nicht mit einer TColorAnimation oder TColorKeyAnimation machen? Für den Trigger bietet sich IsPressed an und mit AutoReverse und einer passenden Duration sollte das doch hinzubekommen sein.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 10. Apr 2023, 22:04
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).
Jörg
  Mit Zitat antworten Zitat
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 10. Apr 2023, 23:26
Das mit der TColorAnimation war genau der richtige Tipp. Jetzt kann ich auch noch andere Komponenten damit beglücken. Vielen Dank nochmal.
Jörg
  Mit Zitat antworten Zitat
dynamo

Registriert seit: 21. Okt 2008
Ort: Bordesholm
37 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 11. Apr 2023, 14:08
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.
Jörg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#7

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 11. Apr 2023, 16:02
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Apr 2023 um 16:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#8

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 11. Apr 2023, 16:24
Nur bei Trigger "IsPressed=true" startet bei mir leider keine Animation, wenn ich mit der Maus draufdrück.
Laut Doku wird IsPressed nur von TCustomButton, TRadioButton, TCheckBox und TThumb unterstützt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#9

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 11. Apr 2023, 18:00
OK, dann ist es nur etwas unpraktisch, dass es hier im Designer zur Auswahl steht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#10

AW: TRectangle ändert in D10.4 die Farbe nicht

  Alt 12. Apr 2023, 13:47
Tipp:

Zitat:
procedure ani(Sender: TObject; Color: TAlphaColor);
Statt TObject kannst du auch TRectangle oder TShabe benutzen (somit auch für die anderen Figuren)
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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz