AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Einfaches abgeleitetes Control unter FMX / Delphi 11
Thema durchsuchen
Ansicht
Themen-Optionen

Einfaches abgeleitetes Control unter FMX / Delphi 11

Ein Thema von friedt99 · begonnen am 8. Nov 2021 · letzter Beitrag vom 12. Nov 2021
Antwort Antwort
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#1

Einfaches abgeleitetes Control unter FMX / Delphi 11

  Alt 8. Nov 2021, 19:27
Hallo Zusammen,

ich versuche gerade ein einfaches Control von TRectangle abzuleiten.

Delphi-Quellcode:
unit itfAppControls;

interface

uses
  System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Objects,FMX.StdCtrls,
  System.UITypes,FMX.MultiResBitmap,FMX.Graphics;

type
  TAppImageButtonTest = Class(TRectangle)
  private
    ccImage:TImage;
    ccImageTextSettings:TTextSettings;

    procedure SetImageTextSettings(pcValue:TTextSettings);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property ImageTextSettings:TTextSettings read ccImageTextSettings write SetImageTextSettings;
  End;

procedure Register;

implementation

//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Imagebutton Compound
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
constructor TAppImageButtonTest.Create(AOwner: TComponent);
begin
  Inherited;
  ccImageTextSettings:=TTextSettings.Create(Self);

  ccImage:=TImage.Create(Self);
  ccImage.Parent:=Self;
  ccImage.Align:=TAlignLayout.Client;
  ccImage.HitTest:=FALSE;
end;

destructor TAppImageButtonTest.Destroy;
begin
  ccImageTextSettings.Free;
  ccImage.Free;
  Inherited;
end;

procedure TAppImageButtonTest.SetImageTextSettings(pcValue:TTextSettings);
begin
  ccImageTextSettings.Assign(pcValue);
end;

procedure Register;
begin
  RegisterComponents('Sample', [TAppImageButtonTest]);
end;

end.
klappt auch soweit, aber ich habe 2 Probleme:

1.)
Die Eigenschaft ImageTextSettings wird im Objektinspektor angezeigt, klappt aber nicht auf.
Das verstehe ich nicht. TTextSettings stammt von TPersistent ab, sollte doch also im
Objektinspektor editierbar sein.

2.)
Wenn ich das Control auf ein Formular setze ist alles OK (bis auf die ImageTextSettings).
In der Strukturansicht sieht das so aus:

Delphi-Quellcode:
Form1
   AppImageButtonTest1
Wenn ich das Formular speichere, schließe und wieder öffne, dann wird beim Anklicken des neuen Controls
das intern erstellte TImage angezeigt als "<unbenannt> TImage". In der Strukturansicht sieht das dann so aus:

Delphi-Quellcode:
Form1
   AppImageButtonTest1
       <Komponenten[I]>
             MultiResBitmap
in der VCL taucht ein intern in dem Parent Control erzeugtes anderes Control (mit Owner = Self) nirgends
auf. Wie bekomme ich das unter FMX (Designtime) auch hin ?

Grüße

Thomas

Geändert von friedt99 ( 8. Nov 2021 um 19:39 Uhr)
  Mit Zitat antworten Zitat
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#2

AW: Einfaches abgeleitetes Control unter FMX / Delphi 11

  Alt 8. Nov 2021, 20:14
Hallo Nochmal,

das mit dem sichtbaren TImage konnte ich wie folgt lösen:

Delphi-Quellcode:
constructor TAppImageButton.Create(AOwner: TComponent);
begin
  Inherited;
  ccImageTextSettings:=TTextSettings.Create(Self);

  ccImage:=TImage.Create(Self);
  ccImage.Parent:=Self;
  ccImage.Align:=TAlignLayout.Client;
  ccImage.HitTest:=FALSE;
  ccImage.Stored:=FALSE; //<-Das hier verhindert das sichtbare TImage

  Stroke.Kind:=TBrushKind.None;
  Fill.Color:=TAlphaColors.Gray;
end;
Aber die TTextSettings funktionieren immer noch nicht. Muss ich da noch einen Editor
registrieren ? Wenn ja, wie ?

Grüße

Thomas
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfaches abgeleitetes Control unter FMX / Delphi 11

  Alt 9. Nov 2021, 07:32
Das löst jetzt nicht Dein Problem, aber eigene CustomControls anlegen mache ich kaum noch.
Genau wegen solcher Probleme und Gefrickel.

Es ist für mich viel einfacher und schneller einen TFrame mit allem was beötigt wird visuell zu erstellen,
und dann als Komponente per Runtime zu benutzen.
Ich nutze auch verschachtelte, solcher TFrames, und kann so ziemlich komplexe "Controls" aufbauen.
Die CustomControls ableiten hat für mich kaum noch Sinn, denn da kann man ja nur schwer sehr komplexe
Dinge reinbringen, die stürzen schonmal gerne mit IDE ab, die müssen immer vorher in die IDE geladen werden, bei IDE-Update müssen die erstmal wieder portiert werden, usw.

Jede Menge Generve und Gefrickel, was ich mit einfachen TFrames per Runtime gar nicht mehr habe,
und diese sogar einfach visuell bearbeiten kann.
An der Stelle wo Du jetzt stehst wäre das eine Überlegung Wert
  Mit Zitat antworten Zitat
friedt99

Registriert seit: 17. Mär 2010
45 Beiträge
 
#4

AW: Einfaches abgeleitetes Control unter FMX / Delphi 11

  Alt 12. Nov 2021, 22:05
Hallo Zusammen,

das mit den TTextSettings konnte ich lösen. Hatte übersehen, das da keine
published properties sind. Habe nun eine eigene Klasse von TTextSettings
abgeleitet, die die erforderlichen Eigenschaften als published definiert.
Damit erscheinen diese auch um Objektinspektor.

Delphi-Quellcode:
TAppTextSetting = Class(TTextSettings)
  private
  public
  published
    property Font;
    property FontColor;
    property HorzAlign;
    property VertAlign;
    property WordWrap;
    property Trimming;
  End;
  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 09:41 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