AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erweitert
Thema durchsuchen
Ansicht
Themen-Optionen

OOP-TRealEdit von TEdit abgeleitet und Fähigkeiten erweitert

Ein Thema von Hansa · begonnen am 9. Apr 2003 · letzter Beitrag vom 14. Aug 2003
Antwort Antwort
Seite 3 von 12     123 45     Letzte »    
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#21
  Alt 14. Apr 2003, 07:20
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. Welcher Moment ist wozu gekommen? Und womit soll ein SpinEdit arbeiten ? Was soll das überhaupt sein ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#22
  Alt 14. Apr 2003, 09: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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#23
  Alt 14. Apr 2003, 09:42
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...
Manuel Pöter
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#24
  Alt 14. Apr 2003, 09:44
Vielleich überzeugt das hier doch einige Ungläubige, 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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#25
  Alt 14. Apr 2003, 10:16
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:
FLabel := AOwner;
Manuel Pöter
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#26
  Alt 14. Apr 2003, 10: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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#27
  Alt 14. Apr 2003, 11:32
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..!
Muss natürlich so lauten:
FLabel.Parent := AOwner;
Manuel Pöter
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#28
  Alt 14. Apr 2003, 11: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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#29
  Alt 14. Apr 2003, 12:05
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...
Manuel Pöter
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#30
  Alt 14. Apr 2003, 12:43
Hi,

also ein SetParent scheint es nicht zu geben. Ich habe aber jetzt das Label "gefunden". 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.
Angehängte Dateien
Dateityp: doc dok6.doc (79,0 KB, 11x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 12     123 45     Letzte »    


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 22:15 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