Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   FMX bunte Linien zeichnen .... Random Farbwert (https://www.delphipraxis.net/205242-fmx-bunte-linien-zeichnen-random-farbwert.html)

bernhard_LA 17. Aug 2020 14:05


FMX bunte Linien zeichnen .... Random Farbwert
 
Liste der Anhänge anzeigen (Anzahl: 1)
was ich machen möchte ist klar, alles in FMX .


mit der auskommentierten Version kann ich zumindest mal einfarbige Linien zeichnen,
wenn ich das Brush create in die schliefe einsetze und mir mit cardinal (Random(5000))
einen zufälligen Farbwert erzeugen möchte kommt nix mehr, das Zeichenblatt bleibt leer :-(

ach ja , und Brush.Kind := bkSolid; bzw. Brush.Kind := Solid; lässt sich auch nicht compilieren .... FMX.graphics ist eingebunden



Delphi-Quellcode:
var
  p1, p2: TPointF;
  i, j: Integer;
  Brush: TStrokeBrush;
begin
  // sets the ends of the line to be drawed

 // Brush:=TStrokeBrush.Create(TBrushKind.Solid, TAlphaColors.red);
 // Brush.Thickness := 2;
  for i := 1 to 100 do
  begin
    Brush := TStrokeBrush.Create(TBrushKind.Solid, cardinal (Random(5000)) );
    Brush.Thickness := 2;
   // Brush.Kind := bkSolid;
    p1 := TPointF.Create(2, 2);
    p2 := TPointF.Create(Random(400), Random(400));
    localBMP.Canvas.BeginScene;
    image1.Bitmap.Canvas.Stroke.Color := Random(60000);
    // drawa the line on the canvas
    localBMP.Canvas.DrawLine(p1, p2, 1, Brush);
    localBMP.Canvas.EndScene;



    LoadBMP2GUI(nil);

    Brush.Free;

  end;
end;

Sherlock 17. Aug 2020 14:34

AW: FMX bunte Linien zeichnen .... Random Farbwert
 
Lustigerweise heisst in FMX so ziemlich alles anders als gewohnt...klingt aber ähnlich, so daß man sich nie sicher sein kann, ob es nun stimmt. Aber ich male auch Linien in FMX, mal sehen, wie das bei mir zur Zeit umgesetzt ist.

Delphi-Quellcode:
  aBMP.Canvas.Stroke.Color := TAlphaColors.Pink; // Definiert als Pink = Alpha or TAlphaColor($FFC0CB)

{$IF CompilerVersion >= 32.0} // >= Tokyo
  aBMP.Canvas.Stroke.Thickness := 1;
{$ELSE}
  aBMP.Canvas.StrokeThickness := 1;
{$ENDIF}
  aBMP.Canvas.Stroke.Dash := TStrokeDash.Solid;
  aBMP.Canvas.DrawLine(Pointf(0, 0), Pointf(aBMP.Width, aBMP.Height), 1);
Zu setzen ist also die Stroke Property des Canvas.

Sherlock

Rollo62 17. Aug 2020 14:44

AW: FMX bunte Linien zeichnen .... Random Farbwert
 
Delphi-Quellcode:
cardinal (Random(5000)
In FMX ist TAlphaColor immer mit Alphakanal definiert.
Der ist bei deinem Beispiel wohl 0, also immer transparent.

Besser man nutzt immer TAlphaColorRec dafür.

bernhard_LA 18. Aug 2020 08:56

AW: FMX bunte Linien zeichnen .... Random Farbwert
 
Liste der Anhänge anzeigen (Anzahl: 1)
aktuelle Lösung :


Delphi-Quellcode:
function randomColor: TColor;
var
  rec: TAlphaColorRec;
begin
  with rec do
  begin

    A := random(255);
    R := random(255);
    G := random(255);
    B := random(255);
  end;

  Result := rec.Color;
end;

procedure TForm1.btn_draw_linesClick(Sender: TObject);
var
  p1, p2: TPointF;
  i, j: Integer;
  Brush: TStrokeBrush;

begin

  for i := 1 to 100 do
  begin

    Brush := TStrokeBrush.Create(TBrushKind.Solid, randomColor);
    Brush.Thickness := 2;
    // Brush.Kind := Solid;
    p1 := TPointF.Create(2, 2);
    p2 := TPointF.Create(random(400), random(400));

    localBMP.Canvas.BeginScene;

    // draw lines on the canvas

    localBMP.Canvas.DrawLine(p1, p2, 1, Brush);

    localBMP.Canvas.EndScene;

    LoadBMP2GUI(nil);

    Brush.Free;

  end;
end;

himitsu 18. Aug 2020 14:06

AW: FMX bunte Linien zeichnen .... Random Farbwert
 
Man kann sogar versuchen Compiler und ErrorInsight und Co. mal richtig zu ärgern. :lol:
Delphi-Quellcode:
const VerTokyo = 32.0;
{$IF CompilerVersion >= VerTokyo} {$DEFINE CanvasDot} {$ENDIF}


aBMP.Canvas.{$IF CompilerVersion >= VerTokyo}Stroke.Thickness{$ELSE}StrokeThickness{$ENDIF} := 1;

// bzw, aber ich glaub das geht nicht

aBMP.Canvas.Stroke{$IF CompilerVersion >= VerTokyo}.{$ENDIF}Thickness := 1;

aBMP.Canvas.Stroke{$IFDEF CanvasDot}.{$ENDIF}Thickness := 1;

Besser Schöner wäre hier aber bestimmt ein Class-Helper für TCanvas,
wo man das nur an einer Stelle nachrüstet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:06 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf