AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi MaxLength-Eigenschaft in Komponente integrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MaxLength-Eigenschaft in Komponente integrieren

Ein Thema von BAMatze · begonnen am 5. Jun 2009 · letzter Beitrag vom 5. Jun 2009
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

MaxLength-Eigenschaft in Komponente integrieren

  Alt 5. Jun 2009, 14:15
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: MaxLength-Eigenschaft in Komponente integrieren

  Alt 5. Jun 2009, 14:22
Hast du mal zwei Breakpoints gesetzt? Es sieht so aus, als ob du MaxLength eher setzt als CreateWnd aufgerufen worde.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: MaxLength-Eigenschaft in Komponente integrieren

  Alt 5. Jun 2009, 14:35
Zitat von sirius:
Hast du mal zwei Breakpoints gesetzt? Es sieht so aus, als ob du MaxLength eher setzt als CreateWnd aufgerufen worde.
Jap das war es. Thx
2. Account Sero
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:19 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