/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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.

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408918
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste