Cursor hop

Tags:    delphi

Hvis jeg har tre edit felter, hvor der maks kan skrive to tal i hver, hvordan kan jeg så lave det således at når der er indtastet to tal i første felt springer cursoren automatisk over i næste edit felt, så man ikke skal til at flytte den med musen??

Det ville være rart med lidt hjælp her... TAK



2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Hvis jeg har tre edit felter, hvor der maks kan skrive to tal i hver, hvordan kan jeg så lave det således at når der er indtastet to tal i første felt springer cursoren automatisk over i næste edit felt, så man ikke skal til at flytte den med musen??


Tja, en meget simpel måde vil være at lave en fælles OnChange event handler der anvendes af dine edit fields; noget i retning af:

procedure TForm1.EditChange(Sender: TObject);
begin
if Sender is TEdit then
with Sender as TEdit do
begin
if length(trim(Text)) = 2 then
begin
if Sender = Edit1 then
Edit2.SetFocus
else if Sender = Edit2 then
Edit3.SetFocus
else Edit1.SetFocus;
end;
end;
end;

Her antager event handler'en altså at dine edit felter hedder Edit1, Edit2 og Edit3. Først checker metoden at det rent faktisk er et TEdit objekt der har forsaget event'et, herefter checkes at der rent faktisk er indtastet to tal/bogstaver, og i givet fald sættes fokus til den næste TEdit i rækken.

Håber det hjælper!

PS: Undskyld den manglende tabulering/indrykning.[Redigeret d. 28/02-03 11:15:18 af Thomas Rose]



Hvis jeg har tre edit felter, hvor der maks kan skrive to tal i hver, hvordan kan jeg så lave det således at når der er indtastet to tal i første felt springer cursoren automatisk over i næste edit felt, så man ikke skal til at flytte den med musen??

Tja, en meget simpel måde vil være at lave en fælles OnChange event handler der anvendes af dine edit fields; noget i retning af:

procedure TForm1.EditChange(Sender: TObject);
begin
if Sender is TEdit then
with Sender as TEdit do
begin
if length(trim(Text)) = 2 then
begin
if Sender = Edit1 then
Edit2.SetFocus
else if Sender = Edit2 then
Edit3.SetFocus
else Edit1.SetFocus;
end;
end;
end;

Her antager event handler'en altså at dine edit felter hedder Edit1, Edit2 og Edit3. Først checker metoden at det rent faktisk er et TEdit objekt der har forsaget event'et, herefter checkes at der rent faktisk er indtastet to tal/bogstaver, og i givet fald sættes fokus til den næste TEdit i rækken.

Håber det hjælper!

PS: Undskyld den manglende tabulering/indrykning.[Redigeret d. 28/02-03 11:15:18 af Thomas Rose]


Brug at brug følgende funktion til at checke om det indtastede er et tal:

function IsNumeric(AStr : String) : Boolean;
begin
Result := False;
for I := 1 to Length(AStr) do
if (Byte(AStr[I]) < 48) or (Byte(AStr[I]) > 57) then
Exit;
Result := True;
end;

Så vil Thomas's rutine se således ud:

procedure TForm1.EditChange(Sender: TObject);
begin
if Sender is TEdit then
with Sender as TEdit do
begin
if not IsNumeric(Trim(Text)) then
Exit; // Hvis det ikke er et tal så hop ud.
if length(trim(Text)) = 2 then
begin
if Sender = Edit1 then
Edit2.SetFocus
else if Sender = Edit2 then
Edit3.SetFocus
else Edit1.SetFocus;
end;
end;
end;


Mvh
Michael.



t