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

Вниз

ввод в ячейки стринггрида вещественных чисел   Найти похожие ветки 

 
oleg_teacher   (2011-03-02 14:53) [0]

Помогите направить на мысль как запретить ввод в ячейки стринггрида вещественных чисел с максимальным количеством цыфр после запятой 2. Просто не могу понять... если обрабатывать текст на KeyPress то определить количество пока чисел после запятой получается - то есть я могу сделать Key := #0;. Но загвоздка в том, что когда я буду ету же ячейку редактировать (допустим добавлять числа к целой части числа), и у меня есть две цыфры после запятой то... ес-но будет тоже срабатывать Key := #0;
Как быть может есть какой то другой вариант?


 
Jeer ©   (2011-03-02 15:00) [1]

Отдели мух от котлет, т.е. целые от дробных и разбирайся с ситуацией.


 
KilkennyCat ©   (2011-03-02 15:01) [2]

if ACol = ColCount - 1 then  Value := "!999999999.99;0; ";


 
KilkennyCat ©   (2011-03-02 15:01) [3]

это в OnGetEditMask


 
oleg_teacher   (2011-03-02 16:09) [4]


> if ACol = ColCount - 1 then  Value := "!999999999.99;0;
> ";

некрасивое и неправальное отображение выходит...


 
oleg_teacher   (2011-03-02 16:10) [5]


> Отдели мух от котлет, т.е. целые от дробных и разбирайся
> с ситуацией.

Что вы именно имеете ввиду... как раз дробную и целую часть отделять нельзя... ето одно число.. которое отображается в ячейке.


 
Jeer ©   (2011-03-02 16:18) [6]


> как раз дробную и целую часть отделять нельзя.


В процессе анализа - можно.


 
KilkennyCat ©   (2011-03-02 19:53) [7]


> некрасивое и неправальное отображение выходит...

ну напишите другую маску, делов-то. я просто привел пример, а не выполнял вашу задачу.


 
Loginov Dmitry ©   (2011-03-02 21:39) [8]


> Помогите направить на мысль как запретить ввод в ячейки
> стринггрида вещественных чисел с максимальным количеством
> цыфр после запятой 2
> если обрабатывать текст на KeyPress то определить количество
> пока чисел после запятой получается - то есть я могу сделать
> Key := #0;. Но загвоздка в том, что когда я буду ету же
> ячейку редактировать (допустим добавлять числа к целой части
> числа), и у меня есть две цыфры после запятой то... ес-но
> будет тоже срабатывать Key := #0;
> Как быть может есть какой то другой вариант?


Встроенный в грид редактор текста (InplaceEditor) - это баловство. С ним очень долго можно разбираться, однако как правило толку от этого мало (уж больно ограничены его встроенные возможности). Гораздо проще подставлять поверх выбранной ячейки обычный эдит (например TSpinEdit). Для этого можно отлавливать события OnSelectCell или OnGetEditText у грида и OnExit у эдита (это навскидку). А вообще в интернете примеров - полно, поищи.
В результате проблема со знаками после запятой должна отпасть сама собой.


 
Игорь Шевченко ©   (2011-03-02 21:54) [9]


> Встроенный в грид редактор текста (InplaceEditor) - это
> баловство. С ним очень долго можно разбираться, однако как
> правило толку от этого мало (уж больно ограничены его встроенные
> возможности).


ниасилил ?


> Гораздо проще подставлять поверх выбранной ячейки обычный
> эдит (например TSpinEdit). Для этого можно отлавливать события
> OnSelectCell или OnGetEditText у грида и OnExit у эдита
> (это навскидку).


лавры Ивана Кулибина не дают покоя ? Для чисел с плавающей точкой TSpinEdit ?


> А вообще в интернете примеров - полно, поищи.


Работающих ? :)

ты почитай grids.pas на досуге, у InplaceEditor, как у наследника TCustomMaskEdit вообще-то дофига возможностей по ограничению вводимых данных.


 
KilkennyCat ©   (2011-03-02 22:08) [10]


>  Гораздо проще подставлять поверх выбранной ячейки обычный
> эдит

грамотно это сделать намного сложнее, чем воспользоваться инплэйсом. Более того, я еще не встречал грамотной реализации. А почему? А потому что грамотный так делать не будет, а то, что делает безграмотный, грамотным быть не может.


 
Leonid Troyanovsky ©   (2011-03-02 22:30) [11]


> Игорь Шевченко ©   (02.03.11 21:54) [9]

> TCustomMaskEdit вообще-то дофига возможностей

InplaceEditor заместить, конечно, следует.
Но, TCustomMaskEdit не заслужил, IMHO, клейма Вирта.

--
Regards, LVT.


 
Игорь Шевченко ©   (2011-03-02 22:31) [12]


> Более того, я еще не встречал грамотной реализации


Я и встречал и сам делал. Когда в стандартном InplaceEdit выпадающего списка не было. Как только появился, сразу свои поделки в корзину отправил.

Куда как проще сделать из трех строк наследника грида с перекрытой функцией CreateEditor и из трех же строк наследника TInplaceEdit с нужной расширенной функциональностью.


 
Loginov Dmitry ©   (2011-03-02 22:40) [13]


> лавры Ивана Кулибина не дают покоя ?


Игорь, поражаюсь тебе, как тебе не нравится, когда другие дают советы по делу!
:(


 
Leonid Troyanovsky ©   (2011-03-02 22:51) [14]


> Loginov Dmitry ©   (02.03.11 22:40) [13]

> дают советы по делу!
]
По делу советы дают адвокаты и не просто так.

А предложенное попробуй переобоснуй.

--
Regards, LVT.


 
Loginov Dmitry ©   (2011-03-02 23:04) [15]


> А предложенное попробуй переобоснуй.


Из каждой ситуации есть как минимум 2 выхода. Я предлагаю один из выходов, который является вполне работоспособным, безглюченным (если конечно руки на месте), понятным.
Игорь предлагает другой подход, который по его мнению лучше.
Я его мнение уважаю. Ну зачем же так в открытую срать на мнение других людей!


 
KilkennyCat ©   (2011-03-02 23:11) [16]


> предлагаю один из выходов, который является вполне работоспособным,
>  безглюченным (если конечно руки на месте), понятным.

в результате, будет как недавний вопрос, про кучу едитов сверху грида и обновлением их при скроллинге.


 
Loginov Dmitry ©   (2011-03-02 23:32) [17]


> в результате, будет как недавний вопрос, про кучу едитов
> сверху грида и обновлением их при скроллинге.


И еще про ручную прорисовку в ячейках :)

Но ведь это и есть программирование! Разве не для этого предназначен данный форум? :) В первую очередь для решения программерских вопросов (профессиональных вопросов в области программирования)!
А не для хамства с показом своей "крутости" с попутным "обсиранием" всех и каждого.


 
KilkennyCat ©   (2011-03-03 00:28) [18]


> Loginov Dmitry ©   (02.03.11 23:32) [17]

хочешь посмотреть хамство - зайди на форум "цифры" - есть такая провайдерская шарага в Питере. там админы, мастера, тех поддержка и т.д. хамят клиентам.


 
Германн ©   (2011-03-03 01:20) [19]


> Loginov Dmitry ©   (02.03.11 23:32) [17]


> А не для хамства с показом своей "крутости" с попутным "обсиранием"
> всех и каждого.

В данном случае, лично я, хамства не увидел. И "обсирание" тоже.
Но сей форум имеет свои особенности. Тут участники чуть более вольны в своих высказываниях.


 
Oleg_teacher   (2011-03-03 08:23) [20]

я постоянно удивляюсь... как можно загадить опсуждение... неужели нет где поговорить не по теме!


 
И. Павел ©   (2011-03-03 08:28) [21]

> [0] oleg_teacher   (02.03.11 14:53)

А я предпочитаю брать пример с Word. Там в разных настройках пользователю позволяют ввести что угодно, но при нажатии на кнопку "OK" проверяют и сообщают, что он ввел не так. По моему, если пользователь нажимает на кнопку а программа подавляет этот символ, это как то не культурно что ли :) Исключение делаю только для дат. TDateTimepicker по моему очень удобный. А проверить, сколько знаков пользователь ввел после запятой можно анализируя строковое представления числа (только нужно преобразовать его в неинженгерную запись). Это все мое ИМХО, конечно.


 
Oleg_teacher   (2011-03-03 08:30) [22]


> А я предпочитаю брать пример с Word. Там в разных настройках
> пользователю позволяют ввести что угодно, но при нажатии
> на кнопку "OK" проверяют и сообщают, что он ввел не так.
>

может  с вами соглашусь... усли не пойму выше описаного, буду использовать ваш совет. спс за дельный совет


 
Dennis I. Komarov ©   (2011-03-03 09:19) [23]


> Для чисел с плавающей точкой TSpinEdit ?

А что? И такой гдето завалялся :)


 
И. Павел ©   (2011-03-03 09:28) [24]

> А что? И такой гдето завалялся :)

В AlphaControl такой есть.


 
Anatoly Podgoretsky ©   (2011-03-03 09:38) [25]

> Loginov Dmitry  (02.03.2011 23:32:17)  [17]

У тебя неверное представления о форумах, их единственное предназначение это
общение, а решает он вопросы или нет, это не играет роли.


 
han_malign   (2011-03-03 09:56) [26]


> Там в разных настройках пользователю позволяют ввести что
> угодно, но при нажатии на кнопку "OK" проверяют и сообщают,
>  что он ввел не так.

- угу, MaskEdit и любая другая попытка жестко ограничить ввод, за исключением примитивных шаблонов - приводит к тому, что редактировать поле практически невозможно - можно только с нуля вводить правильный текст...

Простой пример:
можно ввести только четыре цифры, нужно 1234, по ошибке ввел 1254 - варианты:
1. удаляем 5, вводим 3
2. выделяем 5, вводим 3
3. вводим 3, удаляем 5
- упс - жесткое ограничение оставляет нам только первые два варианта...
Некоторые скажут, что и двух достаточно - сделаю пример более наглядным:
|12444444444444444444454 - и курсор в начале поля...
Таким образом - редактирование полей превращается в занимательный ребус.

В конце концов - прикрутил базовый фильтр "кнопок"(таки не все символы нужны), regexp для валидации(например /[+-]?\d{1,18}(\.\d{1,2})?/), и тупо подсвечиваю поле красным цветом... После некоторых размышления добавил еще "желтый" regexp - для подсветки незавершенных полей(чтобы отличать от случаев заведомо неправильного ввода(при наличии обязательный подполей), и лишний раз не нервировать ранимого пользователя)...
например: "login@.ru" vs "login@mail@ru" -
жесткий шаблон:
/\A[_\-.\da-zA-Z]+@[_\-da-zA-Z]+(\.[_\-da-zA-Z]+)+\Z/
мягкий шаблон:
/\A[_\-.\da-zA-Z]*@?[_\-da-zA-Z]*(\.[_\-\da-zA-Z]*)*\Z/
(это пример: на самом деле в URI несколько больше допустимых символов и может(а в некоторых случаях - должна) присутствовать схема)


 
han_malign   (2011-03-03 10:18) [27]

на самом деле, жесткая фильтрация делается довольно просто:
1. В обработчике кнопок запоминаешь текущий текст и(!) выделение(SelStart, SelEnd).
2. Если изменившийся текст не совпадает с шаблоном - возвращаешь элемент управления в предыдущее состояние...

Можно конечно вручную обрабатывать текст, но замучаешься с весёлостями вроде [BS],[DEL],[Shift+Ins],[Alt+BS],[Ctrl+Z],[Shift+Ctrl+Z], не говоря уж о просто [Ins]...


 
Loginov Dmitry ©   (2011-03-03 12:14) [28]


> У тебя неверное представления о форумах, их единственное
> предназначение это
> общение, а решает он вопросы или нет, это не играет роли.
>


Анатолий, для вас конечно не играет роли. Для вас форум - это игрушка, где можно писать от балды все что в голову взбредет.
Но для многих людей форум - место для решения профессиональных вопросов.


 
brother ©   (2011-03-03 12:18) [29]

> форум - место для решения профессиональных вопросов.

по поводу форума - профессионал Анатолий, для себя все решил)


 
Oleg_teacher   (2011-03-03 12:39) [30]


> Но для многих людей форум - место для решения профессиональных
> вопросов.

Соглашусь на все 100% ... Зачем уважаемому Anatoly Podgoretsky разводить флуд в теме вопроса. Я конечно извиняюсь... но я задавал вопрос для помощи по сути... а не для "базара". Есть же другие ветки.


 
KilkennyCat ©   (2011-03-03 13:07) [31]

Ну вот. Флудили все, а влетело Подгорецкому. Это хорошо :)


 
clickmaker ©   (2011-03-03 13:08) [32]

ну, дядя Толя всегда может сам себя отмодерировать, если что )


 
brother ©   (2011-03-03 13:11) [33]

вообще классно - АП всегда было двое?


 
Игорь Шевченко ©   (2011-03-03 14:06) [34]


> Я конечно извиняюсь... но я задавал вопрос для помощи по
> сути... а не для "базара


за помощь без базара надо обращаться в чиста техническую поддержку, а не на форум


 
Oleg_teacher   (2011-03-03 14:14) [35]

не соглашусь... Если бы я хотел базара... я бы написал в прочее... или поговорил бы где нибудь на другом специализированом сайте


 
Игорь Шевченко ©   (2011-03-03 14:19) [36]

Oleg_teacher   (03.03.11 14:14) [35]

Я извиняюсь, а кому какое дело, что ты хотел и что не хотел ?
Ты не вправе требовать от участников соответствия твоим ожиданиям


 
Oleg_teacher   (2011-03-03 14:25) [37]

ето я дико извиняюсь... ну должны же быть какие то правила общения. Ета ветка открыта была по конкретному вопросу, а не для загромаждения ее ненужной инфой (кстати почему то и я уже посидев тут достиг такого уровня что начинаю флудить).

> Ты не вправе требовать от участников соответствия твоим
> ожиданиям

А я кстати и не у кого и не требовал! Если вы где-то ето прочитали между строк тогда ето Ваши проблемы!
Требование (действие) — действие, выражающееся в настойчивой, категорической, просьбе исполнить что-либо.


 
Плохиш ©   (2011-03-03 15:10) [38]


> ну должны же быть какие то правила общения.

На первой странице форумов все правила описаны, сходи почитай.
Направления даны в первых постах, если ты не в состоянии или у тебя нет желания их понять и выполнить, то это твои проблемы.


 
KilkennyCat ©   (2011-03-03 15:17) [39]


>  Oleg_teacher   (03.03.11 14:25) [37]
>  (кстати почему то и я уже посидев тут достиг такого уровня что начинаю
> флудить).


Да! :) Теперь ты наш человек!


 
Anatoly Podgoretsky ©   (2011-03-03 16:31) [40]

> KilkennyCat  (03.03.2011 13:07:31)  [31]

Это не хорошо!



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

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

Наверх





Память: 0.56 MB
Время: 0.004 c
2-1299063928
rodionov_uv
2011-03-02 14:05
2011.06.12
проблемы с окном


2-1299066825
oleg_teacher
2011-03-02 14:53
2011.06.12
ввод в ячейки стринггрида вещественных чисел


2-1299245500
rodionov_uv
2011-03-04 16:31
2011.06.12
Имя активного окна


2-1299150042
fantoma
2011-03-03 14:00
2011.06.12
Печать в fastreport


2-1299162806
novichek
2011-03-03 17:33
2011.06.12
Inerbase - хранимые процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский