![]() |
in neuer tedit kompo onkeypress überschreiben?
hallo,
hab folgende kompo-grundstruktur geschrieben. bei der neuen editkompo soll der text ausrichtbar sein (hab ich schon realisiert) und es soll außerdem ausgewählt werden können, ob nur zahlen (+ seperator), nur buchstaben (unwichtig) oder alles eingegben werden darf. jetzt bin ich aber mit meinen kompoerstellungskenntnissen am ende - ich weiss nicht, wie ich die prozedur onkeypress von wincontrol überchreiben kann, um falscheingaben zu verhindern!
Delphi-Quellcode:
mfg,
unit NewEdit;
interface uses Classes, StdCtrls, Controls; type TAlign = (alleft, alright, alcenter); type TSeperator = (sedot, secomma); type TReservation = (reAll, reNumbersOnly, reLettersOnly); type TAlErrorEvent = procedure(Sender: TObject; val: TAlign) of Object; type TReErrorEvent = procedure(Sender: TObject; val: TReservation) of Object; type TNewEdit = class(TEdit) private FOnAlError: TAlErrorEvent; FOnReError: TReErrorEvent; FAlign: TAlign; FReservation: TReservation; procedure SetAlign(Align: TAlign); procedure SetReservation(reReservation: TReservation); published property Alignment: TAlign read FAlign write SetAlign; property Reservation: TReservation read FReservation write SetReservation; property OnAlError: TAlErrorEvent read FOnAlError write FOnAlError; property OnReError: TReErrorEvent read FOnReError write FOnReError; public procedure CreateParams(var Params: TCreateParams); override; end; procedure Register; implementation procedure Register; begin RegisterComponents('Standard', [TNewEdit]); end; procedure TNewEdit.SetAlign(Align: TAlign); begin if Align <> FAlign then if Align in [alleft, alright, alcenter] then FAlign := Align else if Assigned(FOnAlError) then OnAlError(self, Align); end; procedure TNewEdit.SetReservation(reReservation: TReservation); begin if reReservation <> FReservation then if (reReservation in [reAll, reNumbersOnly, reLettersOnly]) then FReservation := reReservation else if Assigned(FOnReError) then OnReError(self, reReservation); end; procedure TNewEdit.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); if FAlign = alright then Params.Style := Params.Style or 2; if FAlign = alleft then Params.Style := Params.Style or 0; if FAlign = alcenter then Params.Style := Params.Style or 1; end; end. heiopei |
Re: in neuer tedit kompo onkeypress überschreiben?
*push*
sorry, aber ich kenn mich auf dem gebiet noch gar net aus und hab grad fast keine zeit um mich damit zu befassen ! :-( mfg, heiopei |
Re: in neuer tedit kompo onkeypress überschreiben?
du kannst die Methode
Delphi-Quellcode:
überschreiben. Sollte dann ungefähr so aussehen (ungetestet)
procedure KeyPress(var Key: Char); dynamic;
Delphi-Quellcode:
damit würden alle 'a' und 'b' verweigert und nur bei den anderen Tasten das OnKeyPress augelöst wenn dieses zugewiesen ist.
protected
procedure KeyPress(var Key: Char); override; [...] procedure TYourNewClass.KeyPress(var Key: Char); begin if (Key in ['a', 'b']) then Key := #0 else inherited KeyPress(Key); end; Eine weitere Möglichkeit Events neu zu definieren ist folgende (kommt zum Einsatz wenn es mal keine Methode zum überschreiben gibt). Die Methode geht auch mit allen Möglichen Events, der Typ muss eben nur angepasst werden... Nachteile gibts natürlich auch...
Delphi-Quellcode:
private
fOnKeyPress: TKeyPressEvent; procedure FOnKeyPressProc(Sender: TObject; var Key: Char); published property OnKeyPress: TKeyPressEvent read fOnKeyPress write fOnKeyPress; [...] constructor TNewClass.Create(AOwner: TComponent); begin inherited Create(AOwner); inherited OnKeyPress := FOnKeyPressProc; [...] procedure TNewClass.FOnKeyPressProc(Sender: TObject; var Key: Char); begin if (Key in ['a', 'b']) then Key := #0 else if Assigned(fOnKeyPress) then fOnKeyPress(Sender, Key); end; |
Re: in neuer tedit kompo onkeypress überschreiben?
ok,
werd das dann mal probieren danke heiopei |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 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 by Thomas Breitkreuz