![]() |
MaxLength-Eigenschaft in Komponente integrieren
Hallo und guten Tag an alle DP´ler,
Ich überarbeite gerade eine meiner Komponenten, da sie wie ich derzeit feststelle noch nicht 100%ig so funktioniert, wie ich mir das vorstelle. Die Komponente besteht aus einem Label und einem Edit. Wenn die Komponente angeklickt wird (aktiviert wird) ist das Eidt sichtbar, damit ein Wert eingegeben wird. Wenn die Komponente deaktiviert ist (sie verliert den Focus) dann ist das Label sichtbar. Dies benötige ich für die Darstellung einer technischen Zeichnung. Jetzt ergibt sich folgendes Problem. Die maximale Anzahl an Zeichen soll für das Edit vorgegeben werden und eigentlich möchte ich, dass meine Komponente die ursprüngliche Property von dem normalen TEdit erbt. Dies gelingt mir allerdings noch nicht. Habe folgendes an Quellcode erstellt:
Delphi-Quellcode:
In der gekennzeichneten Stelle wird jetzt ein Fehler gemeldet: "Zugriffsverletzung bei Adresse ... in Modul ProjKomponente. Lesen von Adresse..."
type TLabEdit = Class(TWinControl)
private // Eigenschaftsvariablen FiTextLength, FiMaxTextLength: integer; // Komponenten FsTextWert: string; FLblAnzeige: TLabel; FEdEingabe: TEdit; // Eventvariablen FOnClick: TNotifyEvent; FOnChange: TOnChangeEvent; // create-Funktionen für das Label und das Edit function CreateLabel(PosX, PosY, Textgroesse: integer; visible: boolean): TLabel; function CreateEdit(PosX, PosY, Width, Height, Textgroesse: integer; visible: boolean): TEdit; // Interaktions-Prozeduren procedure FLblOnClick(Sender: TObject); procedure FEdKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); // Änderungs-Prozeduren procedure ChangeEmbeddedEdit; // Setter- und Getter function GetTextLength: integer; procedure SetMaxTextLength(iWert: integer); function GetMaxTextLength: integer; // Event-Prozeduren procedure WMMouseClick(var Msn: TMessage); message MouseClick; procedure CMMouseOver(var Msn: TMessage); message MouseOver; procedure CMMouseLeave(var Msn: TMessage); message MouseLeave; protected procedure createWnd; override; published property OnChange: TOnChangeEvent read FOnChange write FOnChange; property Enabled; property Visible; property Text; property Font; property MaxLength: integer read GetMaxTextLength write SetMaxTextLength; public constructor create(AOwner: TComponent); override; destructor destroy; override; property Length: integer read GetTextLength; End; ... procedure TLabEdit.SetMaxTextLength(iWert: integer); begin FiMaxTextLength := iWert; FEdEingabe.MaxLength := FiMaxTextLength; // <--- Hier entsteht ein Fehler end; function TLabEdit.GetMaxTextLength: integer; begin result := FiMaxTextLength; end; ... function TLabEdit.CreateEdit(PosX, PosY, Width, Height, Textgroesse: integer; visible: boolean): TEdit; begin result := TEdit.Create(nil); result.Parent := Self; result.Left := PosX; result.Top := PosY; result.Width := Width; result.Font.Assign(Font); result.Text := Caption; result.Visible := visible; end; ... procedure TLabEdit.CreateWnd; begin inherited createwnd; FLblAnzeige := CreateLabel(3, 3, 18, true); FLblAnzeige.OnClick := FLblOnClick; FEdEingabe := CreateEdit(0,0, FLblAnzeige.Width + 20, FLblAnzeige.Height, FLblAnzeige.Font.Height, false); FEdEingabe.OnKeyDown := FEdKeyDown; FiMaxTextLength := 100000; ChangeEmbeddedEdit; end; Wie kann ich möglichst unter Verwendung der Eigenschaft der TEdit-Komponente die MaxLength-Eigenschaft in der Komponente setzen? Vielen Dank BAMatze |
Re: MaxLength-Eigenschaft in Komponente integrieren
Hast du mal zwei Breakpoints gesetzt? Es sieht so aus, als ob du MaxLength eher setzt als CreateWnd aufgerufen worde.
|
Re: MaxLength-Eigenschaft in Komponente integrieren
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 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