Писал для себя, но думаю поможет и тебе...
Код:
//функция фильтрации ввода
function TProgramm.FilterImput (Edit : TEdit ; Key : Char) : Char ;
var
vr_Pos , vrPos, vrLength, vrSelStart: byte;
const
i: byte = 1;
begin
with Edit do begin
vrLength := Length(Text); //определяем длину текста
vrPos := Pos(',', Text); //проверяем наличие запятой
vr_Pos := Pos('.', Text); //проверяем наличие запятой
vrSelStart := SelStart; //определяем положение курсора
end;
Result := key;
Case Key of
'0'..'9': //если нажата цифра
begin
if (vrPos > 0) and (vrLength - vrPos > I) and (vrSelStart >= vrPos) then
result := #0; //"погасить" клавишу
end;
',','.': //если нажата точка или запятая
begin
if (vr_Pos>0) or (vrPos > 0) or (vrSelStart = 0) or (vrLength = 0) then
result := #0 //"погасить" клавишу
else
result := '.'; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей 'Back Space'
else
result {Key} := #0; //"погасить" все остальные клавиши
end;
end;
Посмотри мою реализацию Up/Down...установка часом, минут, секунд...
Код:
procedure TForm_ustan_alarm.UpDown_hourClick(Sender: TObject;
Button: TUDBtnType);
begin
Label_hour.Caption := IntToStr(UpDown_hour.Position);
end;
procedure TForm_ustan_alarm.UpDown_minClick(Sender: TObject;
Button: TUDBtnType);
begin
if UpDown_min.Position < 10
then Label_min.Caption := '0' + IntToStr(UpDown_min.Position)
else Label_min.Caption := IntToStr(UpDown_min.Position);
end;
procedure TForm_ustan_alarm.UpDown_secClick(Sender: TObject;
Button: TUDBtnType);
begin
if UpDown_sec.Position < 10
then Label_sec.Caption := '0' + IntToStr(UpDown_sec.Position)
else Label_sec.Caption := IntToStr(UpDown_sec.Position);
end;