Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FMX Komponente erstellen (https://www.delphipraxis.net/195236-fmx-komponente-erstellen.html)

franktron 14. Feb 2018 09:03

FMX Komponente erstellen
 
Ich habe mir jetzt auch Tokyo 10.2 zugelegt und möchte jetzt ein Projekt von VCL auf FMX umstellen,
dazu brauche ich eine Komponente die ich geschrieben habe (die Kompo malt eigentlich nur ein Bild)
wie kann ich das mit FMX machen.

himitsu 14. Feb 2018 09:57

AW: FMX Komponente erstellen
 
Ganauso wie bei der VCL?

Nur statt der Vorfahrenkomponente aus den Vcl.xyz-Units mußt du eben die aus den Fmx.xyz-Units verwenden.
Und dann den Code anpassen, da sich TCanvas und Co. im FMX so Einiges anders gemacht wird.

franktron 14. Feb 2018 09:57

AW: FMX Komponente erstellen
 
Und wie ist das mit der Canvas gibts die noch

himitsu 14. Feb 2018 10:00

AW: FMX Komponente erstellen
 
Zitat:

Zitat von himitsu (Beitrag 1393806)
Und dann den Code anpassen, da sich TCanvas und Co. im FMX so Einiges anders gemacht wird.

Hatte vorhin noch schnell einen Satz angehängt.

Ja, gibt es, aber ist halt ein bissl anders, von den Methodennamen und Farbkonstanten her.

franktron 16. Feb 2018 15:21

AW: FMX Komponente erstellen
 
Ich habe jetzt eine Komponente erstellt die aber leider nicht läuft.


Delphi-Quellcode:
TONLUrlaubsplaner = class(TControl)
.
.
procedure Paint; override;
.

procedure paint;
Begin
Canvas.BeginScene();
  Canvas.Stroke.Dash:=TStrokeDash.Solid;
  Canvas.Stroke.Color:=TAlphaColorRec.Black;
  Canvas.Fill.Color:=TAlphaColorRec.Red;
  Canvas.Fill.Kind:=TBrushKind.Solid;
  Canvas.Stroke.Thickness := 1;

  Canvas.DrawRect(RectF(0,0,Self.Width,Self.Height),0,0,
    AllCorners,1);

  Canvas.Fill.Color:=TAlphaColorRec.Null;

  Canvas.DrawRect(RectF(0,0,FUserWidth,ZH),0,0,
    AllCorners,1);

  Canvas.DrawLine(PointF(0,0),PointF(100,100),1);
  Canvas.EndScene;
end;
es zeigt sich nix also keine Linie oder eine Roter Kasten, waqs mach ich da falsch

jziersch 20. Feb 2018 08:25

AW: FMX Komponente erstellen
 
Das sollte schon zeichnen.

Wie erstellt Du denn die Komponente?

So gehts:

c := TONLUrlaubsplaner.Create(Self);
c.SetBounds(100,100,300,300);
c.Parent := Self;

Übrigens - wenn Du von einer speziellen Komponente ableitest, z.b. ScrollBox musst Du

function GetDefaultStyleLookupName: string; override;

verwenden um den style Namen auszuwählen, z.b.

function TWPMyControl.GetDefaultStyleLookupName: string;
begin
Result := 'scrollboxstyle';
end;

sonst ist die scrollbox keine.

Grüsse,
Julian

franktron 21. Feb 2018 09:41

AW: FMX Komponente erstellen
 
Zitat:

Zitat von jziersch (Beitrag 1394217)
Das sollte schon zeichnen.

Wie erstellt Du denn die Komponente?

Grüsse,
Julian

Ich schiebe es auf die Form, also im Designer nicht mit Create

Harry Stahl 21. Feb 2018 20:55

AW: FMX Komponente erstellen
 
Auf jeden Fall musst Du noch ergänzen mit

Delphi-Quellcode:
Canvas.Stroke.Kind := TBrushKind.Solid;


da Canvas.Stroke.Kind = "None" per Default ist (wurde irgendwann nach XE7 mal geändert, warum weiß ich nicht)

Davon abgesehen zeichnet Drawrect tatsächlich nur die Ränder.

Willst Du auch die Fläche mit Farbe füllen, musst Du (zusätzlich)

Delphi-Quellcode:
canvas.Fillrect (...);
verwenden.

Ich habe leider von Komponenten-Entwicklung keine Ahnung und kenne hier die konkrete Aufgabenstellung nicht, daher weiß ich nicht, warum es hier unbedingt eine eigene Komponente sein muss. Prinzipiell könntest Du hier eine schon vorhandene Komponente, z.B. die TPaintbox verwenden und im Onpainting-Event Deine Grafik zeichnen.

franktron 22. Feb 2018 08:32

AW: FMX Komponente erstellen
 
Danke Harry, ich hab es jetzt hin aber ein neues Problem-
Ich habe 2 Scroolbars in meiner Komponente erstellt

Delphi-Quellcode:
xxx = class(TRectangle)
private
  FS1,FS2: TScrollBar;
  ...

create
  FS1:=TScrollBar.Create(Self);
  FS2:=TScrollBar.Create(Self);
  FS1.Align:=TAlignLayout.Bottom;
  FS1.Orientation:=TOrientation.Horizontal;
  FS2.Align:=TAlignLayout.Right;
  FS2.Orientation:=TOrientation.Vertical;
  FS1.Parent:=Self;
  FS2.Parent:=Self;
Jetzt werden die in der FMX Form gespeichert (was ich nicht möchte)
Weil die beim Start des Programm dann doppelt sind.
Was kann ich da machen

jziersch 22. Feb 2018 10:36

AW: FMX Komponente erstellen
 
Du musst

FS1.Stored := false;
FS2.Stored := false;

aufrufen um das speichern zu vermeiden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Seite 1 von 2  1 2      

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