Joop,
habs getestet und klappt so super. Der neue Code sieht jetzt so aus:
Delphi-Quellcode:
TSizeEdit = class(TCustomEdit)
private
procedure CNCommand(var Message: TWMCommand); message CN_COMMAND;
Function CheckText(AText : String) : String;
protected
public
constructor Create(AOwner : TComponent); override;
end;
{-----------------------------------------------------------------------------
Procedure: CheckText
Author: oki
Date: 21-Sep-2007
Arguments: AText: String
Result: String
Describtion: nur Zahlen zulassen
-----------------------------------------------------------------------------}
function TSizeEdit.CheckText(AText: String): String;
var counter : Integer;
begin
for Counter := Length(AText) downto 1 do begin
if not (AText[Counter] in ['0'..'9']) then
system.Delete(AText, Counter, 1);
end;
Result := AText; // das ist nicht so elegant, sollte man über einen var-Parameter oder lokale Variable lösen
end;
{-----------------------------------------------------------------------------
Procedure: CNCommand
Author: oki
Date: 21-Sep-2007
Arguments: var Message: TWMCommand
Result: None
Describtion: change abfangen und Text prüfen
-----------------------------------------------------------------------------}
procedure TSizeEdit.CNCommand(var Message: TWMCommand);
var CurPos : Integer;
begin
// hier bearbeiten
CurPos := self.SelStart;
Text := CheckText(Text);
if CurPos > Length(Text) then
self.SelStart := Length(Text)
else
self.SelStart := CurPos;
inherited;
end;
constructor TSizeEdit.Create(AOwner: TComponent);
begin
inherited;
self.DoubleBuffered := True;
Width := 35;
Height := 15;
self.Font.Size := 7;
end;
Damit ist die Frage beantwortet.
Dank und Gruß an marabu und sirius
oki