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:
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;
In der gekennzeichneten Stelle wird jetzt ein Fehler gemeldet: "Zugriffsverletzung bei Adresse ... in Modul ProjKomponente. Lesen von Adresse..."
Wie kann ich möglichst unter Verwendung der Eigenschaft der TEdit-Komponente die MaxLength-Eigenschaft in der Komponente setzen?
Vielen Dank
BAMatze
2. Account Sero