Delphi-PRAXiS
Seite 3 von 12     123 45     Letzte »    

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 OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erweitert (https://www.delphipraxis.net/3975-oop-trealedit-von-tedit-abgeleitet-und-faehigkeiten-erweitert.html)

Hansa 14. Apr 2003 06:20

Zitat:

Zitat von Nailor
...aber jetzt ist der Moment gekommen...noch jemand ein SpinEdit so umbastelt, dass es damit arbeitet...

Anscheinend bist Du tatsächlich der erste, der das Original-Orakel in Delphi gefunden hat. :mrgreen: Welcher Moment ist wozu gekommen? Und womit soll ein SpinEdit arbeiten ? Was soll das überhaupt sein ?

Hansa 14. Apr 2003 08:11

So ich habe das ganze jetzt noch um ein Label erweitert:

Code:
type
  TRealEdit = class(TEdit)
  private
    fAlignment:TAlignment;
    fOnlyReals:boolean;
    fLabel:TLabel;
    procedure SetAlignment(Value:TAlignment);
    procedure SetOnlyReals(Value:boolean);
  protected
    procedure SetLabel(Value:TLabel);
    procedure CreateParams(var Params:TCreateParams); override;
    procedure KeyPress(var Key:Char); override;
  public
    constructor Create(AOwner: TComponent); override;
    destructor destroy; override;
  published
    property Alignment: TAlignment read fAlignment write SetAlignment;
    property OnlyReals: Boolean read fOnlyReals write SetOnlyReals;
    property RealLabel: TLabel read fLabel write SetLabel;
  end;

implementation

procedure TRealEdit.SetLabel (Value : TLabel);
  begin
    fLabel := value;
    flabel.SetSubComponent(true);
  end;

constructor TRealEdit.Create(AOwner: TComponent);
begin
  inherited;
  FAlignment := taRightJustify;
  OnlyReals := true;
  FLabel := TLabel.Create(AOwner);
  FLabel.Caption := 'CAPTION';
end;

destructor TRealEdit.Destroy;
  begin
    FLabel.Destroy;
    inherited;
  end;
Die Caption ist explizit gesetzt als CAPTION und steht so auch im OI. Der Haken an der Sache ist aber, daß das Label zwar offensichtlich existiert, aber nirgends in Erscheinung tritt. Das hängt irgendwo im Nirwana. Wieso das ?

Motzi 14. Apr 2003 08:42

Zitat:

Zitat von Hansa
Der Haken an der Sache ist aber, daß das Label zwar offensichtlich existiert, aber nirgends in Erscheinung tritt. Das hängt irgendwo im Nirwana. Wieso das ?

Weil du den Parent für das Label nicht gesetzt hast... :roll: ;)

Hansa 14. Apr 2003 08:44

Vielleich überzeugt das hier doch einige Ungläubige, :shock: die nicht sehen, wie wichtig das Thema ist. Das Label kriegt man auch so hin : man leitet statt von TEdit von TLabeledEdit ab. In die USES Liste muß dann noch "ExtCtrls" rein. Mir selber nutzt das aber nichts, da das ganze letzenendes mit einem TDBedit funktionieren muß und ein TDBLabeledEdit gibts nicht.
http://www.lcschuhmann.de/hornet/meckersmilie.gif

@Motzi: Hast Du das getestet ? Bei mir steht alles, was mit Parent zu tun hat auf true.

Motzi 14. Apr 2003 09:16

Zitat:

Zitat von Hansa
@Motzi: Hast Du das getestet ? Bei mir steht alles, was mit Parent zu tun hat auf true.

Ich kann momentan nix testen.. aber ich bin mir ziemlich sicher!
Füg einfach diese Zeile in deinem constructor dazu:
Delphi-Quellcode:
FLabel := AOwner;

Hansa 14. Apr 2003 09:24

Flabel ist doch vom Typ TLabel und Aowner ist TComponent. Wie soll das gehen ? Das meint auch der Compiler. Mittlerweile vermute ich aber auch, daß das an so was liegt. Irgendwie muß ich ja das Label an das Edit dranhängen.

Motzi 14. Apr 2003 10:32

Zitat:

Zitat von Hansa
Flabel ist doch vom Typ TLabel und Aowner ist TComponent. Wie soll das gehen ? Das meint auch der Compiler. Mittlerweile vermute ich aber auch, daß das an so was liegt. Irgendwie muß ich ja das Label an das Edit dranhängen.

Oops.. hab mich in der Eile vertan..! :oops:
Muss natürlich so lauten:
Delphi-Quellcode:
FLabel.Parent := AOwner;

Hansa 14. Apr 2003 10:53

soweit war ich auch schon. Dann kommt aber:

inkompatiple Typen : TWinControl und TComponent

Das einzige was geht ist :
Code:
FLabel := TLabel.Create(AOwner);
So wars ja vorher auch schon. Das Label bleibt verschwunden.

P.S.: Ich habe mal das TLabeledEdit mit dem hier verglichen, dabei fiel mir auf, daß das im OI fast gleich aussieht. Bei dem Standard-Editlabel steht in der Zeile Editlabel als Wert LabeledEdit1.Sublabel, bei "meinem" steht nichts.

Motzi 14. Apr 2003 11:05

Zitat:

Zitat von Hansa
soweit war ich auch schon. Dann kommt aber:

inkompatiple Typen : TWinControl und TComponent

Achja.. ist eigentlich auch klar... na dann hilft eigentlich nur ein Typecast auf TWinControl - ist aber auch unschön.

Am besten wäre es die SetParent-Methode des Edits zu überschreiben um damit auf ein setzen des Parents des Edits reagieren zu können und den Parent des Labels entsprechend zu korrigieren. Ich weiß allerdings nicht, ob die SetParent-Methode als private oder protected deklariert ist und virtual bzw dynamic oder eben static ist... Überschreiben ginge nur wenn sie im protected-Teil und als virtual oder dynamic deklariert ist...

Eine andere Möglichkeit (über schön oder unschön lasst sich hier streiten) wäre ein eigenes property Parent einzuführen, womit das original Property Parent verdeckt wird. In diesem Fall hat man dann seine eigenen Get/Set-Methoden über die man Zugriffe steuern kann und kann aber intern über inherited auch auf das Original-Property Parent zurückgreifen...

Hansa 14. Apr 2003 11:43

Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

also ein SetParent scheint es nicht zu geben. Ich habe aber jetzt das Label "gefunden". :mrgreen: Das hängt oben links in der Ecke. Bei Object-Treeview war noch ein <component [1]> drin. Klickt man das an, dann sieht man was. Nee, das wird zu kompliziert zu erklären, ich hänge den Bildschirm hier dran. Will ich das Label da wegziehen, kommt ein Fehler, den hänge ich auch noch dran, vielleicht weiß jemand was damit anzufangen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
Seite 3 von 12     123 45     Letzte »    

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