Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Вниз

Маска ввода в StringGrid с помощью KeyPress   Найти похожие ветки 

 
Gurd   (2008-09-26 11:49) [0]

Здравствуйте, подскажите решение...
Для контроля ввода в ячейку StringGrid вещественных чисел использую процедуру KeyPress, данный алгоритм был написан (не мной) для компонента Edit в котором есть свойство SelStart, а в grid нет (я не нашел) такого свойства, в результате чего разделитель (DecimalSeparator) можно поставить, если вводить первым не в пустую чейку, т.к не проводиться проверка выделенного текста. Если есть идеи, буду признателен. Спасибо

procedure TForm1.KeyPress(Sender: TObject; var Key: Char);
var //цифровая маска
vrPos, vrLength, vrSelStart: byte;
const
I: byte = 3;
//I+3 = количество знаков после запятой (в данном случае - 4 знака)
begin
with Sender as TStringGrid  do
begin
vrLength := Length(Cells [col,row]); //определяем длину текста
vrPos := Pos(",", Cells [col,row]); //проверяем наличие запятой
end;
case Key of
"0".."9":
begin
//проверяем положение курсора и количество знаков после запятой
if (vrPos > 0) and (vrLength - vrPos > I) then
Key := #0; //"погасить" клавишу
end;
",", ".":
begin
//если запятая уже есть или запятую пытаются поставить перед
//числом или никаких цифр в поле ввода еще нет
if (vrPos > 0) or (vrLength = 0) or (vrSelStart=0) then    !!!!!!!!!!
Key := #0 //"погасить" клавишу
else
Key :=DecimalSeparator;
//Key := #44; //всегда заменять точку на запятую
end;
#8: ; //позволить удаление знаков клавишей "Back Space"
#13:        //позволить "Enter"
else
Key := #0; //"погасить" все остальные клавиши
end;
end;


 
Сергей М. ©   (2008-09-26 12:00) [1]


> разделитель (DecimalSeparator) можно поставить, если вводить
> первым не в пустую чейку


А что в этом плохого ?

Значение .123 вполне можно трактовать как 0.123

Или ты о чем ?


 
Gurd   (2008-09-26 12:48) [2]

может получиться значение "," просто один разделитель, что не допустимо (в моем случае). И в данном алгоритме (для edit) предусматривается проверка на ввод разделителя до цифры, и мне надо реализовать такое для grid (в этом все проблема)


 
Сергей М. ©   (2008-09-26 12:54) [3]


> может получиться значение "," просто один разделитель


А для этого существует событие OnSetEditText, в обработчике которого ты волен обнаружеть ткую ситуацию и скорректировать ее требуемым образом


 
Gurd   (2008-09-26 13:12) [4]

Ок, спасибо, буду пробывать.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.11.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.005 c
15-1251837006
Юрий
2009-09-02 00:30
2009.11.01
С днем рождения ! 2 сентября 2009 среда


4-1220776855
Дмитрий Белькевич
2008-09-07 12:40
2009.11.01
Количество записанных байт на жесикий


2-1252395096
mfender
2009-09-08 11:31
2009.11.01
Создание индекса (MSSQL)


2-1253022950
kostyl_kostyl
2009-09-15 17:55
2009.11.01
Не пойму почему ошибка при SetLetngth


15-1251453095
@!!ex
2009-08-28 13:51
2009.11.01
Продолжается ли разработка средства Turbo Delphi Explorer?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский