|
| Indtastningskontrol Fra : Henning Madsen |
Dato : 25-08-04 21:32 |
|
I Propertis er MaxLength for Edit1 sat til 5
Der må max indtastes 99999,99
og kun eet komma
og kun to decimaler efter kommaet.
I Edit2 er der tilføjet ,00 ved indtastning af f.eks 99
Ligeledes tilføjes eet 0 ved indtastning af f.eks 9,9
Har lavet følgende program, men det går galt når jeg har rettet med <--
tasten,
så kan der indtastes flere cifre end de 5 der er tilladt før et komma.
Hvad gør jeg galt ?? Eller er der en bedre måde at gøre det på.
På forhånd tak for en eventuel løsning.
MVH Henning
//---------------
IndtastningsKontrol ------------------------------------------
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
L : Integer;
begin
If not (Key in ['0'..'9',#8,#44])Then Key := #0;
If Pos(#44,Edit1.Text) >0 Then Begin
If not(Key In ['0'..'9',#8]) Then Key := #0;
End;
L := Length(Edit1.Text);
If (L <=5) And (Key = #44) Then Edit1.MaxLength := L + 3;
end;
//--------------------------------------------------------------------------
----
procedure TForm1.Button1Click(Sender: TObject);
Var
L,P : Integer;
S : String;
begin
S := Edit1.Text;
L := Length(Edit1.Text);
P := Pos(#44,Edit1.Text);
//Eks.
If L = P Then Edit2.Text := S + '00'; //1, tilføjes 00.
If L-1 = P Then Edit2.Text := S + '0'; //1,5 tilføjes 0.
If L-2 = P Then Edit2.Text := S; //1,55 tilføjes entet.
If P = 0 then Edit2.Text := S + ',00'; //123 tilføjes ,00
If Pos(#44,S)= 1 Then Edit2.Text := '0' + S + '0'; //,5 tilføjes 0 foran.
end;
//--------------------------------------------------------------------------
----
end.
| |
Carsten (26-08-2004)
| Kommentar Fra : Carsten |
Dato : 26-08-04 10:32 |
|
Henning Madsen wrote:
> I Propertis er MaxLength for Edit1 sat til 5
> Der må max indtastes 99999,99
> og kun eet komma
> og kun to decimaler efter kommaet.
Her er noget kode til en komponent som jeg lavede for et par år siden.
Det er muligvis noget som du kan arbejde videre på. Jeg havde brug for
en afgrænsning som ikke kunne opfyldes med antal cifre. Denne her
komponent afleverer det indtastet tal (heltal) i "Value" som en integer,
Mvh
Carsten
------------------------------
unit TextToInt;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
DsgnIntf,StdCtrls,Forms;
type
TTextToInt = class(tEdit)
private
{ Private declarations }
hMaxVal:Integer;
hMinVal:Integer;
hValue:Integer;
Procedure SetValue(i:Integer);
protected
{ Protected declarations }
procedure Change; Override;
public
{ Public declarations }
constructor Create(AOwner: TComponent); override; { override
to set new default }
published
{ Published declarations }
property MaxVal: Integer read hMaxVal write hMaxVal default MaxInt;
property MinVal: Integer read hMinVal write hMinVal default 0;
property Value: Integer read hValue write SetValue default 0;
end;
procedure Register;
implementation
Uses BeInc,WinKey;
constructor TTextToInt.Create(AOwner: TComponent);
begin
inherited Create(AOwner); { perform
inherited initialization }
hMaxVal:=MaxInt;
hMinVal:=0;
end;
procedure Register;
begin
RegisterComponents(cBE_Componenter, [TTextToInt]);
RegisterPropertyEditor(TypeInfo(tEdit),TTextToInt, 'MaxVal',
TIntegerProperty);
RegisterPropertyEditor(TypeInfo(tEdit),TTextToInt, 'MinVal',
TIntegerProperty);
end;
procedure TTextToInt.Change;
Var i:integer; p:integer;
Begin
if (text='') or (text='-') then
exit;
val(text,i,p);
if (p=0) and (i<=MaxVal) and (i>=MinVal) then begin
hValue:=i;
clearUndo;
end else begin
if Parent<>nil then
begin
Application.MessageBox('Fejl i
indtastning','Error',MB_OK+MB_ICONERROR+MB_APPLMODAL);
undo;
val(text,i,p);
SendKeyPress(chr(VK_END));
if (p<>0) or (i>MaxVal) or (i<MinVal) then
clear
end;
end;
inherited Change; { perform inherited event}
end;
Procedure TTextToInt.SetValue(i:Integer);
Begin
if (i>MaxVal) and (i<MinVal) then
i:=0;
text:=intToStr(i);
hValue:=i;
SelectAll;
End;
end.
| |
|
|