![]() |
Einfaches abgeleitetes Control unter FMX / Delphi 11
Hallo Zusammen,
ich versuche gerade ein einfaches Control von TRectangle abzuleiten.
Delphi-Quellcode:
klappt auch soweit, aber ich habe 2 Probleme:
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. 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:
Wenn ich das Formular speichere, schließe und wieder öffne, dann wird beim Anklicken des neuen Controls
Form1
AppImageButtonTest1 das intern erstellte TImage angezeigt als "<unbenannt> TImage". In der Strukturansicht sieht das dann so aus:
Delphi-Quellcode:
in der VCL taucht ein intern in dem Parent Control erzeugtes anderes Control (mit Owner = Self) nirgends
Form1
AppImageButtonTest1 <Komponenten[I]> MultiResBitmap auf. Wie bekomme ich das unter FMX (Designtime) auch hin ? Grüße Thomas |
AW: Einfaches abgeleitetes Control unter FMX / Delphi 11
Hallo Nochmal,
das mit dem sichtbaren TImage konnte ich wie folgt lösen:
Delphi-Quellcode:
Aber die TTextSettings funktionieren immer noch nicht. Muss ich da noch einen Editor
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; registrieren ? Wenn ja, wie ? Grüße Thomas |
AW: Einfaches abgeleitetes Control unter FMX / Delphi 11
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 :stupid: |
AW: Einfaches abgeleitetes Control unter FMX / Delphi 11
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz