Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Как заставить DBGrid или dxDBGrid(Quatum) вводить вещественные числа через точку (Delphi5+DBF+Table+DbGrid). В Win2000 стоит разделитель по умолчанию ',' На OnCreate формы пишу: DecimalSeparator:='.'; В таблице добавлены все поля, в свойствах вещественных полей: DisplayFormat:='#######0.00;#######0.00;#'; EditFormat:='#######0.00;#######0.00;#'; Что и где еще можно прописать что бы при редактировании можно было бы вводить точку, а не запятую (изменить в windows-е разделитель не предлагать :) При вышеуказанных настройках отображение происходит через точку, но при редактировании меняется на запятую и вводить можно только запятую, нажатие точки не воспринимается. Но если выйти из редактирования с запятой, то кричит неверный разделитель. Такая строчка: caption:=floattostr(strtofloat('3.14')); отрабатывает нормально, т.е. strtofloat с точкой нормально работает, а вот почему грид не дает точку вводить ? :(( Если DisplayFormat и EditFormat убрать, тот же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 04:47 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Попробовал для обычного грида из таблицы удалить все поля, что бы они просто автоматически подставлялись при Table.open, после этого шаманства можно стало вводить точку при DecimalSeparator:='.' Но динамическое подключение неудобно, это же нужно в realtime при старте вносить все описания полей width/caption и прочее. Тем более что dxDBGrid(Quatum) при простом открытии таблицы не прописывает сам поля в отличие от стандартного DBGrid. Так что неужели это неисправимый глюк Делфи ? При настроенном Table (все поля с масками) и dxDBGrid(Quatum) c подключенными полями точку ввести не получается. Может все же можно где еще что прописать, подшаманить или все придется делать динамически(без TFloatField и TdxDBGridMaskColumn)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 05:02 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Ура, вроде нашел :) На AfterOpen делаем: var i: integer; begin for i:=0 to Pred(DataSet.FieldCount) do begin if ((DataSet.Fields is TFloatField) and (DataSet.Fields.FieldKind=fkData)) then DataSet.Fields.ValidChars:=['0'..'9','.',',']; end; end; и тогда вводится и точка и запятая. Надо будет во всех режимах погонять. Может все же кто знает как сделать без этой процедуры на AfterOpen на каждой Table ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 05:39 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
procedure TDocEditForm.ItemsGridKeyPress(Sender: TObject; var Key: Char); begin if (Key = #13) and (QueryItems.State in [dsInsert, dsEdit]) then QueryItems.Post; if (Key in ['.', ',']) and ((ItemsGrid.SelectedField.DataType = ftFloat) or (ItemsGrid.SelectedField.DataType = ftBCD))then Key := DecimalSeparator; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2003, 08:33 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
To: Andrew Campball Данное решение подходит тогда, когда DecimalSeparator программы совпадает с DecimalSeparator windows или если поля в Grid-е подключаются динамически, а не в дизайнере. Если в Table добавлены поля базы (и настроены русские title.caption) и на create формы указывается DecimalSeparator отличный от DecimalSeparator windows (для примера в системе "," а в программе "."), то данный пример ничем помочь не может, т.е. тогда ни точку ни запятую ввести нельзя :( Любой из вас может это сам проверить на простом примере. Ключевое же для решения именно "статической" таблицы и несовпадающего с системным DecimalSeparator является DataSet.Fields.ValidChars:=['0'..'9','.',',']; Т.е. разрешить полю обрабатывать нажатия кнопок "," и "." Как дополнение к этому (т.е. к процедуре из предыдущего моего поста) можно использовать еще такую процедуру: procedure TForm1.TablePoleSetText(Sender: TField; const Text: String); var i: integer; s: String; begin s:=Text; i:=Pos('.',s); if (i>0) then s :=DecimalSeparator else begin i:=Pos(',',s); if (i>0) then s:=DecimalSeparator end; try Sender.Value:=StrToFloat(s); except on EConvertError do begin Application.MessageBox(pChar('Недопустимое значение "'+Text+'"!'), 'Внимание ошибка!', MB_OK+MB_ICONERROR); Abort; end end; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 03:47 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
блин вроде писал нормально, а [ i ] вырвыло, т.е. вместо s:=DecimalSeparator должно быть конечно s [ i ] :=DecimalSeparator ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 04:09 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Что и где еще можно прописать что бы при редактировании можно было бы вводить точку, а не запятую (изменить в windows-е разделитель не предлагать :) Я вам кажется ответил на Ваш вопрос. И что вам мешает в указаном примере написать не Key := DecimalSeparator а Key := '.' ? Обычно при вводе чисел используется цифровая часть клавиатуры и точку используют именно с нее. Но в русской раскладке там ',', а в английской - '.'. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 08:17 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
>>Я вам кажется ответил на Ваш вопрос. Цитировать вопрос нужно было с этими строчками: >>В Win2000 стоит разделитель по умолчанию ',' >>На OnCreate формы пишу:DecimalSeparator:='.'; >>В таблице добавлены все поля, в свойствах вещественных полей... :) А теперь попробуйте c при этих условиях работоспособность вашего примера. У меня при таких настройках нельзя ввести ни точку ни запятую и Key := '.' не поможет. Ваш пример помогает в том случае, если просто нужно обрабатывать нажатия и точки и запятой независимо от раскладки клавиатуры, но DecimalSeparator в программе должен совпадать с системным или таблица не должна содержать прописанных в дизайнере полей, а подключать их динамически. P.S. Специально проверил кроме delphi5 и на delphi7 - эффект тот же. P.P.S. Так что похоже только ValidChars помогает от Всех бед :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2003, 16:12 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Видимо это потому, что при автогенерации таблицы поле ValidChars формируется уже с учётом изенений и всё работает, а вот при создании полей в режиме проектирования Delphi использует для формирования ValidChars те настройки, которые в данный момент установлены на машине разработчика. Может быть попробовать именно на машине разработчика поменять в системе разделитель с ',' на '.' ? Тогда в момент проектирования будут сгенерированны корректные строки ValidChars? Хотя, видимо там в этом случае будет именно . вместо запятой, а не . и , как в ваших примерах. Не знаю, как оно будет в этом случае работать. В общем, это нужно попробовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 06:35 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
Не пробовал вставить DecimalSeparator := '.' не в FormCreate, а после begin в Project.Source? Хотя разницы большой нет, но у меня подобных проблем никогда не возникало. Ставил DecimalSeparator := '.' и волосы были мягкими и шелковистыми... :-\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 13:00 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
TO: _designer_ Это самое лучшее решение, действительно помогло!!! Т.е. если вставляем DecimalSeparator := '.' в Project.Source, то при создании таблицы делфи уже успевает узнать, что DecimalSeparator точка, а раньше он сначала создавал все компоненты и таблицу в том числе, а только потом вызывал OnCreate у главной формы и уже тут было поздно что либо менять. А так до создания формы, первой строчкой пишем DecimalSeparator := '.' не забыв SysUtils в uses добавить и как сказал _designer_ "волосы будут мягкими и шелковистыми..." Так что похоже вопрос решен самым оптимальным способом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 16:37 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
А еще можно в SysUtils процедурку GetFormatSettings поправить и забыть навсегда. Ну по крайней мере до перестановки дельфей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 19:06 |
|
||
|
Точка, а не запятая в DbGrid ?
|
|||
|---|---|---|---|
|
#18+
А вот править исходники самой Delphi нужно очень осторожно. Если у вас для всех компонентов есть исходные тексты, тогда проблем нет. А вот если что-то имеется только в виде уже откомпилированных dcu, то если они используют SysUtils, то захотят, чтобы их перекомпилировали... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2003, 22:03 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32197472&tid=2117802]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 273ms |
| total: | 436ms |

| 0 / 0 |
