Einzelnen Beitrag anzeigen

paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#14

AW: Radieren/Freilegen von Bildern mit FMX

  Alt 31. Jul 2019, 09:31
Hallo striderx,

ich konnte folgende mir unverständliche Reaktion feststellen:
Gegeben:
TImage, 3x TButton.

Folgender Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create(241, 425);

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Black;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create(Image1.Bitmap.Width, Image1.Bitmap.Height);

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Red;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  MyRect: TRectF;
begin
  Image1.Bitmap.Clear($FFFFFF);
  // initializes the image bitmap canvas
  Image1.Bitmap := TBitmap.Create;

  Image1.Bitmap.Clear($FFFFFF);
  // sets the rectangle to be drawn
  MyRect := TRectF.Create(0, 0, 241, 425);
  // fills and draws the rectangle on the canvas
  Image1.Bitmap.Canvas.BeginScene;
  Image1.Bitmap.Canvas.Fill.Color := TAlphaColors.Green;
  Image1.Bitmap.Canvas.FillRect(MyRect, 0, 0, AllCorners, 1);
  Image1.Bitmap.Canvas.EndScene;
Folgendes Verhalten in folgender Reihenfolge ist festzustellen:
Betätigen des Button1 = schwarzes Rechteck | O.k.
Betätigen des Button2 = rotes Rechteck | O.K
Betätigen des Button3 = löschen des roten Rechtecks(richtig wäre grünes Rechteck)

Erneutes Betätigen des Button2 = keine sichtbare Reaktion
Erneutes Betätigen des Button1 = schwarzes Rechteck |O.k.

Während das schwarze Rechteck jederzeit aufgerufen werden kann, wird das rote Rechteck nur gezeichnet, wenn vorher nicht Button3 betätigt wurde.

Hat jemand eine Idee, aus welchem Grund diese Verhalten auftritt?
Konnte man früher in Delphi die Komponenten nicht Positionieren, also z.B. 30px vom Rand, nächste Komponente 30px von erster Komponente usw.?

Gruß
  Mit Zitat antworten Zitat