itektas
asked on
cursor position
i have a mask edit with the following input; 999/999/999/999 ; what i want to be able to do is that when the user presses the right or left arrow key i would like the cursor pointer to move to the next part of the maskedit, like this
user enters 1 / / /
then after he presses the right arrow key , supposing H is the cursor
1H / / /
instead i want the cursor to go
1 / H / /
then if they press left again
1 / /H / and if they do it backwards i would like to the cursor to come to the previous part so
1 / / /H user presses left arrow 1 / /H / and so on
how would this be possible? I was thinking maybe the right and left arrow keys have a control character and when they are pressed i could tell the cursor to move differently; Hope the question was clear enough.
thanks in advance
user enters 1 / / /
then after he presses the right arrow key , supposing H is the cursor
1H / / /
instead i want the cursor to go
1 / H / /
then if they press left again
1 / /H / and if they do it backwards i would like to the cursor to come to the previous part so
1 / / /H user presses left arrow 1 / /H / and so on
how would this be possible? I was thinking maybe the right and left arrow keys have a control character and when they are pressed i could tell the cursor to move differently; Hope the question was clear enough.
thanks in advance
ASKER
i get undeclared identifier vk_right & vk_left?
>i get undeclared identifier vk_right & vk_left?
ensure that windows-unit is included in the uses clause
ensure that windows-unit is included in the uses clause
ASKER
tried to put "windows-unit" and "windows" in the uses part, but i get
[Fatal Error] Unit1.pas(7): File not found: 'Windows.dcu'
what could be wrong?
[Fatal Error] Unit1.pas(7): File not found: 'Windows.dcu'
what could be wrong?
what delphi version do u use?
ASKER
delphi 7 ; but kylix ( linux)
pu, kylix, must recherche
ASKER
pardon? i didnt understand =)
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
works perfect! thanks mate! Just one last question tho, the only part in this code i dont quiet understand is the last bit, MaskEdit1.selLength := 1;
key := 0;
what is that for?
key := 0;
what is that for?
>MaskEdit1.selLength := 1;
marks the digit you jump to as selected
>key := 0;
ensures that the key is not processed further
but maybe you can left it out
for kylix/linux
(have no linux -> can't test it there)
glad you like it
meikl ;-)
marks the digit you jump to as selected
>key := 0;
ensures that the key is not processed further
but maybe you can left it out
for kylix/linux
(have no linux -> can't test it there)
glad you like it
meikl ;-)
ASKER
ok cool, it works better when i leave it =)
ASKER
just a detail that i have just noticed now actually, normally in an editmask when the user enters letters nothing happens, but now when the user enters letters it appears as a space, could i add a line to change that? so that it ignores it like it does it in a normal editmask?
well, not looked in yet,
but you could use the onKeypressEvenet like
if key = #32 then key := #0;
looking tomorrow, if this happens also by me (at windows)
meikl ;-)
but you could use the onKeypressEvenet like
if key = #32 then key := #0;
looking tomorrow, if this happens also by me (at windows)
meikl ;-)
ASKER
yeah i have tried something similar to that actually using the onkeypress what i had done was
procedure Tform1.MaskEdit1Keypress( Sender: TObject; var Key: char);
begin
if not (Key in ['0','1','2','3','4','5',' 6','7','8' ,'9'', #8]) then
begin
Key := #0;
end;
end;
the one you said is pretty similar but didnt work either, its weird because normally editmasks never let the letters do anything, and adding this code didnt seem to solve it :/
procedure Tform1.MaskEdit1Keypress( Sender: TObject; var Key: char);
begin
if not (Key in ['0','1','2','3','4','5','
begin
Key := #0;
end;
end;
the one you said is pretty similar but didnt work either, its weird because normally editmasks never let the letters do anything, and adding this code didnt seem to solve it :/
ASKER
leaving out the key := 0; line from the original code seems to do the job!
ASKER
actually no! that doesnt seem to solve it, i hate it when i think i solved a problem then i come across a new one! :( When i remove that line the cursor positions get mixed up, so they start in the middle of the next part instead of the beginning. I'll look again tommorow
procedure TForm1.MaskEdit1KeyDown(Se
Shift: TShiftState);
begin
if key = vk_right then
case MaskEdit1.SelStart of
0..2 : MaskEdit1.SelStart := 4;
4..6 : MaskEdit1.SelStart := 8;
8..14: MaskEdit1.SelStart := 12;
end;
if key = vk_left then
case MaskEdit1.SelStart of
12..14 : MaskEdit1.SelStart := 8;
8..10 : MaskEdit1.SelStart := 4;
0..6: MaskEdit1.SelStart := 0;
end;
MaskEdit1.selLength := 1;
key := 0;
end;
not tested on all cases
meikl ;-)